Исходный код vk_maria.utils

import json
import random
import threading
import time

from pydotdict import DotDict

from .exceptions import VkMariaException
from .types import KeyboardMarkup, KeyboardModel


[документация]def error_catcher(method): def wrapper(self, *args, **kwargs): response = method(self, *args, **kwargs) e = response[1].get('error') if e and e['error_code']: raise VkMariaException(e['error_code'], e['error_msg']) return response return wrapper
[документация]def query_delimiter(method): def wrapper(self, *args, **kwargs): with threading.Lock(): delay = self.rps_delay - (time.time() - self.last_request) if delay > 0: time.sleep(delay) response = method(self, *args, **kwargs) self.last_request = time.time() return response return wrapper
[документация]def get_random_id(): return random.randint(-2 ** 31, 2 ** 31 - 1)
[документация]def response_parser(method): # Которые должны получать не список, а 1 объект # Только те которые возвращают список из 1 элемента, а не дикт fix_methods = [ 'groups.getById', ] def wrapper(self, *args, **kwargs): response = method(self, *args, **kwargs) method_, response = response if method_ in fix_methods: return response['response'][0] if not method_: return response return response['response'] return wrapper
[документация]def args_converter(method): def wrapper(self, *args, **kwargs): for keyword, value in kwargs.items(): if not value: continue if keyword == 'peer_ids': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'forward_messages': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'attachment': if isinstance(value, str): kwargs[keyword] = value elif isinstance(value, list): kwargs[keyword] = ','.join(value) elif keyword == 'keyboard': if not isinstance(value, str): if isinstance(value, KeyboardMarkup): kwargs[keyword] = value.get_json() elif issubclass(value, KeyboardModel): kwargs[keyword] = value.__json__ elif keyword == 'cmids': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'fields': kwargs[keyword] = ','.join(value) elif keyword == 'message_ids': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'media_type': kwargs[keyword] = ','.join(value) elif keyword == 'name_case': kwargs[keyword] = ','.join(value) elif keyword == 'market_country': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'market_city': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'obscene_words': kwargs[keyword] = ','.join(value) elif keyword == 'user_ids': kwargs[keyword] = ','.join(str(el) for el in value) elif keyword == 'tags': kwargs[keyword] = ','.join(value) elif keyword == 'keys': kwargs[keyword] = ','.join(value) elif keyword == 'stories': kwargs[keyword] = ','.join(value) elif keyword == 'upload_results': kwargs[keyword] = ','.join(value) elif keyword == 'event_data': if isinstance(value, DotDict): value = value.to_dict() kwargs[keyword] = value if isinstance(value, dict): kwargs[keyword] = json.dumps(value) return method(self, *args, **kwargs) return wrapper