API .
https://pastebin.com/37MQAKxU
Суть, externalDocs параметр не обязателен для передачи, но если указывается, то для него необходимо указать хотя бы url. В моём случае, если создан пустой словарь, прогнав через фактори, убрать его возможно только после валидации ?
эй а где датаклассы кстати
TypedDict же переваривает?
во первых - open_api_tags это не list[OpenApiTag].
а что тогда ?
list[dict[str, str | dict]]
тогда это ложь ? https://peps.python.org/pep-0589/#using-typeddict-types
нет, я вру. https://youtrack.jetbrains.com/issue/PY-36008
Что-то такое? @dataclass class OptionalField: url: str docs: Optional[str] = None @dataclass class Result: not_optional_field: str optional_field: Optional[OptionalField] = None data = {"not_optional_field": "some_value", "optional_field": { "url": "https://google.com" }} factory = Factory() tags = factory.load(data, Result)
Если optional_field нет совсем - не свалится Если optional_field есть, но без url - свалится
а по существу вопроса, OpenApiTag total=False. Может быть опущен один из ключей, в данном случае все поля опциональны. Идем дальше - ExternalDocs, total так же False. т.е description опционален. Но вот ExternalDocsUrl, по умолчанию total=True, должен срабатывать и действительно url должен быть обязателен, я так думаю.
Для линтера использовать TypedDict, для фабирики dataclass ?
{'name': <class 'str'>, 'description': <class 'str'>, 'external_docs': <class '__main__.ExternalDocs'>} {'url': <class 'str'>, 'description': typing.Optional[str]} хотя по тайп хинтам все правильно
Здесь получается, что обязательных поля 2, это name из OpenApiTagName и url из ExternalDocsUrl. Таки да Но url станет обязательным, если будет external_docs
print(ExternalDocs.optional_keys) угу
варианта 2, либо на датаклассах, либо подождать ответа Тишки
да, я тоже думаю что подожду. Скорей всего на датаклассах это эффективнее будет реализовать, а за типизацию будет отвечать TypedDict, так
Обсуждают сегодня