mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-06-19 05:45:06 +08:00
💥 更换logger
模块 (#131)
This commit is contained in:
parent
b9232bf1d7
commit
b98a00a8cb
@ -22,13 +22,13 @@ scheduler.configure(options)
|
|||||||
async def start_scheduler():
|
async def start_scheduler():
|
||||||
if not scheduler.running:
|
if not scheduler.running:
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
logger.info('定时任务启动...')
|
logger.info('⏲ [定时器系统] 定时任务启动成功!')
|
||||||
|
|
||||||
|
|
||||||
async def shutdown_scheduler():
|
async def shutdown_scheduler():
|
||||||
if scheduler.running:
|
if scheduler.running:
|
||||||
scheduler.shutdown()
|
scheduler.shutdown()
|
||||||
logger.info('定时任务结束...')
|
logger.info('⌛ [定时器系统] 程序关闭!定时任务结束!')
|
||||||
|
|
||||||
|
|
||||||
def remove_repeat_job():
|
def remove_repeat_job():
|
||||||
|
@ -17,7 +17,7 @@ sv_core_config = SV('Core管理', pm=0)
|
|||||||
async def check_msg():
|
async def check_msg():
|
||||||
try:
|
try:
|
||||||
await asyncio.sleep(3)
|
await asyncio.sleep(3)
|
||||||
logger.info('📝 检查遗留信息...')
|
logger.info('[启动检查] 📝 检查遗留信息...')
|
||||||
update_log = await restart_message()
|
update_log = await restart_message()
|
||||||
if update_log == {}:
|
if update_log == {}:
|
||||||
return
|
return
|
||||||
|
@ -94,22 +94,7 @@ async def main():
|
|||||||
app,
|
app,
|
||||||
host=HOST,
|
host=HOST,
|
||||||
port=PORT,
|
port=PORT,
|
||||||
log_config={
|
log_config=None,
|
||||||
'version': 1,
|
|
||||||
'disable_existing_loggers': False,
|
|
||||||
'handlers': {
|
|
||||||
'default': {
|
|
||||||
'class': 'gsuid_core.logger.LoguruHandler',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'uvicorn.error': {'handlers': ['default'], 'level': 'INFO'},
|
|
||||||
'uvicorn.access': {
|
|
||||||
'handlers': ['default'],
|
|
||||||
'level': 'INFO',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
loop="asyncio",
|
loop="asyncio",
|
||||||
)
|
)
|
||||||
server = uvicorn.Server(config)
|
server = uvicorn.Server(config)
|
||||||
@ -117,7 +102,7 @@ async def main():
|
|||||||
logger.success(ASCII_FONT)
|
logger.success(ASCII_FONT)
|
||||||
duration = round(end_time - start_time, 2)
|
duration = round(end_time - start_time, 2)
|
||||||
logger.success(
|
logger.success(
|
||||||
f'[GsCore] 启动完成, 耗时: {duration:.2f}s, 版本: {__version__}'
|
f'🚀 [GsCore] 启动完成, 耗时: {duration:.2f}s, 版本: {__version__}'
|
||||||
)
|
)
|
||||||
await server.serve()
|
await server.serve()
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ async def handle_event(ws: _Bot, msg: MessageReceive, is_http: bool = False):
|
|||||||
# 获取用户权限,越小越高
|
# 获取用户权限,越小越高
|
||||||
msg.user_pm = user_pm = await get_user_pml(msg)
|
msg.user_pm = user_pm = await get_user_pml(msg)
|
||||||
event = await msg_process(msg)
|
event = await msg_process(msg)
|
||||||
logger.info('[收到事件]', event=event)
|
logger.info('[收到事件]', event_payload=event)
|
||||||
|
|
||||||
if event.user_pm == 0:
|
if event.user_pm == 0:
|
||||||
if not await Subscribe.data_exist(
|
if not await Subscribe.data_exist(
|
||||||
|
@ -5,101 +5,136 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
import datetime
|
import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from copy import deepcopy
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import TYPE_CHECKING, Dict, List, Optional
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
from typing import Any, Dict, List, Optional, Protocol
|
||||||
|
|
||||||
import loguru
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
from uvicorn.config import LOGGING_CONFIG
|
import structlog
|
||||||
|
from colorama import Fore, Style, init
|
||||||
|
from structlog.types import EventDict, Processor, WrappedLogger
|
||||||
|
from structlog.processors import CallsiteParameter, CallsiteParameterAdder
|
||||||
|
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.config import core_config
|
from gsuid_core.config import core_config
|
||||||
from gsuid_core.models import Event, Message
|
|
||||||
from gsuid_core.data_store import get_res_path
|
from gsuid_core.data_store import get_res_path
|
||||||
|
|
||||||
log_history = []
|
log_history: List[EventDict] = []
|
||||||
LOG_PATH = get_res_path() / 'logs'
|
LOG_PATH = get_res_path() / 'logs'
|
||||||
|
IS_DEBUG_LOG = False
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
class DailyNamedFileHandler(TimedRotatingFileHandler):
|
||||||
# avoid sphinx autodoc resolve annotation failed
|
"""
|
||||||
# because loguru module do not have `Logger` class actually
|
一个会自动使用 YYYY-MM-DD.log 作为文件名的日志处理器。
|
||||||
from loguru import Logger
|
"""
|
||||||
|
|
||||||
logger: 'Logger' = loguru.logger
|
def __init__(self, log_dir, backupCount=7, encoding='utf-8'):
|
||||||
logging.getLogger().handlers = []
|
self.log_dir = Path(log_dir)
|
||||||
LOGGING_CONFIG['disable_existing_loggers'] = False
|
self.log_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
self.base_filename_template = "{date}.log"
|
||||||
|
filename = self._get_dated_filename()
|
||||||
|
|
||||||
# https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
|
super().__init__(
|
||||||
class LoguruHandler(logging.Handler): # pragma: no cover
|
filename=filename,
|
||||||
def emit(self, record: logging.LogRecord):
|
when='midnight',
|
||||||
|
interval=1,
|
||||||
|
backupCount=backupCount,
|
||||||
|
encoding=encoding,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_dated_filename(self):
|
||||||
|
"""根据当前日期生成完整的文件路径。"""
|
||||||
|
date_str = datetime.datetime.now().strftime('%Y-%m-%d')
|
||||||
|
return str(
|
||||||
|
self.log_dir / self.base_filename_template.format(date=date_str)
|
||||||
|
)
|
||||||
|
|
||||||
|
def doRollover(self):
|
||||||
|
"""在午夜执行轮转。"""
|
||||||
|
if self.stream:
|
||||||
|
self.stream.close()
|
||||||
|
self.stream = None # type: ignore
|
||||||
|
|
||||||
|
self.baseFilename = self._get_dated_filename()
|
||||||
|
|
||||||
|
self._cleanup_logs()
|
||||||
|
|
||||||
|
if not self.delay:
|
||||||
|
self.stream = self._open()
|
||||||
|
|
||||||
|
def _cleanup_logs(self):
|
||||||
|
"""根据 backupCount 清理旧的日志文件。"""
|
||||||
|
if self.backupCount > 0:
|
||||||
|
# backupCount + 1 是因为当前日志文件也计算在内
|
||||||
|
log_files = sorted(
|
||||||
|
self.log_dir.glob("*.log"),
|
||||||
|
key=lambda f: f.stat().st_mtime,
|
||||||
|
reverse=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
for f in log_files[self.backupCount :]: # noqa: E203
|
||||||
try:
|
try:
|
||||||
level = logger.level(record.levelname).name
|
f.unlink()
|
||||||
except ValueError:
|
except OSError:
|
||||||
level = record.levelno
|
# 在并发环境下,文件可能已被其他进程删除
|
||||||
|
pass
|
||||||
|
|
||||||
frame, depth = logging.currentframe(), 2
|
|
||||||
while frame and frame.f_code.co_filename == logging.__file__:
|
|
||||||
frame = frame.f_back
|
|
||||||
depth += 1
|
|
||||||
|
|
||||||
logger.opt(depth=depth, exception=record.exc_info).log(
|
class TraceCapableLogger(Protocol):
|
||||||
level, record.getMessage()
|
def trace(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def debug(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def info(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def warning(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def error(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def critical(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def exception(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def success(self, event: Any, *args: Any, **kwargs: Any) -> None: ...
|
||||||
|
def bind(self, **new_values: Any) -> 'TraceCapableLogger': ...
|
||||||
|
def new(self, **new_values: Any) -> 'TraceCapableLogger': ...
|
||||||
|
def unbind(self, *keys: str) -> 'TraceCapableLogger': ...
|
||||||
|
|
||||||
|
|
||||||
|
class TraceCapableBoundLogger(structlog.stdlib.BoundLogger):
|
||||||
|
def trace(self, event: str, *args: Any, **kwargs: Any) -> None:
|
||||||
|
self._proxy_to_logger("trace", event, *args, **kwargs)
|
||||||
|
|
||||||
|
def success(self, event: str, *args: Any, **kwargs: Any) -> None:
|
||||||
|
self._proxy_to_logger("success", event, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def format_callsite_processor(
|
||||||
|
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
||||||
|
) -> EventDict:
|
||||||
|
"""
|
||||||
|
一个自定义处理器,用于将调用点信息格式化并前置到事件消息中。
|
||||||
|
"""
|
||||||
|
pathname = event_dict.pop("pathname", "?")
|
||||||
|
lineno = event_dict.pop("lineno", "?")
|
||||||
|
func_name = event_dict.pop("func_name", "?")
|
||||||
|
|
||||||
|
callsite = f"[{pathname}:{lineno}:{func_name}]"
|
||||||
|
|
||||||
|
# 将调用点信息和原始事件消息拼接起来
|
||||||
|
# 我们在调用点字符串和原事件之间加了一个空格
|
||||||
|
original_event = event_dict.get("event", "")
|
||||||
|
event_dict["event"] = (
|
||||||
|
f"{Fore.YELLOW}{callsite}{Style.RESET_ALL} {original_event}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return event_dict
|
||||||
def replace_tag(text: Optional[str]):
|
|
||||||
if text is None:
|
|
||||||
return ''
|
|
||||||
return text.replace('<', '\<') # type: ignore # noqa: W605
|
|
||||||
|
|
||||||
|
|
||||||
def format_event(record):
|
def format_event_for_console(
|
||||||
if 'trigger' in record['extra']:
|
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
||||||
_tg = record['extra']['trigger']
|
) -> EventDict:
|
||||||
_tg0 = replace_tag(_tg[0])
|
event: Optional[Event] = event_dict.get("event_payload")
|
||||||
_tg1 = replace_tag(_tg[1])
|
if isinstance(event, Event):
|
||||||
_tg2 = replace_tag(_tg[2])
|
# 使用 colorama 的颜色代码重新构建主事件消息
|
||||||
message = (
|
event_dict['event'] = (
|
||||||
f'<m><b>[Trigger]</b></m> 消息 「{_tg0}」 触发'
|
f'{Style.BRIGHT}{Fore.CYAN}[Receive]{Style.RESET_ALL} '
|
||||||
f' 「{_tg1}」 类型触发器, 关键词:'
|
|
||||||
f' 「{_tg2}」 '
|
|
||||||
)
|
|
||||||
message = message.replace('{', '{{').replace('}', '}}')
|
|
||||||
elif record['extra']:
|
|
||||||
event: Event = (
|
|
||||||
record['extra']['event']
|
|
||||||
if 'event' in record['extra']
|
|
||||||
else record['extra']['command']
|
|
||||||
)
|
|
||||||
if event.file and event.file_type != 'url':
|
|
||||||
file = f'{event.file[:20]}...(base64)'
|
|
||||||
content = [Message('file', f'{event.file_name}|{file}')]
|
|
||||||
else:
|
|
||||||
file = event.file
|
|
||||||
content = event.content
|
|
||||||
|
|
||||||
raw_text = replace_tag(event.raw_text)
|
|
||||||
file_name = replace_tag(event.file_name)
|
|
||||||
command = replace_tag(event.command)
|
|
||||||
text = replace_tag(event.text)
|
|
||||||
content = replace_tag(f'{content}')
|
|
||||||
regex_dict = replace_tag(f'{event.regex_dict}')
|
|
||||||
|
|
||||||
if 'event' in record['extra']:
|
|
||||||
message = (
|
|
||||||
f'<c><b>[Raw]</b></c> '
|
|
||||||
f'raw_text={raw_text}, '
|
|
||||||
f'image={event.image}, '
|
|
||||||
f'at={event.at}, '
|
|
||||||
f'image_list={event.image}, '
|
|
||||||
f'at_list={event.at_list}, '
|
|
||||||
f'is_tome={event.is_tome}, '
|
|
||||||
f'reply={event.reply}, '
|
|
||||||
f'file_name={file_name}, '
|
|
||||||
f'file_type={event.file_type}, '
|
|
||||||
f'file={file}'
|
|
||||||
f' | <m><b>[Receive]</b></m> '
|
|
||||||
f'bot_id={event.bot_id}, '
|
f'bot_id={event.bot_id}, '
|
||||||
f'bot_self_id={event.bot_self_id}, '
|
f'bot_self_id={event.bot_self_id}, '
|
||||||
f'msg_id={event.msg_id}, '
|
f'msg_id={event.msg_id}, '
|
||||||
@ -107,91 +142,225 @@ def format_event(record):
|
|||||||
f'group_id={event.group_id}, '
|
f'group_id={event.group_id}, '
|
||||||
f'user_id={event.user_id}, '
|
f'user_id={event.user_id}, '
|
||||||
f'user_pm={event.user_pm}, '
|
f'user_pm={event.user_pm}, '
|
||||||
f'content={content}, '
|
f'content={event.content}, '
|
||||||
)
|
)
|
||||||
else:
|
event_dict.pop("event_payload")
|
||||||
message = (
|
|
||||||
f'<m><b>[Command]</b></m> '
|
|
||||||
f'command={command}, '
|
|
||||||
f'text={text}, '
|
|
||||||
f'regex_dict={regex_dict}'
|
|
||||||
)
|
|
||||||
message = message.replace('{', '{{').replace('}', '}}')
|
|
||||||
else:
|
|
||||||
message = '{message}'
|
|
||||||
|
|
||||||
def_name: str = record['name']
|
return event_dict
|
||||||
time = '<g>{time:MM-DD HH:mm:ss}</g>'
|
|
||||||
level = '[<lvl>{level}</lvl>]'
|
|
||||||
def_name = f'<c><u>{".".join(def_name.split(".")[-5:])}</u></c>'
|
|
||||||
_log = f'{time} {level} {def_name} | {message} \n{{exception}}'
|
|
||||||
return _log
|
|
||||||
|
|
||||||
|
|
||||||
def std_format_event(record):
|
def colorize_brackets_processor(
|
||||||
try:
|
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
||||||
data = format_event(record)
|
) -> EventDict:
|
||||||
_data = (
|
"""
|
||||||
data.replace("<g>", "<span class=\"log-keyword-success\">")
|
一个后处理器,用于给 event 字符串中所有被 [] 包围的部分上色。
|
||||||
.replace("</g>", "</span>")
|
"""
|
||||||
.replace("<c><u>", "<span class=\"log-keyword-id\">")
|
event = event_dict.get("event", "")
|
||||||
.replace("</u></c>", "</span>")
|
|
||||||
.replace("<m><b>", "<span> class=\"log-keyword-blue\">")
|
|
||||||
.replace("</b></m>", "</span>")
|
|
||||||
.replace("<c><b>", "<span log-keyword-error>")
|
|
||||||
.replace("</b></c>", "</span>")
|
|
||||||
.replace("<lvl>", "")
|
|
||||||
.replace("</lvl>", "")
|
|
||||||
)
|
|
||||||
log = _data.format_map(record)
|
|
||||||
log_history.append(log[:-5])
|
|
||||||
return data
|
|
||||||
except: # noqa: E722
|
|
||||||
return 'UnknowLog'
|
|
||||||
|
|
||||||
|
# 如果事件内容是字符串类型
|
||||||
|
if isinstance(event, str):
|
||||||
|
# 定义我们想要的“橙色” (亮黄色在大多数终端中看起来像橙色)
|
||||||
|
orange_color = Style.BRIGHT + Fore.LIGHTMAGENTA_EX
|
||||||
|
|
||||||
LEVEL: str = core_config.get_config('log').get('level', 'INFO')
|
# 使用正则表达式查找所有 [anything] 模式,并用颜色代码包裹它们
|
||||||
logger_list: List[str] = core_config.get_config('log').get(
|
# re.sub() 可以接受一个函数作为替换参数,这里用 lambda 更简洁
|
||||||
'output',
|
# (\[.*?\]) -> 匹配一个完整的 [...] 块,并捕获它
|
||||||
['stdout', 'stderr', 'file'],
|
colored_event = re.sub(
|
||||||
)
|
r"(\[.*?\])",
|
||||||
|
lambda match: f"{orange_color}{match.group(1)}{Style.RESET_ALL}",
|
||||||
logger.remove()
|
event,
|
||||||
|
|
||||||
if 'stdout' in logger_list:
|
|
||||||
logger_id = logger.add(
|
|
||||||
sys.stdout,
|
|
||||||
level=LEVEL,
|
|
||||||
diagnose=True,
|
|
||||||
backtrace=True,
|
|
||||||
filter=lambda record: record['level'].no < 40,
|
|
||||||
format=std_format_event,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if 'stderr' in logger_list:
|
# 将修改后的、带颜色的字符串放回 event_dict
|
||||||
logger.add(sys.stderr, level='ERROR')
|
event_dict["event"] = colored_event
|
||||||
|
|
||||||
if 'file' in logger_list:
|
return event_dict
|
||||||
logger.add(
|
|
||||||
sink=LOG_PATH / '{time:YYYY-MM-DD}.log',
|
|
||||||
format=format_event,
|
def log_to_history(
|
||||||
rotation=datetime.time(),
|
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
||||||
level=LEVEL,
|
) -> EventDict:
|
||||||
diagnose=True,
|
_event_dict = deepcopy(event_dict)
|
||||||
backtrace=True,
|
s = ''
|
||||||
|
for g in _event_dict:
|
||||||
|
if g not in ['event', 'timestamp', 'level']:
|
||||||
|
s += f'{g}={event_dict[g]}, '
|
||||||
|
|
||||||
|
s = s.rstrip(', ')
|
||||||
|
if s:
|
||||||
|
s = f'\n{s}'
|
||||||
|
_event_dict['gevent'] = str(event_dict['event']) + s
|
||||||
|
log_history.append(_event_dict)
|
||||||
|
return event_dict
|
||||||
|
|
||||||
|
|
||||||
|
def handle_exception(exc_type, exc_value, exc_traceback):
|
||||||
|
"""
|
||||||
|
一个自定义函数,用于处理所有未捕獲的异常。
|
||||||
|
"""
|
||||||
|
# 如果是用户手动中断 (Ctrl+C),我们遵循默认行为,不记录为严重错误
|
||||||
|
if issubclass(exc_type, KeyboardInterrupt):
|
||||||
|
sys.__excepthook__(exc_type, exc_value, exc_traceback)
|
||||||
|
return
|
||||||
|
|
||||||
|
# 使用 structlog 获取一个 logger
|
||||||
|
# logger 名称可以自定义,以区分这是未捕獲的异常
|
||||||
|
# log: TraceCapableLogger = structlog.get_logger("unhandled_exception")
|
||||||
|
|
||||||
|
# 使用 .critical() 或 .exception() 记录异常
|
||||||
|
# 将 exc_info 参数设置为异常信息元组,structlog 会自动处理它
|
||||||
|
logger.critical(
|
||||||
|
"Unhandled exception", exc_info=(exc_type, exc_value, exc_traceback)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_logging():
|
||||||
|
"""配置日志,使其同时向文件和控制台输出不同格式的日志。"""
|
||||||
|
init(autoreset=True)
|
||||||
|
|
||||||
|
TRACE_LEVEL: int = 5
|
||||||
|
TRACE_LEVEL_NAME: str = "TRACE"
|
||||||
|
logging.addLevelName(TRACE_LEVEL, TRACE_LEVEL_NAME)
|
||||||
|
|
||||||
|
def trace(
|
||||||
|
self: logging.Logger, message: str, *args: Any, **kws: Any
|
||||||
|
) -> None:
|
||||||
|
if self.isEnabledFor(TRACE_LEVEL):
|
||||||
|
self._log(TRACE_LEVEL, message, args, **kws)
|
||||||
|
|
||||||
|
setattr(logging.Logger, TRACE_LEVEL_NAME.lower(), trace)
|
||||||
|
|
||||||
|
SUCCESS_LEVEL: int = 25
|
||||||
|
SUCCESS_LEVEL_NAME: str = "SUCCESS"
|
||||||
|
logging.addLevelName(SUCCESS_LEVEL, SUCCESS_LEVEL_NAME)
|
||||||
|
|
||||||
|
def success(
|
||||||
|
self: logging.Logger, message: str, *args: Any, **kws: Any
|
||||||
|
) -> None:
|
||||||
|
if self.isEnabledFor(SUCCESS_LEVEL):
|
||||||
|
self._log(SUCCESS_LEVEL, message, args, **kws)
|
||||||
|
|
||||||
|
setattr(logging.Logger, SUCCESS_LEVEL_NAME.lower(), success)
|
||||||
|
|
||||||
|
# 从配置读取
|
||||||
|
log_config = core_config.get_config('log')
|
||||||
|
LEVEL: str = log_config.get('level', 'INFO').upper()
|
||||||
|
logger_list: List[str] = log_config.get(
|
||||||
|
'output', ['stdout', 'stderr', 'file']
|
||||||
|
)
|
||||||
|
level_styles = {
|
||||||
|
# '级别名称的小写形式': colorama样式
|
||||||
|
"trace": Fore.MAGENTA, # 洋红色
|
||||||
|
"debug": Fore.CYAN, # 青色 (覆盖默认)
|
||||||
|
"info": Fore.BLUE, # 蓝色 (覆盖默认)
|
||||||
|
"success": Style.BRIGHT + Fore.GREEN, # 亮绿色
|
||||||
|
"warning": Fore.YELLOW, # 黄色 (保持默认)
|
||||||
|
"error": Fore.RED, # 红色 (保持默认)
|
||||||
|
"critical": Style.BRIGHT + Fore.RED, # 亮红色 (保持默认)
|
||||||
|
}
|
||||||
|
|
||||||
|
# 定义所有处理器链共享的基础部分
|
||||||
|
shared_processors: List[Processor] = [
|
||||||
|
structlog.contextvars.merge_contextvars,
|
||||||
|
structlog.stdlib.add_log_level,
|
||||||
|
structlog.processors.StackInfoRenderer(),
|
||||||
|
# structlog.processors.format_exc_info,
|
||||||
|
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=False),
|
||||||
|
]
|
||||||
|
|
||||||
|
if IS_DEBUG_LOG:
|
||||||
|
shared_processors.append(
|
||||||
|
CallsiteParameterAdder(
|
||||||
|
{
|
||||||
|
CallsiteParameter.PATHNAME, # 文件路径
|
||||||
|
CallsiteParameter.LINENO, # 行号
|
||||||
|
CallsiteParameter.FUNC_NAME, # 函数名
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# --- 文件处理链 ---
|
||||||
|
file_processors: List[Processor] = shared_processors + [
|
||||||
|
structlog.dev.set_exc_info,
|
||||||
|
structlog.processors.format_exc_info,
|
||||||
|
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
|
||||||
|
log_to_history,
|
||||||
|
structlog.processors.JSONRenderer(ensure_ascii=False),
|
||||||
|
]
|
||||||
|
|
||||||
|
# --- 控制台处理链 ---
|
||||||
|
console_processors: List[Processor] = shared_processors + [
|
||||||
|
colorize_brackets_processor,
|
||||||
|
format_event_for_console,
|
||||||
|
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
|
||||||
|
structlog.dev.ConsoleRenderer(
|
||||||
|
colors=True,
|
||||||
|
level_styles=level_styles,
|
||||||
|
exception_formatter=structlog.dev.rich_traceback,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
if IS_DEBUG_LOG:
|
||||||
|
console_processors.insert(-1, format_callsite_processor)
|
||||||
|
|
||||||
|
# --- 配置 logging ---
|
||||||
|
root_logger = logging.getLogger('GsCore')
|
||||||
|
root_logger.handlers = [] # 等效于 loguru.logger.remove()
|
||||||
|
root_logger.setLevel(LEVEL) # 设置根级别
|
||||||
|
|
||||||
|
# a. 配置 stdout handler (低于 ERROR)
|
||||||
|
if 'stdout' in logger_list:
|
||||||
|
stdout_handler = logging.StreamHandler(sys.stdout)
|
||||||
|
stdout_handler.setLevel(LEVEL)
|
||||||
|
stdout_handler.setFormatter(
|
||||||
|
structlog.stdlib.ProcessorFormatter(processors=console_processors)
|
||||||
|
)
|
||||||
|
root_logger.addHandler(stdout_handler)
|
||||||
|
|
||||||
|
# c. 配置文件 handler (每日轮转)
|
||||||
|
if 'file' in logger_list:
|
||||||
|
# 关键:使用 TimedRotatingFileHandler 实现每日轮转
|
||||||
|
file_handler = DailyNamedFileHandler(
|
||||||
|
log_dir=LOG_PATH,
|
||||||
|
backupCount=7,
|
||||||
|
encoding='utf-8',
|
||||||
|
)
|
||||||
|
file_handler.setLevel(LEVEL)
|
||||||
|
file_handler.setFormatter(
|
||||||
|
structlog.stdlib.ProcessorFormatter(processors=file_processors)
|
||||||
|
)
|
||||||
|
root_logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
# --- 最后配置 structlog ---
|
||||||
|
structlog.configure(
|
||||||
|
processors=[
|
||||||
|
structlog.contextvars.merge_contextvars,
|
||||||
|
structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
|
||||||
|
],
|
||||||
|
logger_factory=structlog.stdlib.LoggerFactory(),
|
||||||
|
context_class=dict,
|
||||||
|
wrapper_class=TraceCapableBoundLogger,
|
||||||
|
cache_logger_on_first_use=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
sys.excepthook = handle_exception
|
||||||
|
|
||||||
|
|
||||||
|
setup_logging()
|
||||||
|
logger: TraceCapableLogger = structlog.get_logger('GsCore')
|
||||||
|
|
||||||
|
|
||||||
async def read_log():
|
async def read_log():
|
||||||
index = 0
|
index = 0
|
||||||
while True:
|
while True:
|
||||||
if index <= len(log_history) - 1:
|
if index <= len(log_history) - 1:
|
||||||
if log_history[index]:
|
ev = log_history[index]
|
||||||
|
if ev:
|
||||||
log_data = {
|
log_data = {
|
||||||
"level": "INFO",
|
"level": ev['level'].upper(),
|
||||||
"message": log_history[index],
|
"message": ev['gevent'],
|
||||||
"message_type": "html",
|
"message_type": "html",
|
||||||
"timestamp": datetime.datetime.now().isoformat(),
|
"timestamp": ev['timestamp'],
|
||||||
}
|
}
|
||||||
yield f"data: {json.dumps(log_data)}\n\n"
|
yield f"data: {json.dumps(log_data)}\n\n"
|
||||||
index += 1
|
index += 1
|
||||||
@ -228,10 +397,6 @@ class HistoryLogData:
|
|||||||
|
|
||||||
log_entries: List[Dict] = []
|
log_entries: List[Dict] = []
|
||||||
|
|
||||||
log_entry_pattern = re.compile(
|
|
||||||
r'^(\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(\w+)] ([^\|]+) \| (.*)'
|
|
||||||
)
|
|
||||||
|
|
||||||
async with aiofiles.open(log_file_path, 'r', encoding='utf-8') as file:
|
async with aiofiles.open(log_file_path, 'r', encoding='utf-8') as file:
|
||||||
lines = await file.readlines()
|
lines = await file.readlines()
|
||||||
|
|
||||||
@ -239,22 +404,18 @@ class HistoryLogData:
|
|||||||
|
|
||||||
_id = 1
|
_id = 1
|
||||||
for line in lines:
|
for line in lines:
|
||||||
line = line.strip()
|
ev: Dict[str, str] = json.loads(line.strip())
|
||||||
match = log_entry_pattern.match(line)
|
|
||||||
|
|
||||||
if match:
|
|
||||||
if current_entry:
|
if current_entry:
|
||||||
log_entries.append(current_entry)
|
log_entries.append(current_entry)
|
||||||
current_entry = {
|
current_entry = {
|
||||||
'id': _id,
|
'id': _id,
|
||||||
'时间': match.group(1),
|
'时间': ev['timestamp'],
|
||||||
'日志等级': match.group(2),
|
'日志等级': ev['level'].upper(),
|
||||||
'模块': match.group(3).strip(),
|
# '模块': ev['pathname'],
|
||||||
'内容': match.group(4).strip(),
|
'内容': ev['event'],
|
||||||
}
|
}
|
||||||
_id += 1
|
_id += 1
|
||||||
elif current_entry:
|
|
||||||
current_entry['内容'] += '\n' + line
|
|
||||||
|
|
||||||
if current_entry:
|
if current_entry:
|
||||||
log_entries.append(current_entry)
|
log_entries.append(current_entry)
|
||||||
|
@ -114,7 +114,7 @@ class GsServer:
|
|||||||
return f'插件{plugin.name}包含"_", 跳过加载!'
|
return f'插件{plugin.name}包含"_", 跳过加载!'
|
||||||
|
|
||||||
# 如果发现文件夹,则视为插件包
|
# 如果发现文件夹,则视为插件包
|
||||||
logger.debug(f'🔹 导入{plugin.stem}中...')
|
logger.debug(f'🔜 导入{plugin.stem}中...')
|
||||||
logger.trace('===============')
|
logger.trace('===============')
|
||||||
try:
|
try:
|
||||||
module_list = []
|
module_list = []
|
||||||
@ -155,9 +155,8 @@ class GsServer:
|
|||||||
'''导入成功'''
|
'''导入成功'''
|
||||||
return module_list
|
return module_list
|
||||||
except Exception as e: # noqa
|
except Exception as e: # noqa
|
||||||
exception = sys.exc_info()
|
logger.error(f'❌ 插件{plugin.name}加载失败!: {e}')
|
||||||
logger.opt(exception=exception).error(f'加载插件时发生错误: {e}')
|
# logger.warning(f'❌ 插件{plugin.name}加载失败!')
|
||||||
logger.warning(f'❌ 插件{plugin.name}加载失败')
|
|
||||||
return f'❌ 插件{plugin.name}加载失败'
|
return f'❌ 插件{plugin.name}加载失败'
|
||||||
|
|
||||||
def cached_import(self, module_name: str, filepath: Path, _type: str):
|
def cached_import(self, module_name: str, filepath: Path, _type: str):
|
||||||
@ -193,7 +192,7 @@ class GsServer:
|
|||||||
return module
|
return module
|
||||||
|
|
||||||
async def load_plugins(self):
|
async def load_plugins(self):
|
||||||
logger.info('[GsCore] 开始加载插件...')
|
logger.info('💖 [早柚核心]开始加载插件...')
|
||||||
get_installed_dependencies()
|
get_installed_dependencies()
|
||||||
sys.path.append(str(Path(__file__).parents[1]))
|
sys.path.append(str(Path(__file__).parents[1]))
|
||||||
|
|
||||||
@ -233,7 +232,7 @@ class GsServer:
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
core_config.lazy_write_config()
|
core_config.lazy_write_config()
|
||||||
logger.success('[GsCore] 插件加载完成!')
|
logger.success('💖 [早柚核心] 插件加载完成!')
|
||||||
|
|
||||||
async def connect(self, websocket: WebSocket, bot_id: str) -> _Bot:
|
async def connect(self, websocket: WebSocket, bot_id: str) -> _Bot:
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
@ -297,7 +296,7 @@ def check_pyproject(pyproject: Path):
|
|||||||
sp_dep = toml_data['project'].get('gscore_auto_update_dep')
|
sp_dep = toml_data['project'].get('gscore_auto_update_dep')
|
||||||
if sp_dep:
|
if sp_dep:
|
||||||
sp_dep = parse_dependency(sp_dep)
|
sp_dep = parse_dependency(sp_dep)
|
||||||
logger.debug('[安装/更新依赖] 特殊依赖列表如下:')
|
logger.debug('📄 [安装/更新依赖] 特殊依赖列表如下:')
|
||||||
logger.debug(sp_dep)
|
logger.debug(sp_dep)
|
||||||
logger.debug('========')
|
logger.debug('========')
|
||||||
install_dependencies(sp_dep, True)
|
install_dependencies(sp_dep, True)
|
||||||
|
@ -36,9 +36,9 @@ def modify_func(func):
|
|||||||
try:
|
try:
|
||||||
result = await func(bot, event)
|
result = await func(bot, event)
|
||||||
return result
|
return result
|
||||||
except Exception:
|
except Exception as e:
|
||||||
logger.error(f'[SV] {event.command} 执行时出现错误!')
|
logger.error(f'[SV] {event.command} 执行时出现错误!')
|
||||||
logger.error(traceback.format_exc())
|
logger.exception(e)
|
||||||
finally:
|
finally:
|
||||||
instancess = Bot.get_instances()
|
instancess = Bot.get_instances()
|
||||||
mutiply_instances = Bot.get_mutiply_instances()
|
mutiply_instances = Bot.get_mutiply_instances()
|
||||||
|
@ -85,7 +85,7 @@ async def check_speed():
|
|||||||
TAG, BASE_URL = await find_fastest_url(URL_LIB)
|
TAG, BASE_URL = await find_fastest_url(URL_LIB)
|
||||||
global_tag, global_url = TAG, BASE_URL
|
global_tag, global_url = TAG, BASE_URL
|
||||||
|
|
||||||
logger.info(f"最快资源站: {TAG} {BASE_URL}")
|
logger.info(f"🚀 最快资源站: {TAG} {BASE_URL}")
|
||||||
NOW_SPEED_TEST = False
|
NOW_SPEED_TEST = False
|
||||||
return TAG, BASE_URL
|
return TAG, BASE_URL
|
||||||
|
|
||||||
@ -237,4 +237,4 @@ async def download_all_file(
|
|||||||
n += 1
|
n += 1
|
||||||
|
|
||||||
if n == len(EPATH_MAP):
|
if n == len(EPATH_MAP):
|
||||||
logger.success(f'插件 {plugin_name} 资源库已是最新!')
|
logger.success(f'🍱 [资源检查] 插件 {plugin_name} 资源库已是最新!')
|
||||||
|
@ -56,7 +56,7 @@ async def convert_img(
|
|||||||
:返回:
|
:返回:
|
||||||
* res: bytes对象或base64编码图片。
|
* res: bytes对象或base64编码图片。
|
||||||
"""
|
"""
|
||||||
logger.info('[GsCore] 处理图片中....')
|
logger.info('🚀 [GsCore] 处理图片中....')
|
||||||
|
|
||||||
if isinstance(img, Image.Image):
|
if isinstance(img, Image.Image):
|
||||||
if img.format == 'GIF':
|
if img.format == 'GIF':
|
||||||
|
@ -55,7 +55,7 @@ pic_expire_time = core_plugins_config.get_config('ScheduledCleanPicSrv').data
|
|||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
try:
|
try:
|
||||||
logger.info(
|
logger.info(
|
||||||
'[GsCore] 执行启动Hook函数中!',
|
'♻ [GsCore] 执行启动Hook函数中!',
|
||||||
[_def.__name__ for _def in core_start_def],
|
[_def.__name__ for _def in core_start_def],
|
||||||
)
|
)
|
||||||
for _def in core_start_def:
|
for _def in core_start_def:
|
||||||
|
@ -17,7 +17,7 @@ async def start_check():
|
|||||||
admin_auth_i18n.set_language('zh_CN')
|
admin_auth_i18n.set_language('zh_CN')
|
||||||
user_auth_i18n.set_language('zh_CN')
|
user_auth_i18n.set_language('zh_CN')
|
||||||
|
|
||||||
logger.info('尝试挂载WebConsole')
|
logger.info('💻 [网页控制台] 尝试挂载WebConsole')
|
||||||
await site.db.async_run_sync(
|
await site.db.async_run_sync(
|
||||||
SQLModel.metadata.create_all, is_session=False # type:ignore
|
SQLModel.metadata.create_all, is_session=False # type:ignore
|
||||||
) # type:ignore
|
) # type:ignore
|
||||||
|
@ -72,8 +72,13 @@ HTML = """
|
|||||||
font-size: 12px; /* 可以比正文小一点 */
|
font-size: 12px; /* 可以比正文小一点 */
|
||||||
}
|
}
|
||||||
.log-level.INFO { background-color: #2196F3; }
|
.log-level.INFO { background-color: #2196F3; }
|
||||||
|
.log-level.SUCCESS { background-color: #43A047; }
|
||||||
|
.log-level.DEBUG { background-color: #F39333; }
|
||||||
.log-level.WARN { background-color: #FFC107; color: #333; }
|
.log-level.WARN { background-color: #FFC107; color: #333; }
|
||||||
|
.log-level.WARNING { background-color: #FFC107; color: #333; }
|
||||||
.log-level.ERROR { background-color: #F44336; }
|
.log-level.ERROR { background-color: #F44336; }
|
||||||
|
.log-level.CRITICAL { background-color: #F44336; }
|
||||||
|
.log-level.EXCEPTION { background-color: #F44336; }
|
||||||
|
|
||||||
/* 日志内容样式 */
|
/* 日志内容样式 */
|
||||||
.log-content {
|
.log-content {
|
||||||
@ -101,6 +106,10 @@ HTML = """
|
|||||||
.log-keyword-success { color: #b9f6ca; font-weight: bold; }
|
.log-keyword-success { color: #b9f6ca; font-weight: bold; }
|
||||||
.log-keyword-blue { color: #407dff; font-weight: bold; }
|
.log-keyword-blue { color: #407dff; font-weight: bold; }
|
||||||
.log-keyword-id { color: #82aaff; background-color: #333a4f; padding: 1px 4px; border-radius: 3px; }
|
.log-keyword-id { color: #82aaff; background-color: #333a4f; padding: 1px 4px; border-radius: 3px; }
|
||||||
|
.log-keyword-purple {
|
||||||
|
color: #9c27b0; /* 深紫色,可根据需要调整色值 */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
/* --- 页面头部样式,可以稍微紧凑一点 --- */
|
/* --- 页面头部样式,可以稍微紧凑一点 --- */
|
||||||
.log-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid var(--theme-color); padding-bottom: 8px; margin-bottom: 12px; }
|
.log-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid var(--theme-color); padding-bottom: 8px; margin-bottom: 12px; }
|
||||||
@ -153,6 +162,11 @@ ON_MOUNT_SSE = """
|
|||||||
// isJson 保持 false
|
// isJson 保持 false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function highlightBrackets(text) {
|
||||||
|
// 匹配[]内的内容(非贪婪模式),替换为带紫色样式的span
|
||||||
|
return text.replace(/\[([^\]]+)\]/g, '<span class="log-keyword-purple">[$1]</span>');
|
||||||
|
}
|
||||||
|
|
||||||
// ======================= 核心修改点在这里 =======================
|
// ======================= 核心修改点在这里 =======================
|
||||||
if (isJson) {
|
if (isJson) {
|
||||||
// 1. 如果是JSON,优先高亮显示 (逻辑不变)
|
// 1. 如果是JSON,优先高亮显示 (逻辑不变)
|
||||||
@ -163,12 +177,14 @@ ON_MOUNT_SSE = """
|
|||||||
} else if (message_type === 'html') {
|
} else if (message_type === 'html') {
|
||||||
// 2. 如果后端标记为HTML,我们信任它,直接使用 message
|
// 2. 如果后端标记为HTML,我们信任它,直接使用 message
|
||||||
// 不再进行HTML转义,这样<span>标签就能生效
|
// 不再进行HTML转义,这样<span>标签就能生效
|
||||||
messageHtml = `<code>${message}</code>`;
|
const processedHtml = highlightBrackets(message);
|
||||||
|
messageHtml = `<code>${processedHtml}</code>`;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 3. 否则,就是未知来源的纯文本,为了安全必须进行转义
|
// 3. 否则,就是未知来源的纯文本,为了安全必须进行转义
|
||||||
const safeMessage = message.replace(/</g, "<").replace(/>/g, ">");
|
const safeMessage = message.replace(/</g, "<").replace(/>/g, ">");
|
||||||
messageHtml = `<code>${safeMessage}</code>`;
|
const processedText = highlightBrackets(message);
|
||||||
|
messageHtml = `<code>${processedText}</code>`;
|
||||||
}
|
}
|
||||||
// ======================= 修改结束 =======================
|
// ======================= 修改结束 =======================
|
||||||
|
|
||||||
@ -213,4 +229,4 @@ ON_MOUNT_SSE = """
|
|||||||
}
|
}
|
||||||
|
|
||||||
connectSSE();
|
connectSSE();
|
||||||
""" # noqa:E501
|
""" # noqa: E501, W605
|
||||||
|
198
pdm.lock
generated
198
pdm.lock
generated
@ -5,7 +5,7 @@
|
|||||||
groups = ["default"]
|
groups = ["default"]
|
||||||
strategy = []
|
strategy = []
|
||||||
lock_version = "4.5.0"
|
lock_version = "4.5.0"
|
||||||
content_hash = "sha256:fc0f22aaada8db7cfb61eb158d4982d0fc34f8de7ee374425e0161ce83078737"
|
content_hash = "sha256:d6945926edaaf8594dbfac391b90977c14af2783c8b0118b706dbd955035d6b8"
|
||||||
|
|
||||||
[[metadata.targets]]
|
[[metadata.targets]]
|
||||||
requires_python = "~=3.10"
|
requires_python = "~=3.10"
|
||||||
@ -76,7 +76,7 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aiohttp"
|
name = "aiohttp"
|
||||||
version = "3.12.12"
|
version = "3.12.13"
|
||||||
requires_python = ">=3.9"
|
requires_python = ">=3.9"
|
||||||
summary = "Async http client/server framework (asyncio)"
|
summary = "Async http client/server framework (asyncio)"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
@ -90,75 +90,75 @@ dependencies = [
|
|||||||
"yarl<2.0,>=1.17.0",
|
"yarl<2.0,>=1.17.0",
|
||||||
]
|
]
|
||||||
files = [
|
files = [
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6f25e9d274d6abbb15254f76f100c3984d6b9ad6e66263cc60a465dd5c7e48f5"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5421af8f22a98f640261ee48aae3a37f0c41371e99412d55eaf2f8a46d5dad29"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b8ec3c1a1c13d24941b5b913607e57b9364e4c0ea69d5363181467492c4b2ba6"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcda86f6cb318ba36ed8f1396a6a4a3fd8f856f84d426584392083d10da4de0"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81ef2f9253c327c211cb7b06ea2edd90e637cf21c347b894d540466b8d304e08"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cd71c9fb92aceb5a23c4c39d8ecc80389c178eba9feab77f19274843eb9412d"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28ded835c3663fd41c9ad44685811b11e34e6ac9a7516a30bfce13f6abba4496"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34ebf1aca12845066c963016655dac897651e1544f22a34c9b461ac3b4b1d3aa"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4b78ccf254fc10605b263996949a94ca3f50e4f9100e05137d6583e266b711e"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:893a4639694c5b7edd4bdd8141be296042b6806e27cc1d794e585c43010cc294"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f4a5af90d5232c41bb857568fe7d11ed84408653ec9da1ff999cc30258b9bd1"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:663d8ee3ffb3494502ebcccb49078faddbb84c1d870f9c1dd5a29e85d1f747ce"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffa5205c2f53f1120e93fdf2eca41b0f6344db131bc421246ee82c1e1038a14a"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0f8f6a85a0006ae2709aa4ce05749ba2cdcb4b43d6c21a16c8517c16593aabe"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68301660f0d7a3eddfb84f959f78a8f9db98c76a49b5235508fa16edaad0f7c"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1582745eb63df267c92d8b61ca655a0ce62105ef62542c00a74590f306be8cb5"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db874d3b0c92fdbb553751af9d2733b378c25cc83cd9dfba87f12fafd2dc9cd5"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d59227776ee2aa64226f7e086638baa645f4b044f2947dbf85c76ab11dcba073"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5e53cf9c201b45838a2d07b1f2d5f7fec9666db7979240002ce64f9b8a1e0cf2"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06b07c418bde1c8e737d8fa67741072bd3f5b0fb66cf8c0655172188c17e5fa6"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:8687cc5f32b4e328c233acd387d09a1b477007896b2f03c1c823a0fd05f63883"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9445c1842680efac0f81d272fd8db7163acfcc2b1436e3f420f4c9a9c5a50795"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5ee537ad29de716a3d8dc46c609908de0c25ffeebf93cd94a03d64cdc07d66d0"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:09c4767af0b0b98c724f5d47f2bf33395c8986995b0a9dab0575ca81a554a8c0"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:411f821be5af6af11dc5bed6c6c1dc6b6b25b91737d968ec2756f9baa75e5f9b"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f3854fbde7a465318ad8d3fc5bef8f059e6d0a87e71a0d3360bb56c0bf87b18a"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f90319d94cf5f9786773237f24bd235a7b5959089f1af8ec1154580a3434b503"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2332b4c361c05ecd381edb99e2a33733f3db906739a83a483974b3df70a51b40"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73b148e606f34e9d513c451fd65efe1091772659ca5703338a396a99f60108ff"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1561db63fa1b658cd94325d303933553ea7d89ae09ff21cc3bcd41b8521fbbb6"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-win32.whl", hash = "sha256:d40e7bfd577fdc8a92b72f35dfbdd3ec90f1bc8a72a42037fefe34d4eca2d4a1"},
|
{file = "aiohttp-3.12.13-cp310-cp310-win32.whl", hash = "sha256:a0be857f0b35177ba09d7c472825d1b711d11c6d0e8a2052804e3b93166de1ad"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-win_amd64.whl", hash = "sha256:65c7804a2343893d6dea9fce69811aea0a9ac47f68312cf2e3ee1668cd9a387f"},
|
{file = "aiohttp-3.12.13-cp310-cp310-win_amd64.whl", hash = "sha256:fcc30ad4fb5cb41a33953292d45f54ef4066746d625992aeac33b8c681173178"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:38823fe0d8bc059b3eaedb263fe427d887c7032e72b4ef92c472953285f0e658"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7c229b1437aa2576b99384e4be668af1db84b31a45305d02f61f5497cfa6f60c"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10237f2c34711215d04ed21da63852ce023608299554080a45c576215d9df81c"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04076d8c63471e51e3689c93940775dc3d12d855c0c80d18ac5a1c68f0904358"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:563ec477c0dc6d56fc7f943a3475b5acdb399c7686c30f5a98ada24bb7562c7a"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55683615813ce3601640cfaa1041174dc956d28ba0511c8cbd75273eb0587014"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3d05c46a61aca7c47df74afff818bc06a251ab95d95ff80b53665edfe1e0bdf"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:921bc91e602d7506d37643e77819cb0b840d4ebb5f8d6408423af3d3bf79a7b7"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:277c882916759b4a6b6dc7e2ceb124aad071b3c6456487808d9ab13e1b448d57"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e72d17fe0974ddeae8ed86db297e23dba39c7ac36d84acdbb53df2e18505a013"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:216abf74b324b0f4e67041dd4fb2819613909a825904f8a51701fbcd40c09cd7"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0653d15587909a52e024a261943cf1c5bdc69acb71f411b0dd5966d065a51a47"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65d6cefad286459b68e7f867b9586a821fb7f121057b88f02f536ef570992329"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a77b48997c66722c65e157c06c74332cdf9c7ad00494b85ec43f324e5c5a9b9a"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:feaaaff61966b5f4b4eae0b79fc79427f49484e4cfa5ab7d138ecd933ab540a8"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6946bae55fd36cfb8e4092c921075cde029c71c7cb571d72f1079d1e4e013bc"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05917780b7cad1755784b16cfaad806bc16029a93d15f063ca60185b7d9ba05"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f95db8c8b219bcf294a53742c7bda49b80ceb9d577c8e7aa075612b7f39ffb7"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:082c5ec6d262c1b2ee01c63f4fb9152c17f11692bf16f0f100ad94a7a287d456"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03d5eb3cfb4949ab4c74822fb3326cd9655c2b9fe22e4257e2100d44215b2e2b"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b265a3a8b379b38696ac78bdef943bdc4f4a5d6bed1a3fb5c75c6bab1ecea422"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6383dd0ffa15515283c26cbf41ac8e6705aab54b4cbb77bdb8935a713a89bee9"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2e0f2e208914ecbc4b2a3b7b4daa759d0c587d9a0b451bb0835ac47fae7fa735"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6548a411bc8219b45ba2577716493aa63b12803d1e5dc70508c539d0db8dbf5a"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9923b025845b72f64d167bca221113377c8ffabd0a351dc18fb839d401ee8e22"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:81b0fcbfe59a4ca41dc8f635c2a4a71e63f75168cc91026c61be665945739e2d"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1ebb213445900527831fecc70e185bf142fdfe5f2a691075f22d63c65ee3c35a"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a83797a0174e7995e5edce9dcecc517c642eb43bc3cba296d4512edf346eee2"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fc369fb273a8328077d37798b77c1e65676709af5c182cb74bd169ca9defe81"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5734d8469a5633a4e9ffdf9983ff7cdb512524645c7a3d4bc8a3de45b935ac3"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-win32.whl", hash = "sha256:58ecd10fda6a44c311cd3742cfd2aea8c4c600338e9f27cb37434d9f5ca9ddaa"},
|
{file = "aiohttp-3.12.13-cp311-cp311-win32.whl", hash = "sha256:fef8d50dfa482925bb6b4c208b40d8e9fa54cecba923dc65b825a72eed9a5dbd"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-win_amd64.whl", hash = "sha256:b0066e88f30be00badffb5ef8f2281532b9a9020863d873ae15f7c147770b6ec"},
|
{file = "aiohttp-3.12.13-cp311-cp311-win_amd64.whl", hash = "sha256:9a27da9c3b5ed9d04c36ad2df65b38a96a37e9cfba6f1381b842d05d98e6afe9"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:98451ce9ce229d092f278a74a7c2a06b3aa72984673c87796126d7ccade893e9"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0aa580cf80558557285b49452151b9c69f2fa3ad94c5c9e76e684719a8791b73"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:adbac7286d89245e1aff42e948503fdc6edf6d5d65c8e305a67c40f6a8fb95f4"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b103a7e414b57e6939cc4dece8e282cfb22043efd0c7298044f6594cf83ab347"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0728882115bfa85cbd8d0f664c8ccc0cfd5bd3789dd837596785450ae52fac31"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f64e748e9e741d2eccff9597d09fb3cd962210e5b5716047cbb646dc8fe06f"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf3b9d9e767f9d0e09fb1a31516410fc741a62cc08754578c40abc497d09540"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c955989bf4c696d2ededc6b0ccb85a73623ae6e112439398935362bacfaaf6"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c944860e86b9f77a462321a440ccf6fa10f5719bb9d026f6b0b11307b1c96c7b"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d640191016763fab76072c87d8854a19e8e65d7a6fcfcbf017926bdbbb30a7e5"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b1979e1f0c98c06fd0cd940988833b102fa3aa56751f6c40ffe85cabc51f6fd"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc507481266b410dede95dd9f26c8d6f5a14315372cc48a6e43eac652237d9b"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:120b7dd084e96cfdad85acea2ce1e7708c70a26db913eabb8d7b417c728f5d84"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a94daa873465d518db073bd95d75f14302e0208a08e8c942b2f3f1c07288a75"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e58f5ae79649ffa247081c2e8c85e31d29623cf2a3137dda985ae05c9478aae"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f52420cde4ce0bb9425a375d95577fe082cb5721ecb61da3049b55189e4e6"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aa5f049e3e2745b0141f13e5a64e7c48b1a1427ed18bbb7957b348f282fee56"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f7df1f620ec40f1a7fbcb99ea17d7326ea6996715e78f71a1c9a021e31b96b8"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7163cc9cf3722d90f1822f8a38b211e3ae2fc651c63bb55449f03dc1b3ff1d44"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3062d4ad53b36e17796dce1c0d6da0ad27a015c321e663657ba1cc7659cfc710"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ef97c4d035b721de6607f3980fa3e4ef0ec3aca76474b5789b7fac286a8c4e23"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:8605e22d2a86b8e51ffb5253d9045ea73683d92d47c0b1438e11a359bdb94462"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1c14448d6a86acadc3f7b2f4cc385d1fb390acb6f37dce27f86fe629410d92e3"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54fbbe6beafc2820de71ece2198458a711e224e116efefa01b7969f3e2b3ddae"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a1b6df6255cfc493454c79221183d64007dd5080bcda100db29b7ff181b8832c"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:050bd277dfc3768b606fd4eae79dd58ceda67d8b0b3c565656a89ae34525d15e"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:60fc7338dfb0626c2927bfbac4785de3ea2e2bbe3d328ba5f3ece123edda4977"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2637a60910b58f50f22379b6797466c3aa6ae28a6ab6404e09175ce4955b4e6a"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2afc72207ef4c9d4ca9fcd00689a6a37ef2d625600c3d757b5c2b80c9d0cf9a"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e986067357550d1aaa21cfe9897fa19e680110551518a5a7cf44e6c5638cb8b5"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-win32.whl", hash = "sha256:8098a48f93b2cbcdb5778e7c9a0e0375363e40ad692348e6e65c3b70d593b27c"},
|
{file = "aiohttp-3.12.13-cp312-cp312-win32.whl", hash = "sha256:ac941a80aeea2aaae2875c9500861a3ba356f9ff17b9cb2dbfb5cbf91baaf5bf"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-win_amd64.whl", hash = "sha256:d1c1879b2e0fc337d7a1b63fe950553c2b9e93c071cf95928aeea1902d441403"},
|
{file = "aiohttp-3.12.13-cp312-cp312-win_amd64.whl", hash = "sha256:671f41e6146a749b6c81cb7fd07f5a8356d46febdaaaf07b0e774ff04830461e"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ea5d604318234427929d486954e3199aded65f41593ac57aa0241ab93dda3d15"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d4a18e61f271127465bdb0e8ff36e8f02ac4a32a80d8927aa52371e93cd87938"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e03ff38250b8b572dce6fcd7b6fb6ee398bb8a59e6aa199009c5322d721df4fc"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:532542cb48691179455fab429cdb0d558b5e5290b033b87478f2aa6af5d20ace"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:71125b1fc2b6a94bccc63bbece620906a4dead336d2051f8af9cbf04480bc5af"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d7eea18b52f23c050ae9db5d01f3d264ab08f09e7356d6f68e3f3ac2de9dfabb"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:784a66f9f853a22c6b8c2bd0ff157f9b879700f468d6d72cfa99167df08c5c9c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad7c8e5c25f2a26842a7c239de3f7b6bfb92304593ef997c04ac49fb703ff4d7"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a5be0b58670b54301404bd1840e4902570a1c3be00358e2700919cb1ea73c438"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6af355b483e3fe9d7336d84539fef460120c2f6e50e06c658fe2907c69262d6b"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8f13566fc7bf5a728275b434bc3bdea87a7ed3ad5f734102b02ca59d9b510f"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a95cf9f097498f35c88e3609f55bb47b28a5ef67f6888f4390b3d73e2bac6177"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d736e57d1901683bc9be648aa308cb73e646252c74b4c639c35dcd401ed385ea"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8ed8c38a1c584fe99a475a8f60eefc0b682ea413a84c6ce769bb19a7ff1c5ef"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2007eaa7aae9102f211c519d1ec196bd3cecb1944a095db19eeaf132b798738"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0b9170d5d800126b5bc89d3053a2363406d6e327afb6afaeda2d19ee8bb103"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a813e61583cab6d5cdbaa34bc28863acdb92f9f46e11de1b3b9251a1e8238f6"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:372feeace612ef8eb41f05ae014a92121a512bd5067db8f25101dd88a8db11da"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e408293aa910b0aea48b86a28eace41d497a85ba16c20f619f0c604597ef996c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a946d3702f7965d81f7af7ea8fb03bb33fe53d311df48a46eeca17e9e0beed2d"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f3d31faf290f5a30acba46b388465b67c6dbe8655d183e9efe2f6a1d594e6d9d"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a0c4725fae86555bbb1d4082129e21de7264f4ab14baf735278c974785cd2041"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0b84731697325b023902aa643bd1726d999f5bc7854bc28b17ff410a81151d4b"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b28ea2f708234f0a5c44eb6c7d9eb63a148ce3252ba0140d050b091b6e842d1"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a324c6852b6e327811748446e56cc9bb6eaa58710557922183175816e82a4234"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d4f5becd2a5791829f79608c6f3dc745388162376f310eb9c142c985f9441cc1"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:22fd867fbd72612dcf670c90486dbcbaf702cb807fb0b42bc0b7a142a573574a"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:60f2ce6b944e97649051d5f5cc0f439360690b73909230e107fd45a359d3e911"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e092f1a970223794a4bf620a26c0e4e4e8e36bccae9b0b5da35e6d8ee598a03"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69fc1909857401b67bf599c793f2183fbc4804717388b0b888f27f9929aa41f3"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-win32.whl", hash = "sha256:7f5f5eb8717ef8ba15ab35fcde5a70ad28bbdc34157595d1cddd888a985f5aae"},
|
{file = "aiohttp-3.12.13-cp313-cp313-win32.whl", hash = "sha256:7d7e68787a2046b0e44ba5587aa723ce05d711e3a3665b6b7545328ac8e3c0dd"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-win_amd64.whl", hash = "sha256:ace2499bdd03c329c054dc4b47361f2b19d5aa470f7db5c7e0e989336761b33c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-win_amd64.whl", hash = "sha256:5a178390ca90419bfd41419a809688c368e63c86bd725e1186dd97f6b89c2706"},
|
||||||
{file = "aiohttp-3.12.12.tar.gz", hash = "sha256:05875595d2483d96cb61fa9f64e75262d7ac6251a7e3c811d8e26f7d721760bd"},
|
{file = "aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -362,12 +362,12 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "certifi"
|
name = "certifi"
|
||||||
version = "2025.4.26"
|
version = "2025.6.15"
|
||||||
requires_python = ">=3.6"
|
requires_python = ">=3.7"
|
||||||
summary = "Python package for providing Mozilla's CA Bundle."
|
summary = "Python package for providing Mozilla's CA Bundle."
|
||||||
files = [
|
files = [
|
||||||
{file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"},
|
{file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"},
|
||||||
{file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"},
|
{file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -872,6 +872,19 @@ files = [
|
|||||||
{file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"},
|
{file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "markdown-it-py"
|
||||||
|
version = "3.0.0"
|
||||||
|
requires_python = ">=3.8"
|
||||||
|
summary = "Python port of markdown-it. Markdown parsing, done right!"
|
||||||
|
dependencies = [
|
||||||
|
"mdurl~=0.1",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
|
||||||
|
{file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "markupsafe"
|
name = "markupsafe"
|
||||||
version = "3.0.2"
|
version = "3.0.2"
|
||||||
@ -931,6 +944,16 @@ files = [
|
|||||||
{file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
|
{file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mdurl"
|
||||||
|
version = "0.1.2"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Markdown URL utilities"
|
||||||
|
files = [
|
||||||
|
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
|
||||||
|
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mpmath"
|
name = "mpmath"
|
||||||
version = "1.3.0"
|
version = "1.3.0"
|
||||||
@ -1481,6 +1504,16 @@ files = [
|
|||||||
{file = "pydantic_settings-2.9.1.tar.gz", hash = "sha256:c509bf79d27563add44e8446233359004ed85066cd096d8b510f715e6ef5d268"},
|
{file = "pydantic_settings-2.9.1.tar.gz", hash = "sha256:c509bf79d27563add44e8446233359004ed85066cd096d8b510f715e6ef5d268"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pygments"
|
||||||
|
version = "2.19.1"
|
||||||
|
requires_python = ">=3.8"
|
||||||
|
summary = "Pygments is a syntax highlighting package written in Python."
|
||||||
|
files = [
|
||||||
|
{file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
|
||||||
|
{file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pypng"
|
name = "pypng"
|
||||||
version = "0.20220715.0"
|
version = "0.20220715.0"
|
||||||
@ -1562,6 +1595,21 @@ files = [
|
|||||||
{file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"},
|
{file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rich"
|
||||||
|
version = "14.0.0"
|
||||||
|
requires_python = ">=3.8.0"
|
||||||
|
summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
||||||
|
dependencies = [
|
||||||
|
"markdown-it-py>=2.2.0",
|
||||||
|
"pygments<3.0.0,>=2.13.0",
|
||||||
|
"typing-extensions<5.0,>=4.0.0; python_version < \"3.11\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"},
|
||||||
|
{file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "s3transfer"
|
name = "s3transfer"
|
||||||
version = "0.10.4"
|
version = "0.10.4"
|
||||||
|
306
poetry.lock
generated
306
poetry.lock
generated
@ -84,97 +84,97 @@ reference = "NJU"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aiohttp"
|
name = "aiohttp"
|
||||||
version = "3.12.12"
|
version = "3.12.13"
|
||||||
description = "Async http client/server framework (asyncio)"
|
description = "Async http client/server framework (asyncio)"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.9"
|
||||||
files = [
|
files = [
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6f25e9d274d6abbb15254f76f100c3984d6b9ad6e66263cc60a465dd5c7e48f5"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5421af8f22a98f640261ee48aae3a37f0c41371e99412d55eaf2f8a46d5dad29"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b8ec3c1a1c13d24941b5b913607e57b9364e4c0ea69d5363181467492c4b2ba6"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcda86f6cb318ba36ed8f1396a6a4a3fd8f856f84d426584392083d10da4de0"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81ef2f9253c327c211cb7b06ea2edd90e637cf21c347b894d540466b8d304e08"},
|
{file = "aiohttp-3.12.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cd71c9fb92aceb5a23c4c39d8ecc80389c178eba9feab77f19274843eb9412d"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28ded835c3663fd41c9ad44685811b11e34e6ac9a7516a30bfce13f6abba4496"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34ebf1aca12845066c963016655dac897651e1544f22a34c9b461ac3b4b1d3aa"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4b78ccf254fc10605b263996949a94ca3f50e4f9100e05137d6583e266b711e"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:893a4639694c5b7edd4bdd8141be296042b6806e27cc1d794e585c43010cc294"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f4a5af90d5232c41bb857568fe7d11ed84408653ec9da1ff999cc30258b9bd1"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:663d8ee3ffb3494502ebcccb49078faddbb84c1d870f9c1dd5a29e85d1f747ce"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffa5205c2f53f1120e93fdf2eca41b0f6344db131bc421246ee82c1e1038a14a"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0f8f6a85a0006ae2709aa4ce05749ba2cdcb4b43d6c21a16c8517c16593aabe"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68301660f0d7a3eddfb84f959f78a8f9db98c76a49b5235508fa16edaad0f7c"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1582745eb63df267c92d8b61ca655a0ce62105ef62542c00a74590f306be8cb5"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db874d3b0c92fdbb553751af9d2733b378c25cc83cd9dfba87f12fafd2dc9cd5"},
|
{file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d59227776ee2aa64226f7e086638baa645f4b044f2947dbf85c76ab11dcba073"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5e53cf9c201b45838a2d07b1f2d5f7fec9666db7979240002ce64f9b8a1e0cf2"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06b07c418bde1c8e737d8fa67741072bd3f5b0fb66cf8c0655172188c17e5fa6"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:8687cc5f32b4e328c233acd387d09a1b477007896b2f03c1c823a0fd05f63883"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9445c1842680efac0f81d272fd8db7163acfcc2b1436e3f420f4c9a9c5a50795"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5ee537ad29de716a3d8dc46c609908de0c25ffeebf93cd94a03d64cdc07d66d0"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:09c4767af0b0b98c724f5d47f2bf33395c8986995b0a9dab0575ca81a554a8c0"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:411f821be5af6af11dc5bed6c6c1dc6b6b25b91737d968ec2756f9baa75e5f9b"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f3854fbde7a465318ad8d3fc5bef8f059e6d0a87e71a0d3360bb56c0bf87b18a"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f90319d94cf5f9786773237f24bd235a7b5959089f1af8ec1154580a3434b503"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2332b4c361c05ecd381edb99e2a33733f3db906739a83a483974b3df70a51b40"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73b148e606f34e9d513c451fd65efe1091772659ca5703338a396a99f60108ff"},
|
{file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1561db63fa1b658cd94325d303933553ea7d89ae09ff21cc3bcd41b8521fbbb6"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-win32.whl", hash = "sha256:d40e7bfd577fdc8a92b72f35dfbdd3ec90f1bc8a72a42037fefe34d4eca2d4a1"},
|
{file = "aiohttp-3.12.13-cp310-cp310-win32.whl", hash = "sha256:a0be857f0b35177ba09d7c472825d1b711d11c6d0e8a2052804e3b93166de1ad"},
|
||||||
{file = "aiohttp-3.12.12-cp310-cp310-win_amd64.whl", hash = "sha256:65c7804a2343893d6dea9fce69811aea0a9ac47f68312cf2e3ee1668cd9a387f"},
|
{file = "aiohttp-3.12.13-cp310-cp310-win_amd64.whl", hash = "sha256:fcc30ad4fb5cb41a33953292d45f54ef4066746d625992aeac33b8c681173178"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:38823fe0d8bc059b3eaedb263fe427d887c7032e72b4ef92c472953285f0e658"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7c229b1437aa2576b99384e4be668af1db84b31a45305d02f61f5497cfa6f60c"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10237f2c34711215d04ed21da63852ce023608299554080a45c576215d9df81c"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04076d8c63471e51e3689c93940775dc3d12d855c0c80d18ac5a1c68f0904358"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:563ec477c0dc6d56fc7f943a3475b5acdb399c7686c30f5a98ada24bb7562c7a"},
|
{file = "aiohttp-3.12.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55683615813ce3601640cfaa1041174dc956d28ba0511c8cbd75273eb0587014"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3d05c46a61aca7c47df74afff818bc06a251ab95d95ff80b53665edfe1e0bdf"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:921bc91e602d7506d37643e77819cb0b840d4ebb5f8d6408423af3d3bf79a7b7"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:277c882916759b4a6b6dc7e2ceb124aad071b3c6456487808d9ab13e1b448d57"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e72d17fe0974ddeae8ed86db297e23dba39c7ac36d84acdbb53df2e18505a013"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:216abf74b324b0f4e67041dd4fb2819613909a825904f8a51701fbcd40c09cd7"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0653d15587909a52e024a261943cf1c5bdc69acb71f411b0dd5966d065a51a47"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65d6cefad286459b68e7f867b9586a821fb7f121057b88f02f536ef570992329"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a77b48997c66722c65e157c06c74332cdf9c7ad00494b85ec43f324e5c5a9b9a"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:feaaaff61966b5f4b4eae0b79fc79427f49484e4cfa5ab7d138ecd933ab540a8"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6946bae55fd36cfb8e4092c921075cde029c71c7cb571d72f1079d1e4e013bc"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05917780b7cad1755784b16cfaad806bc16029a93d15f063ca60185b7d9ba05"},
|
{file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f95db8c8b219bcf294a53742c7bda49b80ceb9d577c8e7aa075612b7f39ffb7"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:082c5ec6d262c1b2ee01c63f4fb9152c17f11692bf16f0f100ad94a7a287d456"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03d5eb3cfb4949ab4c74822fb3326cd9655c2b9fe22e4257e2100d44215b2e2b"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b265a3a8b379b38696ac78bdef943bdc4f4a5d6bed1a3fb5c75c6bab1ecea422"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6383dd0ffa15515283c26cbf41ac8e6705aab54b4cbb77bdb8935a713a89bee9"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2e0f2e208914ecbc4b2a3b7b4daa759d0c587d9a0b451bb0835ac47fae7fa735"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6548a411bc8219b45ba2577716493aa63b12803d1e5dc70508c539d0db8dbf5a"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9923b025845b72f64d167bca221113377c8ffabd0a351dc18fb839d401ee8e22"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:81b0fcbfe59a4ca41dc8f635c2a4a71e63f75168cc91026c61be665945739e2d"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1ebb213445900527831fecc70e185bf142fdfe5f2a691075f22d63c65ee3c35a"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a83797a0174e7995e5edce9dcecc517c642eb43bc3cba296d4512edf346eee2"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fc369fb273a8328077d37798b77c1e65676709af5c182cb74bd169ca9defe81"},
|
{file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5734d8469a5633a4e9ffdf9983ff7cdb512524645c7a3d4bc8a3de45b935ac3"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-win32.whl", hash = "sha256:58ecd10fda6a44c311cd3742cfd2aea8c4c600338e9f27cb37434d9f5ca9ddaa"},
|
{file = "aiohttp-3.12.13-cp311-cp311-win32.whl", hash = "sha256:fef8d50dfa482925bb6b4c208b40d8e9fa54cecba923dc65b825a72eed9a5dbd"},
|
||||||
{file = "aiohttp-3.12.12-cp311-cp311-win_amd64.whl", hash = "sha256:b0066e88f30be00badffb5ef8f2281532b9a9020863d873ae15f7c147770b6ec"},
|
{file = "aiohttp-3.12.13-cp311-cp311-win_amd64.whl", hash = "sha256:9a27da9c3b5ed9d04c36ad2df65b38a96a37e9cfba6f1381b842d05d98e6afe9"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:98451ce9ce229d092f278a74a7c2a06b3aa72984673c87796126d7ccade893e9"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0aa580cf80558557285b49452151b9c69f2fa3ad94c5c9e76e684719a8791b73"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:adbac7286d89245e1aff42e948503fdc6edf6d5d65c8e305a67c40f6a8fb95f4"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b103a7e414b57e6939cc4dece8e282cfb22043efd0c7298044f6594cf83ab347"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0728882115bfa85cbd8d0f664c8ccc0cfd5bd3789dd837596785450ae52fac31"},
|
{file = "aiohttp-3.12.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f64e748e9e741d2eccff9597d09fb3cd962210e5b5716047cbb646dc8fe06f"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf3b9d9e767f9d0e09fb1a31516410fc741a62cc08754578c40abc497d09540"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c955989bf4c696d2ededc6b0ccb85a73623ae6e112439398935362bacfaaf6"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c944860e86b9f77a462321a440ccf6fa10f5719bb9d026f6b0b11307b1c96c7b"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d640191016763fab76072c87d8854a19e8e65d7a6fcfcbf017926bdbbb30a7e5"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b1979e1f0c98c06fd0cd940988833b102fa3aa56751f6c40ffe85cabc51f6fd"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc507481266b410dede95dd9f26c8d6f5a14315372cc48a6e43eac652237d9b"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:120b7dd084e96cfdad85acea2ce1e7708c70a26db913eabb8d7b417c728f5d84"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a94daa873465d518db073bd95d75f14302e0208a08e8c942b2f3f1c07288a75"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e58f5ae79649ffa247081c2e8c85e31d29623cf2a3137dda985ae05c9478aae"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f52420cde4ce0bb9425a375d95577fe082cb5721ecb61da3049b55189e4e6"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aa5f049e3e2745b0141f13e5a64e7c48b1a1427ed18bbb7957b348f282fee56"},
|
{file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f7df1f620ec40f1a7fbcb99ea17d7326ea6996715e78f71a1c9a021e31b96b8"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7163cc9cf3722d90f1822f8a38b211e3ae2fc651c63bb55449f03dc1b3ff1d44"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3062d4ad53b36e17796dce1c0d6da0ad27a015c321e663657ba1cc7659cfc710"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ef97c4d035b721de6607f3980fa3e4ef0ec3aca76474b5789b7fac286a8c4e23"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:8605e22d2a86b8e51ffb5253d9045ea73683d92d47c0b1438e11a359bdb94462"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1c14448d6a86acadc3f7b2f4cc385d1fb390acb6f37dce27f86fe629410d92e3"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54fbbe6beafc2820de71ece2198458a711e224e116efefa01b7969f3e2b3ddae"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a1b6df6255cfc493454c79221183d64007dd5080bcda100db29b7ff181b8832c"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:050bd277dfc3768b606fd4eae79dd58ceda67d8b0b3c565656a89ae34525d15e"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:60fc7338dfb0626c2927bfbac4785de3ea2e2bbe3d328ba5f3ece123edda4977"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2637a60910b58f50f22379b6797466c3aa6ae28a6ab6404e09175ce4955b4e6a"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2afc72207ef4c9d4ca9fcd00689a6a37ef2d625600c3d757b5c2b80c9d0cf9a"},
|
{file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e986067357550d1aaa21cfe9897fa19e680110551518a5a7cf44e6c5638cb8b5"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-win32.whl", hash = "sha256:8098a48f93b2cbcdb5778e7c9a0e0375363e40ad692348e6e65c3b70d593b27c"},
|
{file = "aiohttp-3.12.13-cp312-cp312-win32.whl", hash = "sha256:ac941a80aeea2aaae2875c9500861a3ba356f9ff17b9cb2dbfb5cbf91baaf5bf"},
|
||||||
{file = "aiohttp-3.12.12-cp312-cp312-win_amd64.whl", hash = "sha256:d1c1879b2e0fc337d7a1b63fe950553c2b9e93c071cf95928aeea1902d441403"},
|
{file = "aiohttp-3.12.13-cp312-cp312-win_amd64.whl", hash = "sha256:671f41e6146a749b6c81cb7fd07f5a8356d46febdaaaf07b0e774ff04830461e"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ea5d604318234427929d486954e3199aded65f41593ac57aa0241ab93dda3d15"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d4a18e61f271127465bdb0e8ff36e8f02ac4a32a80d8927aa52371e93cd87938"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e03ff38250b8b572dce6fcd7b6fb6ee398bb8a59e6aa199009c5322d721df4fc"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:532542cb48691179455fab429cdb0d558b5e5290b033b87478f2aa6af5d20ace"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:71125b1fc2b6a94bccc63bbece620906a4dead336d2051f8af9cbf04480bc5af"},
|
{file = "aiohttp-3.12.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d7eea18b52f23c050ae9db5d01f3d264ab08f09e7356d6f68e3f3ac2de9dfabb"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:784a66f9f853a22c6b8c2bd0ff157f9b879700f468d6d72cfa99167df08c5c9c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad7c8e5c25f2a26842a7c239de3f7b6bfb92304593ef997c04ac49fb703ff4d7"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a5be0b58670b54301404bd1840e4902570a1c3be00358e2700919cb1ea73c438"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6af355b483e3fe9d7336d84539fef460120c2f6e50e06c658fe2907c69262d6b"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8f13566fc7bf5a728275b434bc3bdea87a7ed3ad5f734102b02ca59d9b510f"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a95cf9f097498f35c88e3609f55bb47b28a5ef67f6888f4390b3d73e2bac6177"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d736e57d1901683bc9be648aa308cb73e646252c74b4c639c35dcd401ed385ea"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8ed8c38a1c584fe99a475a8f60eefc0b682ea413a84c6ce769bb19a7ff1c5ef"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2007eaa7aae9102f211c519d1ec196bd3cecb1944a095db19eeaf132b798738"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0b9170d5d800126b5bc89d3053a2363406d6e327afb6afaeda2d19ee8bb103"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a813e61583cab6d5cdbaa34bc28863acdb92f9f46e11de1b3b9251a1e8238f6"},
|
{file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:372feeace612ef8eb41f05ae014a92121a512bd5067db8f25101dd88a8db11da"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e408293aa910b0aea48b86a28eace41d497a85ba16c20f619f0c604597ef996c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a946d3702f7965d81f7af7ea8fb03bb33fe53d311df48a46eeca17e9e0beed2d"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f3d31faf290f5a30acba46b388465b67c6dbe8655d183e9efe2f6a1d594e6d9d"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a0c4725fae86555bbb1d4082129e21de7264f4ab14baf735278c974785cd2041"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0b84731697325b023902aa643bd1726d999f5bc7854bc28b17ff410a81151d4b"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b28ea2f708234f0a5c44eb6c7d9eb63a148ce3252ba0140d050b091b6e842d1"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a324c6852b6e327811748446e56cc9bb6eaa58710557922183175816e82a4234"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d4f5becd2a5791829f79608c6f3dc745388162376f310eb9c142c985f9441cc1"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:22fd867fbd72612dcf670c90486dbcbaf702cb807fb0b42bc0b7a142a573574a"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:60f2ce6b944e97649051d5f5cc0f439360690b73909230e107fd45a359d3e911"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e092f1a970223794a4bf620a26c0e4e4e8e36bccae9b0b5da35e6d8ee598a03"},
|
{file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69fc1909857401b67bf599c793f2183fbc4804717388b0b888f27f9929aa41f3"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-win32.whl", hash = "sha256:7f5f5eb8717ef8ba15ab35fcde5a70ad28bbdc34157595d1cddd888a985f5aae"},
|
{file = "aiohttp-3.12.13-cp313-cp313-win32.whl", hash = "sha256:7d7e68787a2046b0e44ba5587aa723ce05d711e3a3665b6b7545328ac8e3c0dd"},
|
||||||
{file = "aiohttp-3.12.12-cp313-cp313-win_amd64.whl", hash = "sha256:ace2499bdd03c329c054dc4b47361f2b19d5aa470f7db5c7e0e989336761b33c"},
|
{file = "aiohttp-3.12.13-cp313-cp313-win_amd64.whl", hash = "sha256:5a178390ca90419bfd41419a809688c368e63c86bd725e1186dd97f6b89c2706"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d0b1c27c05a7d39a50e946ec5f94c3af4ffadd33fa5f20705df42fb0a72ca14"},
|
{file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:36f6c973e003dc9b0bb4e8492a643641ea8ef0e97ff7aaa5c0f53d68839357b4"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e5928847e6f7b7434921fbabf73fa5609d1f2bf4c25d9d4522b1fcc3b51995cb"},
|
{file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6cbfc73179bd67c229eb171e2e3745d2afd5c711ccd1e40a68b90427f282eab1"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7678147c3c85a7ae61559b06411346272ed40a08f54bc05357079a63127c9718"},
|
{file = "aiohttp-3.12.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e8b27b2d414f7e3205aa23bb4a692e935ef877e3a71f40d1884f6e04fd7fa74"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f50057f36f2a1d8e750b273bb966bec9f69ee1e0a20725ae081610501f25d555"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eabded0c2b2ef56243289112c48556c395d70150ce4220d9008e6b4b3dd15690"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e834f0f11ff5805d11f0f22b627c75eadfaf91377b457875e4e3affd0b924f"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:003038e83f1a3ff97409999995ec02fe3008a1d675478949643281141f54751d"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f94b2e2dea19d09745ef02ed483192260750f18731876a5c76f1c254b841443a"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b6f46613031dbc92bdcaad9c4c22c7209236ec501f9c0c5f5f0b6a689bf50f3"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b434bfb49564dc1c318989a0ab1d3000d23e5cfd00d8295dc9d5a44324cdd42d"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c332c6bb04650d59fb94ed96491f43812549a3ba6e7a16a218e612f99f04145e"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ed76bc80177ddb7c5c93e1a6440b115ed2c92a3063420ac55206fd0832a6459"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fea41a2c931fb582cb15dc86a3037329e7b941df52b487a9f8b5aa960153cbd"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1282a9acd378f2aed8dc79c01e702b1d5fd260ad083926a88ec7e987c4e0ade"},
|
{file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:846104f45d18fb390efd9b422b27d8f3cf8853f1218c537f36e71a385758c896"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09a213c13fba321586edab1528b530799645b82bd64d79b779eb8d47ceea155a"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d6c85ac7dd350f8da2520bac8205ce99df4435b399fa7f4dc4a70407073e390"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:72eae16a9233561d315e72ae78ed9fc65ab3db0196e56cb2d329c755d694f137"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5a1ecce0ed281bec7da8550da052a6b89552db14d0a0a45554156f085a912f48"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f25990c507dbbeefd5a6a17df32a4ace634f7b20a38211d1b9609410c7f67a24"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5304d74867028cca8f64f1cc1215eb365388033c5a691ea7aa6b0dc47412f495"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:3a2aa255417c8ccf1b39359cd0a3d63ae3b5ced83958dbebc4d9113327c0536a"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:64d1f24ee95a2d1e094a4cd7a9b7d34d08db1bbcb8aa9fb717046b0a884ac294"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4c53b89b3f838e9c25f943d1257efff10b348cb56895f408ddbcb0ec953a2ad"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:119c79922a7001ca6a9e253228eb39b793ea994fd2eccb79481c64b5f9d2a055"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b5a49c2dcb32114455ad503e8354624d85ab311cbe032da03965882492a9cb98"},
|
{file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bb18f00396d22e2f10cd8825d671d9f9a3ba968d708a559c02a627536b36d91c"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-win32.whl", hash = "sha256:74fddc0ba8cea6b9c5bd732eb9d97853543586596b86391f8de5d4f6c2a0e068"},
|
{file = "aiohttp-3.12.13-cp39-cp39-win32.whl", hash = "sha256:0022de47ef63fd06b065d430ac79c6b0bd24cdae7feaf0e8c6bac23b805a23a8"},
|
||||||
{file = "aiohttp-3.12.12-cp39-cp39-win_amd64.whl", hash = "sha256:ddf40ba4a1d0b4d232dc47d2b98ae7e937dcbc40bb5f2746bce0af490a64526f"},
|
{file = "aiohttp-3.12.13-cp39-cp39-win_amd64.whl", hash = "sha256:29e08111ccf81b2734ae03f1ad1cb03b9615e7d8f616764f22f71209c094f122"},
|
||||||
{file = "aiohttp-3.12.12.tar.gz", hash = "sha256:05875595d2483d96cb61fa9f64e75262d7ac6251a7e3c811d8e26f7d721760bd"},
|
{file = "aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@ -571,13 +571,13 @@ reference = "NJU"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "certifi"
|
name = "certifi"
|
||||||
version = "2025.4.26"
|
version = "2025.6.15"
|
||||||
description = "Python package for providing Mozilla's CA Bundle."
|
description = "Python package for providing Mozilla's CA Bundle."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"},
|
{file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"},
|
||||||
{file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"},
|
{file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
@ -1318,72 +1318,72 @@ reference = "NJU"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libcst"
|
name = "libcst"
|
||||||
version = "1.8.1"
|
version = "1.8.2"
|
||||||
description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.13 programs."
|
description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.13 programs."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.9"
|
||||||
files = [
|
files = [
|
||||||
{file = "libcst-1.8.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1039750706c9d7cab431cd5845954a422ab20446dcead3296508dae892ec8f63"},
|
{file = "libcst-1.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:67d9720d91f507c87b3e5f070627ad640a00bc6cfdf5635f8c6ee9f2964cf71c"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37e65a1c1e93677e5d1d8be8614ce6074386dfde83818f6ee5a61c213eeb19cc"},
|
{file = "libcst-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:94b7c032b72566077614a02baab1929739fd0af0cc1d46deaba4408b870faef2"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:beb35d95e4f4ccfbe4c5169e29f21292c7c689e52f9913ea5d01644c780e8149"},
|
{file = "libcst-1.8.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:11ea148902e3e1688afa392087c728ac3a843e54a87d334d1464d2097d3debb7"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f4bec39b1dcb9918facb35c6a4be6d6b933282d11bdf2becebd06fcc82947f42"},
|
{file = "libcst-1.8.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:22c9473a2cc53faabcc95a0ac6ca4e52d127017bf34ba9bc0f8e472e44f7b38e"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a1e6817efe62b42319d0825a0a53df4da710b0bd5e432523226bbb842417340d"},
|
{file = "libcst-1.8.2-cp310-cp310-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b5269b96367e65793a7714608f6d906418eb056d59eaac9bba980486aabddbed"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:bdad73ce302741354abd2d0ac54add8bbbffb123a176629f65ce16e0dff012f6"},
|
{file = "libcst-1.8.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d20e932ddd9a389da57b060c26e84a24118c96ff6fc5dcc7b784da24e823b694"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:424c2e47b6c3d77fe0c6e4699a752e6b90bd664a31ebda1a291d19192fcc1f40"},
|
{file = "libcst-1.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a553d452004e44b841788f6faa7231a02157527ddecc89dbbe5b689b74822226"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:275705af742ed290e605bf9a48d5b560c3c6123e57644c15b2d2882b9e365775"},
|
{file = "libcst-1.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe762c4c390039b79b818cbc725d8663586b25351dc18a2704b0e357d69b924"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:c3180f3c1dbba66435e7b4674f3f54e9c90f30063eccc26fe987f1a29410555e"},
|
{file = "libcst-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:5c513e64eff0f7bf2a908e2d987a98653eb33e1062ce2afd3a84af58159a24f9"},
|
||||||
{file = "libcst-1.8.1-cp310-cp310-win_arm64.whl", hash = "sha256:6f04444a767790bbe5c6bdbc1d4da82a2508e8a9d5521456f61416f0433a0d6d"},
|
{file = "libcst-1.8.2-cp310-cp310-win_arm64.whl", hash = "sha256:41613fe08e647213546c7c59a5a1fc5484666e7d4cab6e80260c612acbb20e8c"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8df533666d294f0969843d42979ad05470c23f11ff036086c07e6988cbfce1ec"},
|
{file = "libcst-1.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:688a03bac4dfb9afc5078ec01d53c21556381282bdf1a804dd0dbafb5056de2a"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a748502a2ef57834e7f135a51392dc6a431f2d4547f8b2917cd8e27c91d30c61"},
|
{file = "libcst-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c34060ff2991707c710250463ae9f415ebb21653f2f5b013c61c9c376ff9b715"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5efdc57076775529b28c65ef86b6b048dd22f42cd9599b85379c0e25b90a87af"},
|
{file = "libcst-1.8.2-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f54f5c4176d60e7cd6b0880e18fb3fa8501ae046069151721cab457c7c538a3d"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e52711ac101d9d1bba817fa62e61d5b095a00f6045489760e1c456188fde210a"},
|
{file = "libcst-1.8.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d11992561de0ad29ec2800230fbdcbef9efaa02805d5c633a73ab3cf2ba51bf1"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10338a7d0b7db9b9fbe78358dac8b8e7ed61f424b0f8ae230dbd7a342a74778b"},
|
{file = "libcst-1.8.2-cp311-cp311-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fa3b807c2d2b34397c135d19ad6abb20c47a2ddb7bf65d90455f2040f7797e1e"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8bad58fe9fbff7dea630dc48e560d24b4d26940dd711f439927ef3011b0cf690"},
|
{file = "libcst-1.8.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b0110140738be1287e3724080a101e7cec6ae708008b7650c9d8a1c1788ec03a"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:50b37caf494f494563894fb596ed684f7741aa95f6d4c37f123c06ebda759878"},
|
{file = "libcst-1.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a50618f4819a97ef897e055ac7aaf1cad5df84c206f33be35b0759d671574197"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7ad417f441337500cc3566c4a87558c842abae002f492511a6f86c82af923714"},
|
{file = "libcst-1.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e9bb599c175dc34a4511f0e26d5b5374fbcc91ea338871701a519e95d52f3c28"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:0c78e068201a3f18ab85b1886f3ffd15a4148b3e90b266c13362c1e9a7583ee2"},
|
{file = "libcst-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:96e2363e1f6e44bd7256bbbf3a53140743f821b5133046e6185491e0d9183447"},
|
||||||
{file = "libcst-1.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:db837fdb429e813ea317f373fd132c6f1ee3d6a0569f90ee5dee836d464d91ad"},
|
{file = "libcst-1.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:f5391d71bd7e9e6c73dcb3ee8d8c63b09efc14ce6e4dad31568d4838afc9aae0"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b45eb7b914c5a929d5501a88e94ea676dd26e43d47a232b5bafa7cebb7f3a5a5"},
|
{file = "libcst-1.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2e8c1dfa854e700fcf6cd79b2796aa37d55697a74646daf5ea47c7c764bac31c"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ff683bc50d543daca39b9db27af2406a1626fbadd9cc288605eff3915553e98"},
|
{file = "libcst-1.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b5c57a3c1976c365678eb0730bcb140d40510990cb77df9a91bb5c41d587ba6"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:02388998631bf53590185518cb99a1bd9de3178e16354cee10e6ae00cc027919"},
|
{file = "libcst-1.8.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:0f23409add2aaebbb6d8e881babab43c2d979f051b8bd8aed5fe779ea180a4e8"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f17c68a1d2d6ed44169244cc3b933b382cee709aac524c1b44cefe08205d09fc"},
|
{file = "libcst-1.8.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b88e9104c456590ad0ef0e82851d4fc03e9aa9d621fa8fdd4cd0907152a825ae"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f7fb2d40918d1c7c0415b4384071d7f749e87459e78b40f61d2df33c4c9bf7d1"},
|
{file = "libcst-1.8.2-cp312-cp312-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5ba3ea570c8fb6fc44f71aa329edc7c668e2909311913123d0d7ab8c65fc357"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:026ed27b3b9747990a5ed6c8d3aa0d49b119ba71ce53824faa407bec3bc4b167"},
|
{file = "libcst-1.8.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:460fcf3562f078781e1504983cb11909eb27a1d46eaa99e65c4b0fafdc298298"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5a0deda3af3abb811b52043630a1ad0bc4b571b091478beae0bb13812632b0a"},
|
{file = "libcst-1.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1381ddbd1066d543e05d580c15beacf671e1469a0b2adb6dba58fec311f4eed"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0041cd15f2f203a4fe1702217fcc639ac6f8b380d2b19c5a08cf2f229e3985c1"},
|
{file = "libcst-1.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a70e40ce7600e1b32e293bb9157e9de3b69170e2318ccb219102f1abb826c94a"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e6c5ca26b83b74f6438c10af99124c9fce3f7af92a05d164fd5ebaaeaa610ad"},
|
{file = "libcst-1.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:3ece08ba778b6eeea74d9c705e9af2d1b4e915e9bc6de67ad173b962e575fcc0"},
|
||||||
{file = "libcst-1.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:4de6f247dbeb34b1f701959fd210196bfd839798b8161b566343431bc9c4d5e1"},
|
{file = "libcst-1.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:5efd1bf6ee5840d1b0b82ec8e0b9c64f182fa5a7c8aad680fbd918c4fa3826e0"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:260e277139f10c087b56b1c7d26fafa9c02c9e53ea993e8ef36b4da5b06dcaaf"},
|
{file = "libcst-1.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08e9dca4ab6f8551794ce7ec146f86def6a82da41750cbed2c07551345fa10d3"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a0c1fc051a223be5bc1537f2d8a8dfd6f073184362a2ffb2576127c0dd2bd8b8"},
|
{file = "libcst-1.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8310521f2ccb79b5c4345750d475b88afa37bad930ab5554735f85ad5e3add30"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:484b734df8089ddc85c102482323693ff255cd5fd509703742bd3866a2c0254b"},
|
{file = "libcst-1.8.2-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:da2d8b008aff72acd5a4a588491abdda1b446f17508e700f26df9be80d8442ae"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:69d4c34b254dfebe00e0bfdee787341a40f351450a451c37d7fa09c2e04dd45b"},
|
{file = "libcst-1.8.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:be821d874ce8b26cbadd7277fa251a9b37f6d2326f8b5682b6fc8966b50a3a59"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:61ddc308e70514d515500a08a25a3d6c877a8a9f5811862ce010c917550a9dfa"},
|
{file = "libcst-1.8.2-cp313-cp313-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f74b0bc7378ad5afcf25ac9d0367b4dbba50f6f6468faa41f5dfddcf8bf9c0f8"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:381f2cda8daa7881700cabcb3689c16147e98964ae7be6b3a6e86a87a844f311"},
|
{file = "libcst-1.8.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b68ea4a6018abfea1f68d50f74de7d399172684c264eb09809023e2c8696fc23"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2f985f311062712a2ebb8b87a261c46182286abfed7125f4f95588e715c13007"},
|
{file = "libcst-1.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e264307ec49b2c72480422abafe80457f90b4e6e693b7ddf8a23d24b5c24001"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd84d29376980b5b8b937bff9d79a08bc5ae1cf7f87218abe8b89837c0553fa0"},
|
{file = "libcst-1.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5d5519962ce7c72d81888fb0c09e58e308ba4c376e76bcd853b48151063d6a8"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:6ab9b6e583342ce9c59a098b51865f436e641650a1db5b6e9e6fa03ba8fa8801"},
|
{file = "libcst-1.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:b62aa11d6b74ed5545e58ac613d3f63095e5fd0254b3e0d1168fda991b9a6b41"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:5f9d5c0154b4a55aca556e0703d4f008b76dea6f574df3bae20533b5da6be05e"},
|
{file = "libcst-1.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:9c2bd4ac288a9cdb7ffc3229a9ce8027a66a3fd3f2ab9e13da60f5fbfe91f3b2"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e04f1dd7c5c513c6c880e402040848af300dc48a47101de6b3aaff86089f620f"},
|
{file = "libcst-1.8.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:08a8c7d9922ca6eed24e2c13a3c552b3c186af8fc78e5d4820b58487d780ec19"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c7b16f11defcdf4583c8041574937c1a0608b18915d1b215d2eec2d8700cc96a"},
|
{file = "libcst-1.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bba7c2b5063e8ada5a5477f9fa0c01710645426b5a8628ec50d558542a0a292e"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:de0b2cbd7823a246bd6dae08cff9cf9313f8445ee2dd8d57c0de50b08f655469"},
|
{file = "libcst-1.8.2-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:d97c9fe13aacfbefded6861f5200dcb8e837da7391a9bdeb44ccb133705990af"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:357098cccd6bc7cbaf101096d4a51d96b8384f51dd017c614d99e15d7a00a452"},
|
{file = "libcst-1.8.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d2194ae959630aae4176a4b75bd320b3274c20bef2a5ca6b8d6fc96d3c608edf"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2e2573ac24030f359efbc79fad1e59fd7a1fd82682249b095ac7f4db53a92557"},
|
{file = "libcst-1.8.2-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0be639f5b2e1999a4b4a82a0f4633969f97336f052d0c131627983589af52f56"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ae4ba4e86576aef3af0be382f76eb92b8d9a5c5af228f48dac66bc670e3b1206"},
|
{file = "libcst-1.8.2-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6753e50904e05c27915933da41518ecd7a8ca4dd3602112ba44920c6e353a455"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a2b024830d9fe65ef17a3456efc75f70ddc5a76842a98ff45f3710b2f14aa8"},
|
{file = "libcst-1.8.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:706d07106af91c343150be86caeae1ea3851b74aa0730fcbbf8cd089e817f818"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ce501720337f386ac14b8ad845dcd751ac1d090f9a43854fe321a4500014ed4e"},
|
{file = "libcst-1.8.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd4310ea8ddc49cc8872e083737cf806299b17f93159a1f354d59aa08993e876"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-win_amd64.whl", hash = "sha256:cceca837ec5e53d0c6e70be079362b896dfca69bdb732ff696b1bf768de7b4ca"},
|
{file = "libcst-1.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:51bbafdd847529e8a16d1965814ed17831af61452ee31943c414cb23451de926"},
|
||||||
{file = "libcst-1.8.1-cp313-cp313t-win_arm64.whl", hash = "sha256:6b7a0abf9abe551cf5f5dd522985780a15c5d7d4bb3a16cefacc1694e8dded76"},
|
{file = "libcst-1.8.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f14f5045766646ed9e8826b959c6d07194788babed1e0ba08c94ea4f39517e3"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:db714da8dbd199d9a727e1f639f7a5e9ac1f8991498368920ff54ad15483e4c3"},
|
{file = "libcst-1.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f69582e24667715e3860d80d663f1caeb2398110077e23cc0a1e0066a851f5ab"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:20ec38154335ecda5aadc6dfc8c68562580e20be1233cf67e327eeb0817358f0"},
|
{file = "libcst-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ba85f9e6a7f37ef998168aa3fd28d263d7f83016bd306a4508a2394e5e793b4"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5e31e54db4e48a6014700555b075a1ecbaa4837f7e802c1c1630594f8f6965a4"},
|
{file = "libcst-1.8.2-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:43ccaa6c54daa1749cec53710c70d47150965574d4c6d4c4f2e3f87b9bf9f591"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c08fed14b94647bff650b608080e09c9857ff1890a08c20d01ec7c7482861893"},
|
{file = "libcst-1.8.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8a81d816c2088d2055112af5ecd82fdfbe8ff277600e94255e2639b07de10234"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:41795b3284eb4fb9d552dd4c1008ea7544782a5f5ec5632775500cd2bd1987db"},
|
{file = "libcst-1.8.2-cp39-cp39-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:449f9ff8a5025dcd5c8d4ad28f6c291de5de89e4c044b0bda96b45bef8999b75"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:9acbc95b1a8be68804c18938e75a146d73dbd63cb77520a0ccacbfd0b531eb10"},
|
{file = "libcst-1.8.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:36d5ab95f39f855521585b0e819dc2d4d1b2a4080bad04c2f3de1e387a5d2233"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1e80dc1854b4b9fcb875ca61ff31e56990e83bf5f04aaefd4ec307f823feb0b9"},
|
{file = "libcst-1.8.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:207575dec2dae722acf6ab39b4b361151c65f8f895fd37edf9d384f5541562e1"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6ef3787617c0981f302239413e808c904de74149596ddcfe20c9bbdf4a4dd2cf"},
|
{file = "libcst-1.8.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52a1067cf31d9e9e4be514b253bea6276f1531dd7de6ab0917df8ce5b468a820"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:f909600be6c4fabcc22e1e7313c6db2f66741f0eee657956d162bd6710617f05"},
|
{file = "libcst-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:59e8f611c977206eba294c296c2d29a1c1b1b88206cb97cd0d4847c1a3d923e7"},
|
||||||
{file = "libcst-1.8.1-cp39-cp39-win_arm64.whl", hash = "sha256:58f946e1614cf2bf965f808eb93ddf842c5bda33b2250f8f1f7b208f56d22134"},
|
{file = "libcst-1.8.2-cp39-cp39-win_arm64.whl", hash = "sha256:ae22376633cfa3db21c4eed2870d1c36b5419289975a41a45f34a085b2d9e6ea"},
|
||||||
{file = "libcst-1.8.1.tar.gz", hash = "sha256:423427819409a1d905017bbd51062bd0f1e4795c74c2f9f52a6b63dd67c282d2"},
|
{file = "libcst-1.8.2.tar.gz", hash = "sha256:66e82cedba95a6176194a817be4232c720312f8be6d2c8f3847f3317d95a0c7f"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "gsuid-core"
|
name = "gsuid-core"
|
||||||
version = "0.7.4"
|
version = "0.7.5"
|
||||||
description = "KimigaiiWuyi/GenshinUID 的核心部分,平台无关,便于移植到其他平台以及框架。"
|
description = "KimigaiiWuyi/GenshinUID 的核心部分,平台无关,便于移植到其他平台以及框架。"
|
||||||
authors = ["KimigaiiWuyi <444835641@qq.com>", "MingxuanGame <MingxuanGame@outlook.com>"]
|
authors = ["KimigaiiWuyi <444835641@qq.com>", "MingxuanGame <MingxuanGame@outlook.com>"]
|
||||||
license = "GPL-3.0-or-later"
|
license = "GPL-3.0-or-later"
|
||||||
@ -155,9 +155,10 @@ dependencies = [
|
|||||||
"pandas>=2.2.3",
|
"pandas>=2.2.3",
|
||||||
"betterproto>=2.0.0b7",
|
"betterproto>=2.0.0b7",
|
||||||
"structlog>=25.3.0",
|
"structlog>=25.3.0",
|
||||||
|
"rich>=14.0.0",
|
||||||
]
|
]
|
||||||
name = "gsuid-core"
|
name = "gsuid-core"
|
||||||
version = "0.7.4"
|
version = "0.7.5"
|
||||||
description = "KimigaiiWuyi/GenshinUID 的核心部分,平台无关,便于移植到其他平台以及框架。"
|
description = "KimigaiiWuyi/GenshinUID 的核心部分,平台无关,便于移植到其他平台以及框架。"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ aioboto3==12.4.0 ; python_version >= "3.10" and python_version < "4.0"
|
|||||||
aiobotocore[boto3]==2.12.3 ; python_version >= "3.10" and python_version < "4.0"
|
aiobotocore[boto3]==2.12.3 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aiofiles==24.1.0 ; python_version >= "3.10" and python_version < "4.0"
|
aiofiles==24.1.0 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aiohappyeyeballs==2.6.1 ; python_version >= "3.10" and python_version < "4.0"
|
aiohappyeyeballs==2.6.1 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aiohttp==3.12.12 ; python_version >= "3.10" and python_version < "4.0"
|
aiohttp==3.12.13 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aioitertools==0.12.0 ; python_version >= "3.10" and python_version < "4.0"
|
aioitertools==0.12.0 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aiosignal==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
|
aiosignal==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
aiosqlite==0.21.0 ; python_version >= "3.10" and python_version < "4.0"
|
aiosqlite==0.21.0 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
@ -19,7 +19,7 @@ betterproto==2.0.0b7 ; python_version >= "3.10" and python_version < "4.0"
|
|||||||
boto3==1.34.69 ; python_version >= "3.10" and python_version < "4.0"
|
boto3==1.34.69 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
botocore==1.34.69 ; python_version >= "3.10" and python_version < "4.0"
|
botocore==1.34.69 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
casbin==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
|
casbin==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
certifi==2025.4.26 ; python_version >= "3.10" and python_version < "4.0"
|
certifi==2025.6.15 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
|
click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0"
|
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
dnspython==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
|
dnspython==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user