diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2018-03-03 15:10:20 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2018-03-03 15:10:20 +0300 |
commit | 768fe6080c0ef35935dce0b271d84d442ce0e641 (patch) | |
tree | c4c9c2a5b2dac7ffc1ea218d6fd74375fc3fdc4e /vk | |
parent | README update (diff) | |
download | vk-scripts-768fe6080c0ef35935dce0b271d84d442ce0e641.tar.gz vk-scripts-768fe6080c0ef35935dce0b271d84d442ce0e641.zip |
switch to VK API version 5.73
Diffstat (limited to 'vk')
-rw-r--r-- | vk/api.py | 38 | ||||
-rw-r--r-- | vk/tracking/status_tracker.py | 2 | ||||
-rw-r--r-- | vk/user.py | 2 |
3 files changed, 26 insertions, 16 deletions
@@ -56,9 +56,16 @@ def _join_path(base, url): base += '/' return urllib.parse.urljoin(base, url) +class Version(Enum): + V5_73 = '5.73' + DEFAULT = V5_73 + + def __str__(self): + return self.value + class Language(Enum): - DEFAULT = None EN = 'en' + DEFAULT = EN def __str__(self): return self.value @@ -71,6 +78,7 @@ class Method(Enum): return self.value class CommonParameters(Enum): + VERSION = 'v' LANGUAGE = 'lang' def __str__(self): @@ -81,11 +89,11 @@ class API: _SCHEME, _HOST, _ROOT_PATH = _split_url(_ROOT_URL) - def __init__(self, lang=Language.DEFAULT, deactivated_users=True): + def __init__(self, version=Version.DEFAULT, lang=Language.DEFAULT): self._common_params = { + CommonParameters.VERSION: version, CommonParameters.LANGUAGE: lang, } - self._skip_deactivated_users = not deactivated_users def _build_method_url(self, method, **params): path = _join_path(self._ROOT_PATH, str(method)) @@ -98,28 +106,30 @@ class API: try: with urlopen(url) as response: response = json.loads(response.read().decode()) + #print(response) if 'response' not in response: raise vk.error.InvalidAPIResponseError(response) - #print(response) return response['response'] except (ConnectionError, URLError) as e: raise vk.error.APIConnectionError(str(e)) from e - def _should_skip_user(self, user): - return self._skip_deactivated_users and user.is_deactivated() - - def _filter_response_with_users(self, user_list): + def _filter_response_with_users(self, user_list, deactivated_users=True): user_list = map(User.from_api_response, user_list) - return [user for user in user_list if not self._should_skip_user(user)] + if deactivated_users: + return user_list + return [user for user in user_list if not user.is_deactivated()] - def users_get(self, user_ids, fields=()): + def users_get(self, user_ids, fields=(), deactivated_users=True): return self._filter_response_with_users(self._call_method( Method.USERS_GET, user_ids=_join_param_values(user_ids), - fields=_join_param_values(fields))) + fields=_join_param_values(fields)), deactivated_users) - def friends_get(self, user_id, fields=()): - return self._filter_response_with_users(self._call_method( + def friends_get(self, user_id, fields=(), deactivated_users=True): + response = self._call_method( Method.FRIENDS_GET, user_id=user_id, - fields=_join_param_values(fields))) + fields=_join_param_values(fields)) + if 'items' not in response: + raise vk.error.InvalidAPIResponseError(response) + return self._filter_response_with_users(response['items'], deactivated_users) diff --git a/vk/tracking/status_tracker.py b/vk/tracking/status_tracker.py index d47de39..0dba0f9 100644 --- a/vk/tracking/status_tracker.py +++ b/vk/tracking/status_tracker.py @@ -47,7 +47,7 @@ class StatusTracker: _USER_FIELDS = UserField.DOMAIN, UserField.ONLINE, UserField.LAST_SEEN, def _query_status(self, uids): - return {user.get_uid(): user for user in self._api.users_get(uids, self._USER_FIELDS)} + return {user.get_uid(): user for user in self._api.users_get(uids, self._USER_FIELDS, deactivated_users=False)} def _notify_status(self, user): for fn in self._on_initial_status: @@ -35,7 +35,7 @@ def _parse_online_flag(x): return _parse_bool(x) class UserField(Enum): - UID = 'uid' + UID = 'id' FIRST_NAME = 'first_name' LAST_NAME = 'last_name' DEACTIVATED = 'deactivated' |