Issue #7 resolved

Captcha needed

Valentin Gorbunov
created an issue

Привет.

Есть такая ошибка: http://vk.com/developers.php?oid=-1&p=Ошибка%3A_Captcha_is_needed

И для возможности её дальнейшей обработки, необходимо передать капчу дальше. (у нас она всё равно попадает к живому юзеру, поэтому актуально)

пример возвращаемого ответа:

{{{

!python

data = {'error': {'captcha_img': 'http://api.vk.com/captcha.php?sid=576875162075', 'captcha_sid': '576875162075', 'error_code': 14, 'error_msg': 'Captcha needed', 'request_params': ({'key': <type 'str'>, 'value': <type 'str'>}, {'key': <type 'str'>, 'value': <type 'str'>}, {'key': <type 'str'>, 'value': <type 'str'>}, {'key': <type 'str'>, 'value': <type 'str'>}, {'key': <type 'str'>, 'value': <type 'str'>}, {'key': <type 'str'>, 'value': <type 'str'>})}} }}}

На скорую руку можно решить пока так:

{{{

!python

def _get(self, method, timeout=DEFAULT_TIMEOUT, **kwargs):
    ...
    data = json.loads(response)
    if "error" in data:
        params = data["error"]["request_params"]
        if int(data["error"]["error_code"]) == 14:
            params.update({
                'captcha_img': data['captcha_img'],
                'captcha_sid': data['captcha_sid']
            })
        raise VKError(data["error"]["error_code"], data["error"]["error_msg"], params)
    ...

}}}

Comments (13)

  1. Mikhail Korobov repo owner
    • changed status to open

    Т.е. я правильно понимаю, проблема в том, что в случае с капчей мы при выкидывании исключения теряем информацию, необходимую для правильной обработки этого исключения?

  2. Mikhail Korobov repo owner

    Если так, то лучше бы в исключение все данные передавать - один параметр, data['error'] просто. А то при других исключениях может тоже полезная информация теряться значит, лучше все разом починить.

    Для обратной совместимости можно свойства (property) code, description и params к исключению добавить, и вычислять их из self.error.

  3. Mikhail Korobov repo owner

    Ага, почти хорошо! Но вот в конструкторе лучше выкинуть обратную совместимость: не представляю, зачем можно выбрасывать это исключение в своем коде, а вот код библиотеки эта поддержка все-таки запутывает. Ну и python 2.4 мы не поддерживаем, поэтому можно декораторами пользоваться свободно (я, кстати, хочу и поддержку 2.5 выкинуть скоро, а 3.2 добавить). Найдешь еще время допилить?

  4. Valentin Gorbunov reporter

    конструктор допилю на днях.

    А упоминая декораторы, ты предполагаешь ещё какие-то конкретные допилы?)

  5. Mikhail Korobov repo owner

    Ага, спасибо!

    Ну и просто для справки - чтоб сделать релиз, нужно увеличить версию, добавить запись в CHANGES (кстати, тут его нет, надо бы сделать), создать тег в hg и загрузить все на pypi - мне было бы удобнее делать это все самому, а то запутаться можно.

    В других open-source проектах тоже так принято - версию увеличивает человек, который делает релиз, просто удобнее так получается. Тут, кстати, и 1.2.2-то скорее по ошибке вылезла, ее на pypi нет - т.к. исправление работы с json было не совсем готово, я релиз делать не стал.

    Завтра все изменения волью и релиз сделаю.

  6. Mikhail Korobov repo owner

    Спасибо!

    Релиз на pypi пока сделать не получается (там что-то у них падает при загрузке), еще попозже сделаю.

    Кстати, оказывается, когда-то вся информация передавалась в исключения: https://bitbucket.org/kmike/vkontakte/changeset/31dab3e93852#chg_vkontakte/__init__.py_oldline48 - упустил этот момент тогда.

  7. Nik U

    так сейчас этот момент не пофиксен, как я понимаю. не работает исключение с капчей

  8. Log in to comment