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 f'Security check. Enter number: {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 f"[{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 f'Response code {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 = f'https://api.vk.com/captcha.php?sid={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 VkRequestsPoolException(Exception):
def __init__(self, error, *args, **kwargs):
self.error = error
super(VkRequestsPoolException, self).__init__(*args, **kwargs)