FastAPI nie może obsłużyć UUID jako parametr w URL

0

Mam taki endpoint:

@app.get("/items/show/{item_id}")
def get_item_details(item_id: UUID, db: Session = Depends(get_db)):
    item_data = db.query(Item).filter(Item.id == item_id).one()
    item_data = item_data.__dict__

    return {"itemData": item_data}

Kiedy puszczam np. taki request: http://localhost:5000/items/show/7daa1670-fe4e-48c1-90cf-f8555f9f663c

To dostaję w odpowiedzi komunikat:

{
  "detail": [
    {
      "loc": [
        "path",
        "page_num"
      ],
      "msg": "value is not a valid integer",
      "type": "type_error.integer"
    }
  ]
}

Szukałem jakichś informacji na stacku, ale nic nie pomogły.
Czy ktoś byłby w stanie mi powiedzieć o co chodzi?

3

Co nie jest jasne w komunikacie: - "value is not a valid integer"?

3

Hm na pewno ten endpoint etc ładujesz?
Odpaliłem teraz u siebie:

@app.get("/{my_uuid}")
async def root(my_uuid: UUID):
    return {"message": my_uuid}

I działa, response:

{
  "message": "7daa1670-fe4e-48c1-90cf-f8555f9f663c"
}
0

Już wiem co było źle, kolejność endpointów, a mianowicie kolizja z tym:

@app.get("/items/{category}/{page_num}")

FastAPI odwoływało się najpierw do niego i traktowało "show" jako kategorię xd

0

Ta kategorie może lepiej dać jako filtr?

0

@_13th_Dragon: Hmm... Nie wiem czy rozumiem, jakiś przykład byś mógł podać?

0

@_13th_Dragon: Faktycznie, lepiej zamienić na ten sposób

1 użytkowników online, w tym zalogowanych: 0, gości: 1