Spaces:
Sleeping
Sleeping
text-generation-webui
/
installer_files
/env
/lib
/python3.11
/site-packages
/aiogram
/utils
/payload.py
import datetime | |
import secrets | |
from babel.support import LazyProxy | |
from aiogram import types | |
from . import json | |
DEFAULT_FILTER = ['self', 'cls'] | |
def generate_payload(exclude=None, **kwargs): | |
""" | |
Generate payload | |
Usage: payload = generate_payload(**locals(), exclude=['foo']) | |
:param exclude: | |
:param kwargs: | |
:return: dict | |
""" | |
if exclude is None: | |
exclude = [] | |
return {key: value for key, value in kwargs.items() if | |
key not in exclude + DEFAULT_FILTER | |
and value is not None | |
and not key.startswith('_')} | |
def _normalize(obj): | |
""" | |
Normalize dicts and lists | |
:param obj: | |
:return: normalized object | |
""" | |
if isinstance(obj, list): | |
return [_normalize(item) for item in obj] | |
elif isinstance(obj, dict): | |
return {k: _normalize(v) for k, v in obj.items() if v is not None} | |
elif hasattr(obj, 'to_python'): | |
return obj.to_python() | |
return obj | |
def prepare_arg(value): | |
""" | |
Stringify dicts/lists and convert datetime/timedelta to unix-time | |
:param value: | |
:return: | |
""" | |
if value is None: | |
return value | |
if isinstance(value, (list, dict)) or hasattr(value, 'to_python'): | |
return json.dumps(_normalize(value)) | |
if isinstance(value, datetime.timedelta): | |
now = datetime.datetime.now() | |
return int((now + value).timestamp()) | |
if isinstance(value, datetime.datetime): | |
return round(value.timestamp()) | |
if isinstance(value, LazyProxy): | |
return str(value) | |
return value | |
def prepare_file(payload, files, key, file): | |
if isinstance(file, str): | |
payload[key] = file | |
elif file is not None: | |
files[key] = file | |
def prepare_attachment(payload, files, key, file): | |
if isinstance(file, str): | |
payload[key] = file | |
elif isinstance(file, types.InputFile): | |
payload[key] = file.attach | |
files[file.attachment_key] = file.file | |
elif file is not None: | |
file_attach_name = secrets.token_urlsafe(16) | |
payload[key] = "attach://" + file_attach_name | |
files[file_attach_name] = file | |