feat: キャッシュに関する関数を追加

pull/20/head
yupix 2 years ago
parent fc56cbcd33
commit ab97fdbdb1
No known key found for this signature in database
GPG Key ID: 2FF705F5C56D9C06

@ -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())

Loading…
Cancel
Save