169 похожих чатов

Кто-То делал для SQLAlchemy анотацию типов для работы с сессиями

через @contextmanager ?

Вот этот код прекрасно понимает PyCharm, автодополнение кода работает как надо:
@contextmanager
def db_session() -> ContextManager[Session]:
session: Session = DBSession()
try:
yield session
session.flush()
session.expunge_all()
session.commit()
except Exception:
session.rollback()
raise
finally:
session.close()

Но на этот код ругается mypy, который я использую в pre-commit хуках:
error: Argument 1 to "contextmanager" has incompatible type "Callable[[], ContextManager[Any]]"; expected "Callable[..., Iterator[<nothing>]]”

Если же я делаю как хочет mypy: def db_session() -> Iterator[Session] ,то теперь mypy счастлив, но вот PyCharm больше не делает автодополнение по коду, он перестает понимать, что этот контект менеджер возвращает объекти типа Session.

Как бы сделать так, чтобы PyCharm и mypy договорились бы друг с другом?

P.S. Причер усмирить mypy не так просто. Если в определении db_session я могу успокоить mypy через комменты типа # type:ignore,

то он начинает ругаться на все те места, где я этот контекс сессий начинаю использовать: error: Need type annotation for 'db

1 ответов

36 просмотров

Какой ужас.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта