Comments 9
Это не работает в Python 3.6.5 и выглядит не очень. Какие есть альтернативы?
До появления аннотаций — использовал rST-docstrings и абстрактные классы. В PyCharm (в т. ч. и CE) — они индексируются аналогично аннотациям. Вроде бы видел такое же поведение в Atom. Работает с модулями.
class _S3Client(abc.ABC):
@abc.abstractmethod
def create_bucket(self, Bucket):
"""
Creates bucket
:param Bucket: name
:type Bucket: str
:rtype object
"""
raise NotImplemented
client = boto3.client("s3") # type: _S3Client
# Тут и далее будут подсказки по _S3Client
Вот в чем проблема с boto3.
class S3Client:
def Bucket(self, ...) -> Bucket: ...
class Bucket: ...
Тут метод клиента и класс называются абсолютно одинаково и такое в каждом первом клиенте. mypy справедливо считает что возвращаемый тип — это метод, а не класс. Я нашел решение с само-импортом модуля
import s3.client as self_scope # модуль импортирует сам себя
class S3Client:
def Bucket(self, ...) -> self_scope.Bucket: ...
class Bucket: ...
Так все работает, но ранит чувства.
Методы/переменные должны именоваться с алфавитного символа нижнего регистра. К сожалению Amazon не слишко следует pep-8.
У mypy — есть задокументированое решение для подобных ситуаций.
У mypy — есть задокументированое решение для подобных ситуаций.
Было бы неплохо сделать аналогичный пакет для botocore. Наверное это должно быть не очень сложно, раз изначально всё генерируется из его данных.
Нет, для botocore стабы можно написать только руками. Это гораздо проще, но затратно по времени. Плюс, при обновлении botocore нужно будет проверять, не устарели ли стабы, в то время как для boto3 засчет генерации, обновление может быть полностью автоматизированно.
Но да, в 95% случаев, в новом релизе botocore меняются только JSON-файлы с описанием сервисов, так что стабы останутся без изменений.
Круто! Добавляйтесь в github.com/typeddjango/awesome-python-typing
Спасибо, отправил вам PR https://github.com/typeddjango/awesome-python-typing/pull/34
Sign up to leave a comment.
Автодополнение кода и проверка типов для boto3