Проверьте, не является ли Список пустым с Pydanti c элегантным способом - PullRequest
0 голосов
/ 28 апреля 2020

Допустим, у меня есть BaseModel, и я хочу проверить, что список options не пустой. Я прекрасно могу сделать это с помощью validator:

class Trait(BaseModel):
    name: str
    options: List[str]

    @validator("options")
    def options_non_empty(cls, v):
        assert len(v) > 0
        return v

Есть ли другой, более элегантный способ сделать это?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Если вы хотите использовать @validator:

return v if v

Python предполагает boolean-ess пустого списка как False

Если вы не Не хотите использовать @validator:

В Пиданти c используйте conlist:

from pydantic import BaseModel, conlist
from typing import List

class Trait(BaseModel):
    name: str
    options: conlist(str, min_items = 1)
1 голос
/ 28 апреля 2020

В Python пустые списки ложны, а списки с любым количеством элементов являются правдивыми:

>>> bool([])
False
>>> bool([1,2,3])
True
>>> bool([False])
True
>>> bool([[]])
True

Это означает, что вы можете просто assert v или assert Trait.options, чтобы подтвердить, что список не пусто.

...