Source code for vk_api.exceptions

# -*- coding: utf-8 -*-
"""
:authors: python273
:license: Apache License, Version 2.0, see LICENSE file

:copyright: (c) 2019 python273
"""


TWOFACTOR_CODE = -2
HTTP_ERROR_CODE = -1
TOO_MANY_RPS_CODE = 6
CAPTCHA_ERROR_CODE = 14
NEED_VALIDATION_CODE = 17


[docs]class VkApiError(Exception): pass
[docs]class AccessDenied(VkApiError): pass
[docs]class AuthError(VkApiError): pass
[docs]class LoginRequired(AuthError): pass
[docs]class PasswordRequired(AuthError): pass
[docs]class BadPassword(AuthError): pass
[docs]class AccountBlocked(AuthError): pass
[docs]class TwoFactorError(AuthError): pass
[docs]class SecurityCheck(AuthError): def __init__(self, phone_prefix=None, phone_postfix=None, response=None): super(SecurityCheck, self).__init__() self.phone_prefix = phone_prefix self.phone_postfix = phone_postfix self.response = response def __str__(self): if self.phone_prefix and self.phone_postfix: return 'Security check. Enter number: {} ... {}'.format( self.phone_prefix, self.phone_postfix ) else: return ('Security check. Phone prefix and postfix are not detected.' ' Please send bugreport (response in self.response)')
[docs]class ApiError(VkApiError): def __init__(self, vk, method, values, raw, error): super(ApiError, self).__init__() self.vk = vk self.method = method self.values = values self.raw = raw self.code = error['error_code'] self.error = error
[docs] def try_method(self): """ Отправить запрос заново """ return self.vk.method(self.method, self.values, raw=self.raw)
def __str__(self): return '[{}] {}'.format(self.error['error_code'], self.error['error_msg'])
[docs]class ApiHttpError(VkApiError): def __init__(self, vk, method, values, raw, response): super(ApiHttpError, self).__init__() self.vk = vk self.method = method self.values = values self.raw = raw self.response = response
[docs] def try_method(self): """ Отправить запрос заново """ return self.vk.method(self.method, self.values, raw=self.raw)
def __str__(self): return 'Response code {}'.format(self.response.status_code)
[docs]class Captcha(VkApiError): def __init__(self, vk, captcha_sid, func, args=None, kwargs=None, url=None): super(Captcha, self).__init__() self.vk = vk self.sid = captcha_sid self.func = func self.args = args or () self.kwargs = kwargs or {} self.code = CAPTCHA_ERROR_CODE self.key = None self.url = url self.image = None
[docs] def get_url(self): """ Получить ссылку на изображение капчи """ if not self.url: self.url = 'https://api.vk.com/captcha.php?sid={}'.format(self.sid) return self.url
[docs] def get_image(self): """ Получить изображение капчи (jpg) """ if not self.image: self.image = self.vk.http.get(self.get_url()).content return self.image
[docs] def try_again(self, key=None): """ Отправить запрос заново с ответом капчи :param key: ответ капчи """ if key: self.key = key self.kwargs.update({ 'captcha_sid': self.sid, 'captcha_key': self.key }) return self.func(*self.args, **self.kwargs)
def __str__(self): return 'Captcha needed'
[docs]class VkAudioException(Exception): pass
[docs]class VkAudioUrlDecodeError(VkAudioException): pass
[docs]class VkToolsException(VkApiError): def __init__(self, *args, response=None): super().__init__(*args) self.response = response
[docs]class VkRequestsPoolException(Exception): def __init__(self, error, *args, **kwargs): self.error = error super(VkRequestsPoolException, self).__init__(*args, **kwargs)