SecondThundeR / shikithon

Yet another Python wrapper for Shikimori API
https://pypi.org/project/shikithon/
MIT License
8 stars 0 forks source link

Fix type hints for decorators #9

Closed ren3104 closed 1 year ago

ren3104 commented 1 year ago

Исправил декораторы, чтобы они не подменяли название, строку документации и т.д. Добавил в зависимости typing-extensions (также есть в зависимостях у pydantic). Исправил подсказки типов для декораторов, чтобы показывались аргументы, а не три точки (на скриншоте показано как теперь это выглядит). Снимок экрана 2023-01-04 в 20 20 50

Код:

from shikithon import ShikimoriAPI
import asyncio

async def main():
    api = ShikimoriAPI("Api Test", logging=False)
    m = api.animes.create_video
    print(m.__module__)
    print(m.__name__)
    print(m.__qualname__)
    print(m.__doc__)
    print(m.__annotations__)

asyncio.run(main())

Раньше:

shikithon.decorators.protected_method
protected_method_wrapper
protected_method.<locals>.protected_method_decorator.<locals>.protected_method_wrapper

            Decorator's wrapper function.

            Check for token expire time.
            If needed, triggers token refresh function.

            :param self: Resource instance
            :type self: BaseResource

            :param args: Positional arguments
            :type args: Tuple[Any]

            :param kwargs: Keyword arguments
            :type kwargs: Any

            :return: Fallback function if API object is in restricted mode
                or if required scope is missing
            :rtype: RT

{'self': 'BaseResource', 'args': 'Tuple[Any]', 'kwargs': 'Any', 'return': 'RT'}

Теперь:

shikithon.resources.animes
create_video
Animes.create_video

        Creates anime video.

        :param anime_id: Anime ID to create video
        :type anime_id: int

        :param kind: Kind of video
        :type kind: str

        :param name: Name of video
        :type name: str

        :param url: URL of video
        :type url: str

        :return: Created video info
        :rtype: Optional[Video]

{'anime_id': <class 'int'>, 'kind': <class 'str'>, 'name': <class 'str'>, 'url': <class 'str'>, 'return': typing.Union[shikithon.models.video.Video, NoneType]}
SecondThundeR commented 1 year ago

Спасибо большое, а то всё ломал себе голову и не знал как это фиксится 🤔