FastAPI / Pydantic в проекте с MyPy

В настоящее время я работаю с учебником fastAPI, и моя среда настроена с использованием black, flake8, bandit и mypy. Все в учебнике работает нормально, но мне все еще приходится # набирать: игнорировать вещи, чтобы mypy сотрудничал.

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


@app.post("/items/")
async def create_items(item: Item) -> Item:
    return item

Mypy затем ошибки:

 ❯ mypy main.py                                                                                                                                                                                                 [14:34:08]
main.py:9: error: Incompatible types in assignment (expression has type "None", variable has type "str")
main.py:11: error: Incompatible types in assignment (expression has type "None", variable has type "float") 

Я мог бы # ввести: игнорировать, но тогда я потеряю подсказки типа и проверку в моем редакторе. Я упустил что-то очевидное, или мне просто нужно отключить mypy для проектов FastAPI?


person Justin S    schedule 21.05.2019    source источник


Ответы (2)


Вы можете использовать Optional:

from typing import Optional

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

Это говорит mypy, что значение должно быть этого типа, но None приемлемо.

person tiangolo    schedule 21.05.2019

Если вы используете mypy, он может жаловаться на объявления типа, например:

tax: float = None

С ошибкой, например: Несовместимые типы в назначении (выражение имеет тип «None», переменная имеет тип «float»). В этих случаях вы можете использовать Optional, чтобы сообщить mypy, что значение может быть None, например:

tax: Optional[float] = None

В приведенном выше коде ознакомьтесь с этим видео, в этом объяснено его здесь объясняется базовая модель

person Babu Reddy    schedule 22.10.2019