Pull to refresh

Comments 13

иногда возникают проблемы с циклическими импортами, но их немного, и ими можно пренебречь.

вот этот момент очень интересует, в случае появления циклического импорта вы просто забиваете болт на типы, или как-то решаете проблему. Если второе, то расскажите как?

пишем докстринг вида
"""
circular import
-> Optional[MetaOrder]:
"""

typeguard в таком случае типы не проверяет

В нашем проекте все проблемы циклических импортов возникают, когда одна django модель импортирует другую.
Это будет работать если внутри файла есть
from ... import MetaOrder

но т.к. честный импорт сделать нельзя и сделать как вы выше описали, то будет

NameError: name 'MetaOrder' is not defined


По крайне мере у меня так, я не смог эту проблему решить ((
return OrderInfoResult(
    dict(
        order_id=data_in.order_id,
        checkin_at=dt.datetime.today(),
        checkout_at=dt.datetime.today() + dt.timedelta(days=1),
        cancelled_at=None,
    )
)

Не очень понятно зачем у вас модели принимают dict, а не конкретные атрибуты. Это же, по-сути, делает невозможным проверку такого кода статическим type-checker'ом, если только в конструкторе модели не указан тип TypedDict
можно и так
return OrderInfoResult(
        order_id=data_in.order_id,
        checkin_at=dt.datetime.today(),
        checkout_at=dt.datetime.today() + dt.timedelta(days=1),
        cancelled_at=None,
)


это уже зависит от того какая библиотека для валидации используется
декоратор @contract поддерживает Generic'и?
Получается вы вообще не используете в проекте generic'и? Или у вас @typechecked используется только для входных/выходных параметров api?
Получается вы вообще не используете в проекте generic'и?

Не используем.

или у вас @typechecked используется только для входных/выходных параметров api?

Нуу, это где-то 50% проекта + бизнес логика еще где-то 30%
Добрый день, спасибо что упомянули о enforce. Как автор этой библиотечки — приятно слышать, когда о ней говорят. Если честно, то много негатива услышал, когда ее чисто на голом энтузиазме писал.

Хочу еще сказать, что поддержка 3.7+ просто нереальная задача для меня одного на данный момент. Это придется почти все переписать. И надо будет дропнуть поддержку всех более старых версий. Это слишком сильно давит на мотивацию. Если кто-то хочет помочь, то буду рад помочь.
github.com/RussBaz/enforce/issues/71

С моей стороны самая большая пробоема в том, что в 3.7 сильно поменялась внутренняя структура модуля typing. И в месте с этим встала большая проблема совместимости с прошлыми версиями. Да и вообще, теперь надо много чего переписывать.
Sign up to leave a comment.