|
|
|
@ -7,9 +7,11 @@ import asyncio
|
|
|
|
|
import json
|
|
|
|
|
import re
|
|
|
|
|
import uuid
|
|
|
|
|
from _operator import itemgetter
|
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
from typing import Any, Optional
|
|
|
|
|
from urllib.parse import urlencode
|
|
|
|
|
import functools
|
|
|
|
|
|
|
|
|
|
import aiohttp
|
|
|
|
|
|
|
|
|
@ -31,7 +33,7 @@ __all__ = (
|
|
|
|
|
'upper_to_lower',
|
|
|
|
|
'str_lower',
|
|
|
|
|
'bool_to_string',
|
|
|
|
|
'_from_json'
|
|
|
|
|
'_from_json',
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -40,6 +42,8 @@ if HAS_ORJSON:
|
|
|
|
|
else:
|
|
|
|
|
_from_json = json.loads
|
|
|
|
|
|
|
|
|
|
DEFAULT_CACHE: dict[str, list[dict[str, any]]] = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def deprecated_func(func):
|
|
|
|
|
print(f'deprecated function:{func.__name__}')
|
|
|
|
@ -172,6 +176,52 @@ class AuthClient:
|
|
|
|
|
return data['token'] if self.__use_miauth else data['accessToken']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def dynamic_args(decorator):
|
|
|
|
|
def wrapper(*args, **kwargs):
|
|
|
|
|
if len(args) != 0 and callable(args[0]):
|
|
|
|
|
func = args[0]
|
|
|
|
|
return functools.wraps(func)(decorator(func))
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
def _wrapper(func):
|
|
|
|
|
return functools.wraps(func)(decorator(func, *args, **kwargs))
|
|
|
|
|
|
|
|
|
|
return _wrapper
|
|
|
|
|
|
|
|
|
|
return wrapper
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_cache(group: str, key: str, value: any):
|
|
|
|
|
if len(DEFAULT_CACHE.get(group, [])) > 50:
|
|
|
|
|
del DEFAULT_CACHE[group][-1]
|
|
|
|
|
|
|
|
|
|
if DEFAULT_CACHE.get(group) is None:
|
|
|
|
|
DEFAULT_CACHE[group] = []
|
|
|
|
|
DEFAULT_CACHE[group].append({key: value})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_cache(group: str, key: str):
|
|
|
|
|
if DEFAULT_CACHE.get(group):
|
|
|
|
|
return list(map(itemgetter(key), DEFAULT_CACHE[group]))[0]
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dynamic_args
|
|
|
|
|
def cache(func, group: Optional[str] = None, override: bool = False):
|
|
|
|
|
async def decorator(self, *args, **kwargs):
|
|
|
|
|
ordered_kwargs = sorted(kwargs.items())
|
|
|
|
|
key = '.{0}' + str(args) + str(ordered_kwargs)
|
|
|
|
|
hit_item = get_cache(group, key)
|
|
|
|
|
print(hit_item)
|
|
|
|
|
if hit_item and override is False:
|
|
|
|
|
return hit_item
|
|
|
|
|
res = await func(self, *args, **kwargs)
|
|
|
|
|
set_cache(group, key, res)
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
return decorator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_cache_key(func):
|
|
|
|
|
async def decorator(self, *args, **kwargs):
|
|
|
|
|
ordered_kwargs = sorted(kwargs.items())
|
|
|
|
|