Я пытался запустить pytype
для некоторой кодовой базы.
В проекте используется sqlalchemy, и для упрощения вещей, скажем:
/proj/common/model/MyModel.py
:
Base = declarative_base()
class MyModel(Base):
__tablename__ = "my_table"
id = Column(Integer, primary_key=True, autoincrement=True)
my_column = Column(String(64), nullable=True)
/proj/services/my_service/MyService.py
:
class MyService:
def create_my_model(self, some_value):
my_model = MyModel(my_column=some_value)
self._db_session.add(my_model)
self._db_session.flush()
return my_model.id
def get_by_id(self, id):
return self._db_session.query(MyModel).filter(MyModel.id == id).one()
сейчас я пытаюсь запустить pytype
на службе. Итак:
cd /proj
pytype services/my_service/
это успешно завершается:
Computing dependencies
WARNING generate default: System module services.my_service.MyService
Analyzing 1 sources with 0 local dependencies
ninja: Entering directory `/proj/.pytype'
[1/1] check services.my_service.MyService
Success: no errors found
Это круто,
НО
проверка сгенерированной заглушки, cat /proj/.pytype/pyi/services/my_service/MyService.pyi
, Я вижу:
# (generated with --quick)
import __future__
from typing import Any
ALERT_TYPES: Any
ALERT_TYPE_2_SERVICE_NAME: dict
absolute_import: __future__._Feature
orm_object_to_dictionary_recursive: Any
class MyService(Any):
create_my_model: Any
get_by_id: Any
Итак, я решил, что это связано с sqlalchemy
, и поэтому я установил заглушку sqlalchemy: pip install -U sqlalchemy-stubs
.
Я также удалил каталог .pytype
(rm -rf /proj/.pytype) и повторно запустил pytype
(pytype my_service/
), только чтобы получить тот же результат (все Any
).
Но как я могу сказать pytype
использовать эти заглушки и сгенерировать более правильный заглушку для моего сервиса? то есть что-то похожее на это:
class MyService(Any):
create_my_model: int
get_by_id: MyModel