Giter Club home page Giter Club logo

types's Introduction

vkbottle-types

Библиотека VK API типов и методов для фреймворка vkbottle

Самую новую версию можно поставить с мастера:

pip install -U https://github.com/vkbottle/vkbottle-types/archive/master.zip

Если вы обнаружили баг в типах - не создавайте issue здесь, создайте его в разделе основного репозитория, добавив тег vkbottle-types.

Если вы в состоянии исправить эту проблему сами, то сделайте пулл реквест сами, пожалуйста. Можете упомянуть issue в основном репозитории

Оригинальная схема

https://github.com/VKCOM/vk-api-schema

Добавление патча для схемы (WIP)

Из-за того что разработчики вк недобросовестно подходят к публикации схемы и релизам в целом, был сделан патчер схемы.

Для того, чтобы создать новый патч, используется следующая команда:

python3 -m patcher -m "Add users.get missing param_name"

Генерация типов

Генератор написан >=Python 3.10, но типы, которые он генерирует, не используют новые тайп-хинты >=Python 3.9 и поддерживаются на более старых версиях питона <= Python 3.8

python3 -m generator

Подробнее как самому сгенерировать типы в HOWTO

types's People

Contributors

arseny2606 avatar deonix37 avatar dhvcc avatar drforse avatar feeeek avatar kforbro avatar lisovq avatar luwqz1 avatar monosans avatar mrsmitix avatar ne0shka avatar olegt0rr avatar qulaz avatar thebakercat avatar timoniq avatar yilbegan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

types's Issues

Test

Почему в проекте не используется линтинг/тайпчекинг mypy/форматтеры?

Можно было бы настроить окружение, на подобие основного модуля (+ gh-actions), только с небольшими изменениями

И если и делать, то, конечно, после #14 и #15, потому что flake8 и mypy на данный момент сходят с ума

UserEvent as NamedTuple

В MessageView юзера евент приходит в виде листа, надо бы это дело обернуть в typing.NamedTuple, если получиться

Судя по докам и ручному дебагу я накидал что-то примерно такое. Я не уверен, что этот формат статичен и верен, но, думаю, от этого можно оттолкнуться

class UserEvent(NamedTuple):
    message_type: int
    message_id: int
    peer_id: int
    idk: int
    timestamp: int
    idk2: dict
    text: str
    raw_data: Optional[dict]

Dependencies

Можно заметить, что для тайп чекинга используются некоторые типы из модуля vkbottle

https://github.com/timoniq/vkbottle-types/blob/b1710398e49c55995bcf5aeb76c3704213369de4/vkbottle_types/events/bot_events.py#L8

Однако в дев зависимостях его нет. В основном модуле vkbottle_types это дев зависимость, то есть, если ставить его с PyPi или локально - ничего плохого не должно произойти

Отсутствие import'ов

Metadata-Version: 2.1
Name: vkbottle-types
Version: 5.199.26.dev0

vkbottle_types.codegen.responses.account

Отсутствует import

	UsersUserMin,
	UsersUserSettingsXtr

image

vkbottle_types.codegen.responses.base

Отсутствует import

   BaseLinkNoProduct

image

vkbottle_types.codegen.methods.*

Возможно во всех файлах внутри папки methods невозможно совершить import OkResponse
from vkbottle_types.responses.base import OkResponse ImportError: cannot import name 'OkResponse' from 'vkbottle_types.responses.base'
image

Исправить: сигнатуры апи методов через `@typing.overload`

К сожалению, его сложно поддерживать, так как он приводит к ошибкам типизации из-за того, что в схеме нет параметров, которые по какой-то непонятной причине есть в зависимостях. Ничего удивительного, ведь имеем дело с VK API.

Решение: создать nicifications и вручную улучшать перегрузки и реализации методов.

# generator/nicifications/methods/messages.py
import typing

from vkbottle_types.methods.base_category import BaseCategory
from vkbottle_types.objects import (
    MessagesChat,
    MessagesChatFull,
    UsersFields,
)
from vkbottle_types.responses.messages import *  # noqa: F401,F403


class MessagesCategory(BaseCategory):
    @typing.overload
    async def get_chat(
        self,
        *,
        chat_id: int,
        name_case: typing.Optional[str] = None,
    ) -> "MessagesChat": ...

    @typing.overload
    async def get_chat(
        self,
        *,
        chat_id: int,
        fields: typing.List[UsersFields],
        name_case: typing.Optional[str] = None,
    ) -> "MessagesChatFull": ...

    @typing.overload
    async def get_chat(
        self,
        *,
        chat_ids: typing.List[int],
        name_case: typing.Optional[str] = None,
    ) -> typing.List[MessagesChat]: ...

    @typing.overload
    async def get_chat(
        self,
        *,
        chat_ids: typing.List[int],
        fields: typing.List[UsersFields],
        name_case: typing.Optional[str] = None,
    ) -> typing.List[MessagesChatFull]: ...

    async def get_chat(
        self,
        fields: typing.Optional[typing.List[UsersFields]] = None,
        chat_ids: typing.Optional[typing.List[int]] = None,
        chat_id: typing.Optional[int] = None,
        name_case: typing.Optional[str] = None,
        **kwargs: typing.Any,
    ) -> typing.Union[
        typing.List[MessagesChat],
        "MessagesChatFull",
        typing.List[MessagesChatFull],
        "MessagesChat",
    ]:  # implementation...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.