Telethon asyncio type hint - PullRequest
       11

Telethon asyncio type hint

0 голосов
/ 31 августа 2018

Я использую библиотеку telethon в python. Я пытаюсь использовать подсказки типа, чтобы PyCharm функция автозаполнения работала правильно. В приведенном ниже фрагменте кода функция filter_open_dialogs принимает возвращаемое значение функции get_dialogs () в качестве входных данных. Читая документацию по телетону, я обнаружил, что тип возвращаемого значения get_dialogs() равен TotalList, поэтому добавьте подсказку типа во входной аргумент dialogs. Затем я попытался вызвать функцию filter_open_dialogs:

from telethon.tl.types import User
from telethon.helpers import TotalList
from telethon import TelegramClient, sync

class Crawler:

    def __init__(self, fetch: bool):

        self._client = TelegramClient('some_name', my_api_id, 'my_secret_api_hash')
        self._me = self._client.start(phone='my_phone_number', password='my_2fa_password')
        if fetch:
            self.get_open_dialogs()

    def get_open_dialogs(self):
        if self._me:
            Crawler.filter_open_dialogs(self._me.get_dialogs(), [])
            return self._me.get_dialogs()

    @staticmethod
    def filter_open_dialogs(dialogs: TotalList, filter_list: list):
        result = []
        if dialogs and dialogs.total:
            for dialog in dialogs:
                entity = dialog.entity
                if not isinstance(entity, User) and entity.id not in filter_list:
                    result.append(entity)
        return result

Но в строке filter_open_dialogs(self._me.get_dialogs(), []) PyCharm показывает это предупреждение:

Ожидаемый тип TotalList ', вместо него получено' Coroutine '...

Есть мысли, что не так?

1 Ответ

0 голосов
/ 19 сентября 2018

TotalList - это просто удобный класс, который поможет мне вернуть список с полем .total. Вы, вероятно, просто хотите добавить эту строку:

from telethon.tl.custom import Dialog

def filter_open_dialogs(dialogs, filter_list):
    dialog: Dialog
    ...  # rest of code in the method

Это должно сказать PyCharm правильно набрать подсказку. Я не думаю, что вы можете указать внутренний тип пользовательского класса.

...