Skip to content

Commit 546d38b

Browse files
committed
More refactoring
1 parent 14f20de commit 546d38b

9 files changed

Lines changed: 81 additions & 62 deletions

File tree

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from distutils.core import setup
44

55
"""
6-
@author: Kirill Python
6+
@author: python273
77
@contact: https://vk.com/python273
88
@license Apache License, Version 2.0, see LICENSE file
99

vk_api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .vk_api import VkApi
77

88
"""
9-
@author: Kirill Python
9+
@author: python273
1010
@contact: https://vk.com/python273
1111
@license Apache License, Version 2.0, see LICENSE file
1212

vk_api/audio.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010

1111

1212
class VkAudio:
13+
14+
__slots__ = ('_vk',)
15+
1316
def __init__(self, vk):
1417
self._vk = vk
1518

1619
def get(self, owner_id, offset=0):
17-
""" Получение списка аудиозаписей пользователя
20+
""" Получить список аудиозаписей пользователя
1821
1922
:param owner_id: ID владельца (отрицательные значения для групп)
2023
:param offset: смещение
@@ -38,7 +41,7 @@ def get(self, owner_id, offset=0):
3841
return scrap_data(response.text)
3942

4043
def search_user(self, owner_id, q=''):
41-
""" Поиск по аудиозаписям пользователя
44+
""" Искать по аудиозаписям пользователя
4245
4346
:param owner_id: ID владельца (отрицательные значения для групп)
4447
:param q: запрос
@@ -66,7 +69,7 @@ def search_user(self, owner_id, q=''):
6669
]
6770

6871
def search(self, q='', offset=0):
69-
""" Поиск аудиозаписей
72+
""" Искать аудиозаписи
7073
7174
:param q: запрос
7275
:param offset: смещение
@@ -85,7 +88,7 @@ def search(self, q='', offset=0):
8588

8689

8790
def scrap_data(html):
88-
""" Парсинг списка аудиозаписей """
91+
""" Парсинг списка аудиозаписей из html странцы """
8992

9093
soup = BeautifulSoup(html, 'html.parser')
9194
tracks = []

vk_api/exceptions.py

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22
"""
3-
@author: Kirill Python
3+
@author: python273
44
@contact: https://vk.com/python273
55
@license Apache License, Version 2.0, see LICENSE file
66
@@ -23,10 +23,6 @@ class AuthError(VkApiError):
2323
pass
2424

2525

26-
class AuthorizationError(AuthError): # todo: delete
27-
pass
28-
29-
3026
class LoginRequired(AuthError):
3127
pass
3228

@@ -48,6 +44,7 @@ class TwoFactorError(AuthError):
4844

4945

5046
class SecurityCheck(AuthError):
47+
5148
def __init__(self, phone_prefix=None, phone_postfix=None, response=None):
5249
self.phone_prefix = phone_prefix
5350
self.phone_postfix = phone_postfix
@@ -59,11 +56,12 @@ def __str__(self):
5956
self.phone_prefix, self.phone_postfix
6057
)
6158
else:
62-
return ('Security check. Phone prefix and postfix not detected. '
63-
'Please send bugreport. Response in self.response')
59+
return ('Security check. Phone prefix and postfix are not detected.'
60+
' Please send bugreport (response in self.response)')
6461

6562

6663
class ApiError(VkApiError):
64+
6765
def __init__(self, vk, method, values, error):
6866
self.vk = vk
6967
self.method = method
@@ -72,9 +70,7 @@ def __init__(self, vk, method, values, error):
7270
self.error = error
7371

7472
def try_method(self):
75-
""" Пробует отправить запрос заново
76-
77-
"""
73+
""" Отправить запрос заново """
7874

7975
return self.vk.method(self.method, self.values)
8076

@@ -84,16 +80,15 @@ def __str__(self):
8480

8581

8682
class ApiHttpError(VkApiError):
83+
8784
def __init__(self, vk, method, values, response):
8885
self.vk = vk
8986
self.method = method
9087
self.values = values
9188
self.response = response
9289

9390
def try_method(self):
94-
""" Пробует отправить запрос заново
95-
96-
"""
91+
""" Отправить запрос заново """
9792

9893
return self.vk.method(self.method, self.values)
9994

@@ -102,6 +97,7 @@ def __str__(self):
10297

10398

10499
class Captcha(VkApiError):
100+
105101
def __init__(self, vk, captcha_sid, func, args=None, kwargs=None, url=None):
106102
self.vk = vk
107103
self.sid = captcha_sid
@@ -116,28 +112,25 @@ def __init__(self, vk, captcha_sid, func, args=None, kwargs=None, url=None):
116112
self.image = None
117113

118114
def get_url(self):
119-
""" Возвращает ссылку на изображение капчи
120-
121-
"""
115+
""" Получить ссылку на изображение капчи """
122116

123117
if not self.url:
124118
self.url = 'https://api.vk.com/captcha.php?sid={}'.format(self.sid)
125119

126120
return self.url
127121

128122
def get_image(self):
129-
""" Возвращает бинарное изображение капчи, получаемое по get_url()
130-
"""
123+
""" Получить изображение капчи (jpg) """
131124

132125
if not self.image:
133126
self.image = self.vk.http.get(self.get_url()).content
134127

135128
return self.image
136129

137-
def try_again(self, key):
138-
""" Отправляет запрос заново с ответом капчи
130+
def try_again(self, key=None):
131+
""" Отправить запрос заново с ответом капчи
139132
140-
:param key: текст капчи
133+
:param key: ответ капчи
141134
"""
142135

143136
if key:

vk_api/execute.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@
1212

1313

1414
class VkFunction(object):
15+
16+
__slots__ = ('code', '_minified_code', 'args', 'clean_args', 'return_raw')
17+
1518
def __init__(self, code, args=None, clean_args=None, return_raw=False):
16-
""" Wrapper around execute method
19+
""" Обертка над методом execute
1720
18-
:param code: function code
19-
:param args: tuple with args (will be converted via json.dumps)
20-
:param clean_args: tuple with args (will be converted via str)
21+
:param code: код функции (VKScript)
22+
:param args: список аргументов (будут конвертированы в JSON)
23+
:param clean_args: список raw аргументов (будут вставлены как строки)
24+
:param return_raw: аргумент raw функции VkApi.method
2125
"""
2226

2327
self.code = code
@@ -42,7 +46,7 @@ def compile(self, args):
4246
def __call__(self, vk, *args, **kwargs):
4347

4448
if not isinstance(vk, (VkApi, VkApiMethod)):
45-
raise VkFunctionException(
49+
raise TypeError(
4650
'The first arg should be VkApi or VkApiMethod instance'
4751
)
4852

vk_api/longpoll.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22
"""
3-
@author: Kirill Python
3+
@author: python273
44
@contact: https://vk.com/python273
55
@license Apache License, Version 2.0
66
@@ -123,6 +123,7 @@ def get_all_event_attrs():
123123

124124

125125
class VkLongPoll(object):
126+
126127
__slots__ = (
127128
'vk', 'wait', 'use_ssl', 'mode',
128129
'url', 'session',
@@ -213,6 +214,7 @@ def listen(self):
213214

214215

215216
class Event(object):
217+
216218
__slots__ = (
217219
'raw', 'type', 'message_flags', 'platform', 'offline_type',
218220
'user_id', 'group_id',

vk_api/requests_pool.py

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,51 @@
1616
if sys.version_info.major == 2:
1717
range = xrange
1818

19+
20+
class VkRequestsPoolException(Exception):
21+
pass
22+
23+
1924
PoolRequest = namedtuple('PoolRequest', ['method', 'values', 'result'])
2025

2126

2227
class RequestResult(object):
28+
29+
__slots__ = ('_result', 'ready', '_error')
30+
2331
def __init__(self):
2432
self._result = None
2533
self.ready = False
26-
self.error = False
34+
self._error = False
2735

28-
def set_result(self, result):
29-
self._result = result
30-
self.ready = True
36+
@property
37+
def error(self):
38+
return self._error
3139

32-
def set_error(self, error):
33-
self.error = error
40+
@error.setter
41+
def error(self, value):
42+
self._error = value
3443
self.ready = True
3544

36-
@property
37-
def ok(self):
38-
return not self.error
39-
4045
@property
4146
def result(self):
4247
if not self.ready:
43-
raise Exception('Result is not ready')
48+
raise RuntimeError('Result is not available in `with` context')
4449

45-
if self.error:
46-
raise Exception('Got error while executing request')
50+
if self._error:
51+
raise VkRequestsPoolException('Got error while executing request')
4752

4853
return self._result
4954

55+
@result.setter
56+
def result(self, result):
57+
self._result = result
58+
self.ready = True
59+
60+
@property
61+
def ok(self):
62+
return self.ready and not self._error
63+
5064

5165
class VkRequestsPool(object):
5266
""" Позволяет сделать несколько обращений к API за один запрос
@@ -86,7 +100,7 @@ def method(self, method, values=None):
86100
"""
87101

88102
if self.one_param:
89-
raise Exception('One param mode is not working with self.method')
103+
raise RuntimeError('One param mode does not work with self.method')
90104

91105
if values is None:
92106
values = {}
@@ -115,7 +129,7 @@ def method_one_param(self, method, key, values, default_values=None):
115129
"""
116130

117131
if not self.one_param and self.pool:
118-
raise Exception('One param mode is not working with self.method')
132+
raise RuntimeError('One param mode does not work with self.method')
119133

120134
if default_values is None:
121135
default_values = {}
@@ -150,11 +164,11 @@ def execute(self):
150164
if response_errors:
151165
self.execute_errors += response_errors[:-1]
152166

153-
for x, r in enumerate(response):
154-
if r is not False:
155-
cur_pool[x].result.set_result(r)
167+
for x, response in enumerate(response):
168+
if response is not False:
169+
cur_pool[x].result.result = response
156170
else:
157-
cur_pool[x].result.set_error(True)
171+
cur_pool[x].result.error = True
158172

159173
def execute_one_param(self):
160174
result = {}
@@ -178,7 +192,7 @@ def execute_one_param(self):
178192
if r is not False:
179193
result[cur_pool[x]] = r
180194

181-
self.one_param['return'].set_result(result)
195+
self.one_param['return'].result = result
182196

183197

184198
def check_one_method(pool):

vk_api/upload.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@
99

1010

1111
class VkUpload(object):
12+
""" Загрузка файлов через API (https://vk.com/dev/upload_files) """
13+
14+
__slots__ = ('vk',)
15+
1216
def __init__(self, vk):
1317
"""
1418
1519
:param vk: объект VkApi
1620
"""
1721

1822
self.vk = vk
19-
# https://vk.com/dev/upload_files
2023

2124
def photo(self, photos, album_id,
2225
latitude=None, longitude=None, caption=None, description=None,

vk_api/vk_api.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22
"""
3-
@author: Kirill Python
3+
@author: python273
44
@contact: https://vk.com/python273
55
@license Apache License, Version 2.0, see LICENSE file
66
@@ -274,8 +274,6 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
274274
self.storage.cookies = cookies_to_list(self.http.cookies)
275275
self.storage.save()
276276
else:
277-
self.logger.info('Unknown auth error')
278-
279277
raise AuthError(
280278
'Unknown error. Please send bugreport: https://vk.com/python273'
281279
)
@@ -586,16 +584,18 @@ def method(self, method, values=None, captcha_sid=None, captcha_key=None,
586584

587585

588586
class VkApiMethod(object):
587+
588+
__slots__ = ('_vk', '_method')
589+
589590
def __init__(self, vk, method=None):
590591
self._vk = vk
591592
self._method = method
592593

593594
def __getattr__(self, method):
594-
if self._method:
595-
self._method += '.' + method
596-
return self
597-
598-
return VkApiMethod(self._vk, method)
595+
return VkApiMethod(
596+
self._vk,
597+
(self._method + '.' if self._method else '') + method
598+
)
599599

600600
def __call__(self, **kwargs):
601601
return self._vk.method(self._method, kwargs)

0 commit comments

Comments
 (0)