Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка в VkApiError::destruct_response (vkquick-1.0) #15

Closed
Moonquit opened this issue Oct 19, 2020 · 12 comments
Closed

Ошибка в VkApiError::destruct_response (vkquick-1.0) #15

Moonquit opened this issue Oct 19, 2020 · 12 comments

Comments

@Moonquit
Copy link

Moonquit commented Oct 19, 2020

Описание

Я заметил ошибку, которая может возникать при инициализации в VkApiError::destruct_response. Т.к питон ожидает 3 значения для распаковки, но при некоторых ошибках в API VK (в моем случае ошибка №17) приходит 4 значение (в моём случае - это redirect_url).

Код:

import asyncio

from vkquick import API


async def main():
    """
    Creates a post in the group (the wall is open)
    """
    api = API(
        token="some_token",
        version=5.124,
        owner="user"
    )

    await api.wall.post(
        owner_id=-group_id_with_an_open_wall,
        message="Test"
    )

asyncio.run(main())

Ошибка в VkApiError::destruct_response:

 ... status_code, description, request_params = response["error"].values()
ValueError: too many values to unpack (expected 3)

JSON ошибки, который присылает API VK:

{
   "error":{
      "error_code":17,
      "error_msg":"Validation required: please open redirect_uri in browser",
      "request_params":[
         {
            "key":"method",
            "value":"wall.post"
         },
         {
            "key":"oauth",
            "value":"1"
         },
         {
            "key":"v",
            "value":"5.124"
         },
         {
            "key":"owner_id",
            "value":"-group_id_with_an_open_wall"
         },
         {
            "key":"message",
            "value":"Test"
         }
      ],
      "redirect_uri":"https://m.vk.com/activation?act=validate&api_hash=7005d2f15d640f3e02&hash=bb1ca97ec761fc37101"
   }
}

Hash в redirect_url был заменён - ссылка недействительна

@deknowny
Copy link
Owner

Оставьте пример JSON от вк, на котором валится метод

@deknowny
Copy link
Owner

Есть еще ошибки, которые отличаются от обычной структуры на 3 ключа?

@Moonquit
Copy link
Author

Да, вроде бы, ещё есть, но я не помню

@deknowny
Copy link
Owner

deknowny commented Oct 19, 2020

Тогда поступим следующим образом: для объекта ошибки будут присваиваться все поля из error (с такими же именами, как есть в приходящем JSON).

Есть ли ошибки, в которых нет request_params? Мне нужно знать это для построения текста исключения

@Moonquit
Copy link
Author

Честно говоря, тоже не знаю. Вообще, мне кажется, что request_params в тексте ошибки лишние и захламляют вывод.

@deknowny
Copy link
Owner

Да? И как же ты предлагаешь их показывать? По-моему, сейчас это сделано вполне красиво

А видеть их нужно. Как-никак, часть ответа от вк

@Moonquit
Copy link
Author

Я предлагаю их вообще не показывать. Но можно создать атрибут request_paramsв классе VkApiError и заполнять его при инициализации методом VkApiError::destruct_response. А разработчик, если ему это будет нужно, сам подёргает request_params:

try:
    ...
except vkquick.exceptions.VkApiError as err:
    print(err.request_params)

@deknowny
Copy link
Owner

Так я же их раскрашиваю и красиво в краткой форме вывожу...

@Moonquit
Copy link
Author

За это респект) Но просто это выглядит громоздко

@deknowny
Copy link
Owner

А если сделать возможность вывода в кратком/расширенном стиле через установку переменной окружения?

VKQUICK_SHOW_FULL_ERROR=1

К слову, это тема для нового issue

@Moonquit
Copy link
Author

Не знаю, не лишнее ли это извращение...

@deknowny
Copy link
Owner

Добавил поле extra_fields в классе исключения + отображение в дебаггере.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants