mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
Compare commits
17 Commits
0.3.3-fix1
...
0.4.4
| Author | SHA1 | Date | |
|---|---|---|---|
| 2cfcba9b07 | |||
| 86adf2621a | |||
| 1219aeda8f | |||
| 0d78007262 | |||
| 5dbd01b15c | |||
|
|
2a5dd35087 | ||
|
|
564c6a8fba | ||
|
|
1576338383 | ||
| 8141b2fec7 | |||
|
|
720de49c83 | ||
|
|
f600060b9e | ||
|
|
a808bfb7f8 | ||
| e5354d39c9 | |||
| 9d37d05b24 | |||
| d7b6e3cb17 | |||
|
|
32d34c93d7 | ||
| 972f7e90d2 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
.idea
|
||||||
dist
|
dist
|
||||||
test*
|
test*
|
||||||
Untitled*
|
Untitled*
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from .processor import Processor
|
|||||||
|
|
||||||
IOBind = on_regex(pattern=r'^io绑定|^iobind', flags=I, permission=GROUP)
|
IOBind = on_regex(pattern=r'^io绑定|^iobind', flags=I, permission=GROUP)
|
||||||
IOStats = on_regex(pattern=r'^io查|^iostats', flags=I, permission=GROUP)
|
IOStats = on_regex(pattern=r'^io查|^iostats', flags=I, permission=GROUP)
|
||||||
|
IORank = on_regex(pattern=r'^io段位|^iorank', flags=I, permission=GROUP)
|
||||||
|
|
||||||
@IOBind.handle()
|
@IOBind.handle()
|
||||||
async def _(event: MessageEvent, matcher: Matcher):
|
async def _(event: MessageEvent, matcher: Matcher):
|
||||||
@@ -30,3 +30,11 @@ async def _(event: MessageEvent, matcher: Matcher):
|
|||||||
qq_number=event.sender.user_id
|
qq_number=event.sender.user_id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@IORank.handle()
|
||||||
|
async def _(event: MessageEvent, matcher: Matcher):
|
||||||
|
await matcher.finish(
|
||||||
|
await Processor.handle_rank(
|
||||||
|
message=event.raw_message
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import math
|
||||||
from asyncio import gather
|
from asyncio import gather
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
@@ -6,7 +7,8 @@ from nonebot.log import logger
|
|||||||
from ...utils.database import DataBase
|
from ...utils.database import DataBase
|
||||||
from ...utils.message_analyzer import (
|
from ...utils.message_analyzer import (
|
||||||
handle_bind_message,
|
handle_bind_message,
|
||||||
handle_stats_query_message
|
handle_rank_message,
|
||||||
|
handle_stats_query_message,
|
||||||
)
|
)
|
||||||
from .request import Request
|
from .request import Request
|
||||||
|
|
||||||
@@ -14,7 +16,7 @@ from .request import Request
|
|||||||
class Processor:
|
class Processor:
|
||||||
@classmethod
|
@classmethod
|
||||||
async def handle_bind(cls, message: str, qq_number: int | None) -> str:
|
async def handle_bind(cls, message: str, qq_number: int | None) -> str:
|
||||||
'''处理绑定消息'''
|
"""处理绑定消息"""
|
||||||
decoded_message = await handle_bind_message(message=message, game_type='IO')
|
decoded_message = await handle_bind_message(message=message, game_type='IO')
|
||||||
if decoded_message[0] is None:
|
if decoded_message[0] is None:
|
||||||
return decoded_message[1][0]
|
return decoded_message[1][0]
|
||||||
@@ -23,6 +25,12 @@ class Processor:
|
|||||||
if user_id_stats[0] is False:
|
if user_id_stats[0] is False:
|
||||||
return user_id_stats[1]
|
return user_id_stats[1]
|
||||||
user_id = decoded_message[1][1]
|
user_id = decoded_message[1][1]
|
||||||
|
if qq_number is None: # 理论上是不会有None出现的, ide快乐行属于是(
|
||||||
|
logger.error('获取QQ号失败')
|
||||||
|
return '获取QQ号失败'
|
||||||
|
return await DataBase.write_bind_info(
|
||||||
|
qq_number=qq_number, user=user_id, game_type='IO'
|
||||||
|
)
|
||||||
elif decoded_message[0] == 'Name':
|
elif decoded_message[0] == 'Name':
|
||||||
user_data = await cls.get_user_data(user_name=decoded_message[1][1])
|
user_data = await cls.get_user_data(user_name=decoded_message[1][1])
|
||||||
if user_data[0] is False:
|
if user_data[0] is False:
|
||||||
@@ -30,27 +38,109 @@ class Processor:
|
|||||||
if user_data[1] is False:
|
if user_data[1] is False:
|
||||||
return f'用户信息请求错误:\n{user_data[2]["error"]}'
|
return f'用户信息请求错误:\n{user_data[2]["error"]}'
|
||||||
user_id = await cls.get_user_id(user_data[2])
|
user_id = await cls.get_user_id(user_data[2])
|
||||||
if qq_number is None: # 理论上是不会有None出现的, ide快乐行属于是(
|
if qq_number is None: # 理论上是不会有None出现的, ide快乐行属于是(
|
||||||
logger.error('获取QQ号失败')
|
logger.error('获取QQ号失败')
|
||||||
return '获取QQ号失败'
|
return '获取QQ号失败'
|
||||||
return (
|
return await DataBase.write_bind_info(
|
||||||
await DataBase.write_bind_info(
|
qq_number=qq_number, user=user_id, game_type='IO'
|
||||||
qq_number=qq_number,
|
|
||||||
user=user_id,
|
|
||||||
game_type='IO'
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
logger.error('预期外行为, 请上报GitHub')
|
logger.error('预期外行为, 请上报GitHub')
|
||||||
return '出现预期外行为,请查看后台信息'
|
return '出现预期外行为, 请查看后台信息'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def handle_rank(cls, message: str):
|
||||||
|
query_rank = await handle_rank_message(message)
|
||||||
|
rank_info = await DataBase.query_rank_info_today(rank=query_rank.lower())
|
||||||
|
|
||||||
|
if rank_info is None:
|
||||||
|
ranks_percentiles = {
|
||||||
|
'x': 1,
|
||||||
|
'u': 5,
|
||||||
|
'ss': 11,
|
||||||
|
's+': 17,
|
||||||
|
's': 23,
|
||||||
|
's-': 30,
|
||||||
|
'a+': 38,
|
||||||
|
'a': 46,
|
||||||
|
'a-': 54,
|
||||||
|
'b+': 62,
|
||||||
|
'b': 70,
|
||||||
|
'b-': 78,
|
||||||
|
'c+': 84,
|
||||||
|
'c': 90,
|
||||||
|
'c-': 95,
|
||||||
|
'd+': 97.5,
|
||||||
|
'd': 100,
|
||||||
|
}
|
||||||
|
|
||||||
|
if query_rank.lower() not in (i for i in ranks_percentiles.keys()):
|
||||||
|
return '未知段位'
|
||||||
|
|
||||||
|
result = await Request.request(
|
||||||
|
'https://ch.tetr.io/api/users/lists/league/all'
|
||||||
|
)
|
||||||
|
users: list = result[2]['data']['users']
|
||||||
|
|
||||||
|
def avg(
|
||||||
|
rank_users: list, column: str, playercount: int | None = None
|
||||||
|
) -> float:
|
||||||
|
return sum(i['league'][column] for i in rank_users) / (
|
||||||
|
playercount or len(rank_users)
|
||||||
|
)
|
||||||
|
|
||||||
|
for rank, percentile in ranks_percentiles.items():
|
||||||
|
offset = math.floor((percentile / 100) * len(users)) - 1
|
||||||
|
tr = users[offset]['league']['rating']
|
||||||
|
|
||||||
|
rank_users = list(filter(lambda x: x['league']['rank'] == rank, users))
|
||||||
|
playercount = len(rank_users)
|
||||||
|
|
||||||
|
avg_apm = avg(rank_users, 'apm', playercount)
|
||||||
|
avg_pps = avg(rank_users, 'pps', playercount)
|
||||||
|
avg_vs = avg(rank_users, 'vs', playercount)
|
||||||
|
|
||||||
|
await DataBase.write_rank_info_today(
|
||||||
|
rank=rank,
|
||||||
|
trline=tr,
|
||||||
|
playercount=playercount,
|
||||||
|
avgapm=avg_apm,
|
||||||
|
avgpps=avg_pps,
|
||||||
|
avgvs=avg_vs,
|
||||||
|
)
|
||||||
|
|
||||||
|
return await Processor.handle_rank(message=message)
|
||||||
|
else:
|
||||||
|
avg_apm = round(rank_info[3], 2)
|
||||||
|
avg_pps = round(rank_info[4], 2)
|
||||||
|
avg_vs = round(rank_info[5], 2)
|
||||||
|
avg_lpm = round((avg_pps * 24), 2)
|
||||||
|
avg_apl = round((avg_apm / avg_lpm), 2)
|
||||||
|
avg_adpm = round((avg_vs * 0.6), 2)
|
||||||
|
avg_adpl = round((avg_adpm / avg_lpm), 2)
|
||||||
|
|
||||||
|
message = f'{query_rank.upper()} 段, 分数线 {round(rank_info[1], 2)} TR, {rank_info[2]} 名玩家'
|
||||||
|
message += f'\n对比昨日趋势: {rank_info[0]}'
|
||||||
|
message += '\n平均数据: '
|
||||||
|
message += f"\nL'PM: {avg_lpm} ( {avg_pps} pps )"
|
||||||
|
message += f'\nAPM: {avg_apm} ( x{avg_apl} )'
|
||||||
|
message += f'\nADPM: {avg_adpm} ( x{avg_adpl} ) ( {avg_vs}vs )'
|
||||||
|
message += '\n'
|
||||||
|
message += f'\n数据更新时间: {rank_info[6]}'
|
||||||
|
|
||||||
|
return message
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def handle_query(cls, message: str, qq_number: int | None):
|
async def handle_query(cls, message: str, qq_number: int | None):
|
||||||
'''处理查询消息'''
|
"""处理查询消息"""
|
||||||
decoded_message = await handle_stats_query_message(message=message, game_type='IO')
|
decoded_message = await handle_stats_query_message(
|
||||||
|
message=message, game_type='IO'
|
||||||
|
)
|
||||||
if decoded_message[0] is None:
|
if decoded_message[0] is None:
|
||||||
return decoded_message[1][0]
|
return decoded_message[1][0]
|
||||||
if decoded_message[0] == 'AT': # 在入口处判断是否@bot本身
|
if decoded_message[0] == 'AT': # 在入口处判断是否@bot本身
|
||||||
bind_info = await DataBase.query_bind_info(qq_number=decoded_message[1][1], game_type='IO')
|
bind_info = await DataBase.query_bind_info(
|
||||||
|
qq_number=decoded_message[1][1], game_type='IO'
|
||||||
|
)
|
||||||
if bind_info is None:
|
if bind_info is None:
|
||||||
return '未查询到绑定信息'
|
return '未查询到绑定信息'
|
||||||
return f'* 由于无法验证绑定信息, 不能保证查询到的用户为本人\n{await Processor.generate_message(user_id=bind_info)}'
|
return f'* 由于无法验证绑定信息, 不能保证查询到的用户为本人\n{await Processor.generate_message(user_id=bind_info)}'
|
||||||
@@ -58,7 +148,9 @@ class Processor:
|
|||||||
if qq_number is None:
|
if qq_number is None:
|
||||||
logger.error('获取QQ号失败')
|
logger.error('获取QQ号失败')
|
||||||
return '获取QQ号失败, 请联系bot主人'
|
return '获取QQ号失败, 请联系bot主人'
|
||||||
bind_info = await DataBase.query_bind_info(qq_number=qq_number, game_type='IO')
|
bind_info = await DataBase.query_bind_info(
|
||||||
|
qq_number=qq_number, game_type='IO'
|
||||||
|
)
|
||||||
if bind_info is None:
|
if bind_info is None:
|
||||||
return '未查询到绑定信息'
|
return '未查询到绑定信息'
|
||||||
return f'* 由于无法验证绑定信息, 不能保证查询到的用户为本人\n{await Processor.generate_message(user_id=bind_info)}'
|
return f'* 由于无法验证绑定信息, 不能保证查询到的用户为本人\n{await Processor.generate_message(user_id=bind_info)}'
|
||||||
@@ -69,11 +161,9 @@ class Processor:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_user_data(
|
async def get_user_data(
|
||||||
cls,
|
cls, user_name: str | None = None, user_id: str | None = None
|
||||||
user_name: str | None = None,
|
|
||||||
user_id: str | None = None
|
|
||||||
) -> tuple[bool, bool, dict[str, Any]]:
|
) -> tuple[bool, bool, dict[str, Any]]:
|
||||||
'''获取用户数据'''
|
"""获取用户数据"""
|
||||||
if user_name is not None and user_id is None:
|
if user_name is not None and user_id is None:
|
||||||
user_data_url = f'https://ch.tetr.io/api/users/{user_name}'
|
user_data_url = f'https://ch.tetr.io/api/users/{user_name}'
|
||||||
elif user_name is None and user_id is not None:
|
elif user_name is None and user_id is not None:
|
||||||
@@ -84,11 +174,9 @@ class Processor:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_solo_data(
|
async def get_solo_data(
|
||||||
cls,
|
cls, user_name: str | None = None, user_id: str | None = None
|
||||||
user_name: str | None = None,
|
|
||||||
user_id: str | None = None
|
|
||||||
) -> tuple[bool, bool, dict[str, Any]]:
|
) -> tuple[bool, bool, dict[str, Any]]:
|
||||||
'''获取Solo数据'''
|
"""获取Solo数据"""
|
||||||
if user_name is not None and user_id is None:
|
if user_name is not None and user_id is None:
|
||||||
user_solo_url = f'https://ch.tetr.io/api/users/{user_name}/records'
|
user_solo_url = f'https://ch.tetr.io/api/users/{user_name}/records'
|
||||||
elif user_name is None and user_id is not None:
|
elif user_name is None and user_id is not None:
|
||||||
@@ -99,12 +187,12 @@ class Processor:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_user_id(cls, user_data: dict) -> str:
|
async def get_user_id(cls, user_data: dict) -> str:
|
||||||
'''获取用户ID'''
|
"""获取用户ID"""
|
||||||
return user_data['data']['user']['_id']
|
return user_data['data']['user']['_id']
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def check_user_id(cls, user_id: str) -> tuple[bool, str]:
|
async def check_user_id(cls, user_id: str) -> tuple[bool, str]:
|
||||||
'''检查用户ID是否有效 返回值为tuple[bool, message]'''
|
"""检查用户ID是否有效 返回值为tuple[bool, message]"""
|
||||||
user_data = await cls.get_user_data(user_id=user_id)
|
user_data = await cls.get_user_data(user_id=user_id)
|
||||||
if user_data[0] is False:
|
if user_data[0] is False:
|
||||||
return False, '用户信息请求失败'
|
return False, '用户信息请求失败'
|
||||||
@@ -112,18 +200,19 @@ class Processor:
|
|||||||
return False, f'用户信息请求错误:\n{user_data[2]["error"]}'
|
return False, f'用户信息请求错误:\n{user_data[2]["error"]}'
|
||||||
if user_id == user_data[2]['data']['user']['_id']:
|
if user_id == user_data[2]['data']['user']['_id']:
|
||||||
return True, ''
|
return True, ''
|
||||||
raise ValueError('服务器返回的userID和用户提供的不一致, 这种情况理论上不应该发生, 以防万一还是写一下(x')
|
raise ValueError('服务器返回的userID和用户提供的不一致, 这种情况理论上不应该发生, 以防万一还是写一下(x')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_league_stats(cls, user_data: dict) -> dict[str, Any]:
|
async def get_league_stats(cls, user_data: dict) -> dict[str, Any]:
|
||||||
'''获取排位统计数据'''
|
"""获取排位统计数据"""
|
||||||
league = user_data['data']['user']['league']
|
league = user_data['data']['user']['league']
|
||||||
league_stats: dict[str, Any] = {}
|
league_stats: dict[str, Any] = {}
|
||||||
if league['gamesplayed'] != 0:
|
if league['gamesplayed'] != 0:
|
||||||
league_stats['PPS'] = league['pps']
|
league_stats['PPS'] = league['pps']
|
||||||
league_stats['APM'] = league['apm']
|
league_stats['APM'] = league['apm']
|
||||||
league_stats['VS'] = 0 if league['vs'] is None else league['vs']
|
league_stats['VS'] = 0 if league['vs'] is None else league['vs']
|
||||||
league_stats['Rank'] = 'Z' if league['rank'] == 'z' else league['rank'].upper(
|
league_stats['Rank'] = (
|
||||||
|
'Z' if league['rank'] == 'z' else league['rank'].upper()
|
||||||
)
|
)
|
||||||
if league['rating'] == -1:
|
if league['rating'] == -1:
|
||||||
league_stats['Rank'] = None
|
league_stats['Rank'] = None
|
||||||
@@ -133,28 +222,29 @@ class Processor:
|
|||||||
league_stats['RD'] = round(league['rd'], 2)
|
league_stats['RD'] = round(league['rd'], 2)
|
||||||
league_stats['Standing'] = league['standing']
|
league_stats['Standing'] = league['standing']
|
||||||
league_stats['LPM'] = round((league['pps'] * 24), 2)
|
league_stats['LPM'] = round((league['pps'] * 24), 2)
|
||||||
league_stats['APL'] = round(
|
league_stats['APL'] = round((league_stats['APM'] / league_stats['LPM']), 2)
|
||||||
(league_stats['APM'] / league_stats['LPM']), 2)
|
|
||||||
league_stats['ADPM'] = round((league_stats['VS'] * 0.6), 2)
|
league_stats['ADPM'] = round((league_stats['VS'] * 0.6), 2)
|
||||||
league_stats['ADPL'] = round(
|
league_stats['ADPL'] = round(
|
||||||
(league_stats['ADPM'] / league_stats['LPM']), 2)
|
(league_stats['ADPM'] / league_stats['LPM']), 2
|
||||||
|
)
|
||||||
return league_stats
|
return league_stats
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_sprint_stats(cls, solo_data: dict) -> dict[str, Any]:
|
async def get_sprint_stats(cls, solo_data: dict) -> dict[str, Any]:
|
||||||
'''获取40L统计数据'''
|
"""获取40L统计数据"""
|
||||||
sprint_stats = {}
|
sprint_stats = {}
|
||||||
solo = solo_data['data']['records']['40l']
|
solo = solo_data['data']['records']['40l']
|
||||||
if solo['record'] is not None:
|
if solo['record'] is not None:
|
||||||
sprint_stats['Time'] = round(
|
sprint_stats['Time'] = round(
|
||||||
solo['record']['endcontext']['finalTime'] / 1000, 2)
|
solo['record']['endcontext']['finalTime'] / 1000, 2
|
||||||
|
)
|
||||||
if solo['rank'] is not None:
|
if solo['rank'] is not None:
|
||||||
sprint_stats['Rank'] = solo['rank']
|
sprint_stats['Rank'] = solo['rank']
|
||||||
return sprint_stats
|
return sprint_stats
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_blitz_stats(cls, solo_data: dict) -> dict[str, Any]:
|
async def get_blitz_stats(cls, solo_data: dict) -> dict[str, Any]:
|
||||||
'''获取Blitz统计数据'''
|
"""获取Blitz统计数据"""
|
||||||
blitz_stats = {}
|
blitz_stats = {}
|
||||||
blitz = solo_data['data']['records']['blitz']
|
blitz = solo_data['data']['records']['blitz']
|
||||||
if blitz['record'] is not None:
|
if blitz['record'] is not None:
|
||||||
@@ -165,14 +255,12 @@ class Processor:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def generate_message(
|
async def generate_message(
|
||||||
cls,
|
cls, user_name: str | None = None, user_id: str | None = None
|
||||||
user_name: str | None = None,
|
|
||||||
user_id: str | None = None
|
|
||||||
) -> str:
|
) -> str:
|
||||||
'''生成消息'''
|
"""生成消息"""
|
||||||
user_data, solo_data = await gather(
|
user_data, solo_data = await gather(
|
||||||
cls.get_user_data(user_name=user_name, user_id=user_id),
|
cls.get_user_data(user_name=user_name, user_id=user_id),
|
||||||
cls.get_solo_data(user_name=user_name, user_id=user_id)
|
cls.get_solo_data(user_name=user_name, user_id=user_id),
|
||||||
)
|
)
|
||||||
if user_data[0] is False:
|
if user_data[0] is False:
|
||||||
return '用户信息请求失败'
|
return '用户信息请求失败'
|
||||||
@@ -191,18 +279,19 @@ class Processor:
|
|||||||
message += f'用户 {user_name} 暂无段位, {league_stats["Rating"]} TR'
|
message += f'用户 {user_name} 暂无段位, {league_stats["Rating"]} TR'
|
||||||
else:
|
else:
|
||||||
message += f'{league_stats["Rank"]} 段用户 {user_name} {league_stats["Rating"]} TR (#{league_stats["Standing"]})'
|
message += f'{league_stats["Rank"]} 段用户 {user_name} {league_stats["Rating"]} TR (#{league_stats["Standing"]})'
|
||||||
message += f', 段位分 {league_stats["Glicko"]}±{league_stats["RD"]}, 最近十场的数据:'
|
message += (
|
||||||
|
f', 段位分 {league_stats["Glicko"]}±{league_stats["RD"]}, 最近十场的数据:'
|
||||||
|
)
|
||||||
message += f'\nL\'PM: {league_stats["LPM"]} ( {league_stats["PPS"]} pps )'
|
message += f'\nL\'PM: {league_stats["LPM"]} ( {league_stats["PPS"]} pps )'
|
||||||
message += f'\nAPM: {league_stats["APM"]} ( x{league_stats["APL"]} )'
|
message += f'\nAPM: {league_stats["APM"]} ( x{league_stats["APL"]} )'
|
||||||
if league_stats["VS"] != 0:
|
if league_stats['VS'] != 0:
|
||||||
message += f'\nADPM: {league_stats["ADPM"]} ( x{league_stats["ADPL"]} ) ( {league_stats["VS"]}vs )'
|
message += f'\nADPM: {league_stats["ADPM"]} ( x{league_stats["ADPL"]} ) ( {league_stats["VS"]}vs )'
|
||||||
if solo_data[0] is False:
|
if solo_data[0] is False:
|
||||||
return f'{message}\nSolo统计数据请求失败'
|
return f'{message}\nSolo统计数据请求失败'
|
||||||
if solo_data[1] is False:
|
if solo_data[1] is False:
|
||||||
return f'{message}\nSolo统计数据请求错误:\n{solo_data[2]["error"]}'
|
return f'{message}\nSolo统计数据请求错误:\n{solo_data[2]["error"]}'
|
||||||
sprint_stats, blitz_stats = await gather(
|
sprint_stats, blitz_stats = await gather(
|
||||||
cls.get_sprint_stats(solo_data[2]),
|
cls.get_sprint_stats(solo_data[2]), cls.get_blitz_stats(solo_data[2])
|
||||||
cls.get_blitz_stats(solo_data[2])
|
|
||||||
)
|
)
|
||||||
message += f'\n40L: {sprint_stats["Time"]}s' if 'Time' in sprint_stats else ''
|
message += f'\n40L: {sprint_stats["Time"]}s' if 'Time' in sprint_stats else ''
|
||||||
message += f' ( #{sprint_stats["Rank"]} )' if 'Rank' in sprint_stats else ''
|
message += f' ( #{sprint_stats["Rank"]} )' if 'Rank' in sprint_stats else ''
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import aiohttp
|
from httpx import AsyncClient, HTTPError
|
||||||
from nonebot import get_driver
|
from nonebot import get_driver
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from playwright.async_api import Browser, Response, async_playwright
|
from playwright.async_api import Browser, Response, async_playwright
|
||||||
@@ -27,26 +27,27 @@ async def _():
|
|||||||
|
|
||||||
|
|
||||||
class Request:
|
class Request:
|
||||||
'''网络请求相关类'''
|
"""网络请求相关类"""
|
||||||
|
|
||||||
_browser: Browser | None = None
|
_browser: Browser | None = None
|
||||||
_headers: dict | None = None
|
_headers: dict | None = None
|
||||||
_cookies: dict | None = None
|
_cookies: dict | None = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def _init_playwright(cls) -> Browser:
|
async def _init_playwright(cls) -> Browser:
|
||||||
'''初始化playwright'''
|
"""初始化playwright"""
|
||||||
playwright = await async_playwright().start()
|
playwright = await async_playwright().start()
|
||||||
cls._browser = await playwright.firefox.launch()
|
cls._browser = await playwright.firefox.launch()
|
||||||
return cls._browser
|
return cls._browser
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def _get_browser(cls) -> Browser:
|
async def _get_browser(cls) -> Browser:
|
||||||
'''获取浏览器对象'''
|
"""获取浏览器对象"""
|
||||||
return cls._browser or await cls._init_playwright()
|
return cls._browser or await cls._init_playwright()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def _anti_cloudflare(cls, url: str) -> tuple[bool, bool, dict[str, Any]]:
|
async def _anti_cloudflare(cls, url: str) -> tuple[bool, bool, dict[str, Any]]:
|
||||||
'''用firefox硬穿五秒盾'''
|
"""用firefox硬穿五秒盾"""
|
||||||
browser = await cls._get_browser()
|
browser = await cls._get_browser()
|
||||||
context = await browser.new_context()
|
context = await browser.new_context()
|
||||||
page = await context.new_page()
|
page = await context.new_page()
|
||||||
@@ -58,7 +59,7 @@ class Request:
|
|||||||
if text is None:
|
if text is None:
|
||||||
await page.wait_for_timeout(1000)
|
await page.wait_for_timeout(1000)
|
||||||
continue
|
continue
|
||||||
if await page.title() == 'Please Wait... | Cloudflare':
|
if await page.title() == "Please Wait... | Cloudflare":
|
||||||
# TODO 有无人来做一个过验证码(
|
# TODO 有无人来做一个过验证码(
|
||||||
break
|
break
|
||||||
try:
|
try:
|
||||||
@@ -69,40 +70,35 @@ class Request:
|
|||||||
assert isinstance(response, Response)
|
assert isinstance(response, Response)
|
||||||
cls._headers = await response.request.all_headers()
|
cls._headers = await response.request.all_headers()
|
||||||
try:
|
try:
|
||||||
cls._cookies = {i['name']: i['value'] for i in await context.cookies()}
|
cls._cookies = {
|
||||||
|
i["name"]: i["value"] for i in await context.cookies()
|
||||||
|
}
|
||||||
except KeyError:
|
except KeyError:
|
||||||
cls._cookies = None
|
cls._cookies = None
|
||||||
await page.close()
|
await page.close()
|
||||||
await context.close()
|
await context.close()
|
||||||
return True, data['success'], data
|
return True, data["success"], data
|
||||||
await page.close()
|
await page.close()
|
||||||
await context.close()
|
await context.close()
|
||||||
return True, False, {'error': '绕过五秒盾失败'}
|
return True, False, {"error": "绕过五秒盾失败"}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def init_cache(cls) -> None:
|
async def init_cache(cls) -> None:
|
||||||
'''初始化缓存文件'''
|
"""初始化缓存文件"""
|
||||||
if not os.path.exists(os.path.dirname(config.cache_path)):
|
if not os.path.exists(os.path.dirname(config.cache_path)):
|
||||||
os.makedirs(os.path.dirname(config.cache_path))
|
os.makedirs(os.path.dirname(config.cache_path))
|
||||||
if not os.path.exists(config.cache_path):
|
if not os.path.exists(config.cache_path):
|
||||||
with open(file=config.cache_path, mode='w', encoding='UTF-8') as file:
|
with open(file=config.cache_path, mode="w", encoding="UTF-8") as file:
|
||||||
file.write(
|
file.write(dumps({"headers": cls._headers, "cookies": cls._cookies}))
|
||||||
dumps(
|
|
||||||
{
|
|
||||||
'headers': cls._headers,
|
|
||||||
'cookies': cls._cookies
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def read_cache(cls) -> None:
|
async def read_cache(cls) -> None:
|
||||||
'''读取缓存文件'''
|
"""读取缓存文件"""
|
||||||
try:
|
try:
|
||||||
with open(file=config.cache_path, mode='r', encoding='UTF-8') as file:
|
with open(file=config.cache_path, mode="r", encoding="UTF-8") as file:
|
||||||
json = loads(file.read())
|
json = loads(file.read())
|
||||||
cls._headers = json['headers']
|
cls._headers = json["headers"]
|
||||||
cls._cookies = json['cookies']
|
cls._cookies = json["cookies"]
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
await cls.init_cache()
|
await cls.init_cache()
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
@@ -114,17 +110,10 @@ class Request:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def write_cache(cls) -> None:
|
async def write_cache(cls) -> None:
|
||||||
'''写入缓存文件'''
|
"""写入缓存文件"""
|
||||||
try:
|
try:
|
||||||
with open(file=config.cache_path, mode='r+', encoding='UTF-8') as file:
|
with open(file=config.cache_path, mode="r+", encoding="UTF-8") as file:
|
||||||
file.write(
|
file.write(dumps({"headers": cls._headers, "cookies": cls._cookies}))
|
||||||
dumps(
|
|
||||||
{
|
|
||||||
'headers': cls._headers,
|
|
||||||
'cookies': cls._cookies
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
await cls.init_cache()
|
await cls.init_cache()
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
@@ -136,20 +125,20 @@ class Request:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def request(cls, url: str) -> tuple[bool, bool, dict[str, Any]]:
|
async def request(cls, url: str) -> tuple[bool, bool, dict[str, Any]]:
|
||||||
'''请求api'''
|
"""请求api"""
|
||||||
try:
|
try:
|
||||||
async with aiohttp.ClientSession(cookies=cls._cookies) as session:
|
async with AsyncClient(cookies=cls._cookies) as session:
|
||||||
async with session.get(url, headers=cls._headers) as resp:
|
response = await session.get(url, headers=cls._headers)
|
||||||
data = await resp.json()
|
data = loads(response.content)
|
||||||
return True, data['success'], data
|
return True, data["success"], data
|
||||||
except aiohttp.client_exceptions.ClientConnectorError as error: # type: ignore
|
except HTTPError as error:
|
||||||
logger.error(f'请求错误\n{error}')
|
logger.error(f"请求错误\n{error}")
|
||||||
return False, False, {}
|
return False, False, {}
|
||||||
except aiohttp.client_exceptions.ContentTypeError: # type: ignore
|
except JSONDecodeError:
|
||||||
return await cls._anti_cloudflare(url)
|
return await cls._anti_cloudflare(url)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def close_browser(cls) -> None:
|
async def close_browser(cls) -> None:
|
||||||
'''关闭浏览器对象'''
|
"""关闭浏览器对象"""
|
||||||
if isinstance(cls._browser, Browser):
|
if isinstance(cls._browser, Browser):
|
||||||
await cls._browser.close()
|
await cls._browser.close()
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import datetime
|
||||||
import os
|
import os
|
||||||
from asyncio import gather
|
from asyncio import gather
|
||||||
from sqlite3 import Connection, connect
|
from sqlite3 import Connection, connect
|
||||||
@@ -39,10 +40,62 @@ class DataBase():
|
|||||||
cursor.execute('''CREATE TABLE IF NOT EXISTS TOPBIND
|
cursor.execute('''CREATE TABLE IF NOT EXISTS TOPBIND
|
||||||
(QQ INTEGER NOT NULL,
|
(QQ INTEGER NOT NULL,
|
||||||
USER TEXT NOT NULL)''')
|
USER TEXT NOT NULL)''')
|
||||||
|
cursor.execute('''CREATE TABLE IF NOT EXISTS IORANK
|
||||||
|
(RANK VARCHAR(2) NOT NULL,
|
||||||
|
TRENDING CHAR(1) NOT NULL,
|
||||||
|
TRLINE FLOAT NOT NULL,
|
||||||
|
PLAYERCOUNT INTEGER NOT NULL,
|
||||||
|
AVGAPM FLOAT NOT NULL,
|
||||||
|
AVGPPS FLOAT NOT NULL,
|
||||||
|
ARGVS FLOAT NOT NULL,
|
||||||
|
DATE TEXT NOT NULL)''')
|
||||||
cls._db.commit()
|
cls._db.commit()
|
||||||
logger.info('数据库初始化完成')
|
logger.info('数据库初始化完成')
|
||||||
return cls._db
|
return cls._db
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def query_rank_info_today(cls, rank: str) -> list | None:
|
||||||
|
'''查询段位信息'''
|
||||||
|
db = await cls._get_db()
|
||||||
|
cursor = db.cursor()
|
||||||
|
cursor.execute('''SELECT TRENDING, TRLINE, PLAYERCOUNT, AVGAPM, AVGPPS, ARGVS, DATE
|
||||||
|
FROM IORANK
|
||||||
|
WHERE RANK = ? AND DATE = ?''', (rank, datetime.date.today()))
|
||||||
|
result = cursor.fetchone()
|
||||||
|
|
||||||
|
if result is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return list(result)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def write_rank_info_today(cls, rank: str, trline: int, playercount: int, avgapm: float, avgpps: float, avgvs: float):
|
||||||
|
'''写入段位信息'''
|
||||||
|
|
||||||
|
db = await cls._get_db()
|
||||||
|
cursor = db.cursor()
|
||||||
|
cursor.execute('''SELECT TRLINE
|
||||||
|
FROM IORANK
|
||||||
|
WHERE RANK = ? AND DATE = ?''', (rank, datetime.date.today() - datetime.timedelta(days=1)))
|
||||||
|
|
||||||
|
result = cursor.fetchone()
|
||||||
|
|
||||||
|
if result is None:
|
||||||
|
trending = '?'
|
||||||
|
elif trline > result[0]:
|
||||||
|
trending = '↑'
|
||||||
|
elif trline == result[0]:
|
||||||
|
trending = '-'
|
||||||
|
elif trline < result[0]:
|
||||||
|
trending = '↓'
|
||||||
|
|
||||||
|
cursor.execute('''INSERT INTO IORANK
|
||||||
|
(RANK, TRENDING, TRLINE, PLAYERCOUNT, AVGAPM, AVGPPS, ARGVS, DATE)
|
||||||
|
VALUES (?,?,?,?,?,?,?,?)''',
|
||||||
|
(rank, trending, trline, playercount, avgapm, avgpps, avgvs, datetime.date.today()))
|
||||||
|
|
||||||
|
db.commit()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def _get_db(cls) -> Connection:
|
async def _get_db(cls) -> Connection:
|
||||||
'''获取数据库对象'''
|
'''获取数据库对象'''
|
||||||
|
|||||||
@@ -53,6 +53,19 @@ async def handle_stats_query_message(message: str, game_type: str) -> tuple[str
|
|||||||
return await check_name(message, game_type)
|
return await check_name(message, game_type)
|
||||||
|
|
||||||
|
|
||||||
|
async def handle_rank_message(message: str) -> str:
|
||||||
|
_cmd_aliases = ['io段位', 'iorank']
|
||||||
|
# 剔除命令前缀
|
||||||
|
for i in _cmd_aliases:
|
||||||
|
if match(rf'(?i){i}', message):
|
||||||
|
message = sub(rf'(?i){i}', '', message)
|
||||||
|
message = message.strip()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise ValueError('预期外行为, 请上报GitHub')
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
async def check_name(name: str, game_type: str) -> tuple[str | None, tuple]:
|
async def check_name(name: str, game_type: str) -> tuple[str | None, tuple]:
|
||||||
'''返回值为tuple[gameType, tuple[message, user]]'''
|
'''返回值为tuple[gameType, tuple[message, user]]'''
|
||||||
if game_type == 'IO':
|
if game_type == 'IO':
|
||||||
|
|||||||
320
poetry.lock
generated
320
poetry.lock
generated
@@ -1,107 +1,106 @@
|
|||||||
# This file is automatically @generated by Poetry and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aiohttp"
|
name = "aiohttp"
|
||||||
version = "3.8.3"
|
version = "3.8.5"
|
||||||
description = "Async http client/server framework (asyncio)"
|
description = "Async http client/server framework (asyncio)"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ba71c9b4dcbb16212f334126cc3d8beb6af377f6703d9dc2d9fb3874fd667ee9"},
|
{file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d24b8bb40d5c61ef2d9b6a8f4528c2f17f1c5d2d31fed62ec860f6006142e83e"},
|
{file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f88df3a83cf9df566f171adba39d5bd52814ac0b94778d2448652fc77f9eb491"},
|
{file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97decbb3372d4b69e4d4c8117f44632551c692bb1361b356a02b97b69e18a62"},
|
{file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:309aa21c1d54b8ef0723181d430347d7452daaff93e8e2363db8e75c72c2fb2d"},
|
{file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad5383a67514e8e76906a06741febd9126fc7c7ff0f599d6fcce3e82b80d026f"},
|
{file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20acae4f268317bb975671e375493dbdbc67cddb5f6c71eebdb85b34444ac46b"},
|
{file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05a3c31c6d7cd08c149e50dc7aa2568317f5844acd745621983380597f027a18"},
|
{file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6f76310355e9fae637c3162936e9504b4767d5c52ca268331e2756e54fd4ca5"},
|
{file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:256deb4b29fe5e47893fa32e1de2d73c3afe7407738bd3c63829874661d4822d"},
|
{file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5c59fcd80b9049b49acd29bd3598cada4afc8d8d69bd4160cd613246912535d7"},
|
{file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:059a91e88f2c00fe40aed9031b3606c3f311414f86a90d696dd982e7aec48142"},
|
{file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2feebbb6074cdbd1ac276dbd737b40e890a1361b3cc30b74ac2f5e24aab41f7b"},
|
{file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-win32.whl", hash = "sha256:5bf651afd22d5f0c4be16cf39d0482ea494f5c88f03e75e5fef3a85177fecdeb"},
|
{file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"},
|
||||||
{file = "aiohttp-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:653acc3880459f82a65e27bd6526e47ddf19e643457d36a2250b85b41a564715"},
|
{file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:86fc24e58ecb32aee09f864cb11bb91bc4c1086615001647dbfc4dc8c32f4008"},
|
{file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75e14eac916f024305db517e00a9252714fce0abcb10ad327fb6dcdc0d060f1d"},
|
{file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d1fde0f44029e02d02d3993ad55ce93ead9bb9b15c6b7ccd580f90bd7e3de476"},
|
{file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab94426ddb1ecc6a0b601d832d5d9d421820989b8caa929114811369673235c"},
|
{file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89d2e02167fa95172c017732ed7725bc8523c598757f08d13c5acca308e1a061"},
|
{file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02f9a2c72fc95d59b881cf38a4b2be9381b9527f9d328771e90f72ac76f31ad8"},
|
{file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7149272fb5834fc186328e2c1fa01dda3e1fa940ce18fded6d412e8f2cf76d"},
|
{file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:512bd5ab136b8dc0ffe3fdf2dfb0c4b4f49c8577f6cae55dca862cd37a4564e2"},
|
{file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7018ecc5fe97027214556afbc7c502fbd718d0740e87eb1217b17efd05b3d276"},
|
{file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88c70ed9da9963d5496d38320160e8eb7e5f1886f9290475a881db12f351ab5d"},
|
{file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:da22885266bbfb3f78218dc40205fed2671909fbd0720aedba39b4515c038091"},
|
{file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:e65bc19919c910127c06759a63747ebe14f386cda573d95bcc62b427ca1afc73"},
|
{file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:08c78317e950e0762c2983f4dd58dc5e6c9ff75c8a0efeae299d363d439c8e34"},
|
{file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-win32.whl", hash = "sha256:45d88b016c849d74ebc6f2b6e8bc17cabf26e7e40c0661ddd8fae4c00f015697"},
|
{file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"},
|
||||||
{file = "aiohttp-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:96372fc29471646b9b106ee918c8eeb4cca423fcbf9a34daa1b93767a88a2290"},
|
{file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c971bf3786b5fad82ce5ad570dc6ee420f5b12527157929e830f51c55dc8af77"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff25f48fc8e623d95eca0670b8cc1469a83783c924a602e0fbd47363bb54aaca"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e381581b37db1db7597b62a2e6b8b57c3deec95d93b6d6407c5b61ddc98aca6d"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db19d60d846283ee275d0416e2a23493f4e6b6028825b51290ac05afc87a6f97"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25892c92bee6d9449ffac82c2fe257f3a6f297792cdb18ad784737d61e7a9a85"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398701865e7a9565d49189f6c90868efaca21be65c725fc87fc305906be915da"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4a4fbc769ea9b6bd97f4ad0b430a6807f92f0e5eb020f1e42ece59f3ecfc4585"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b29bfd650ed8e148f9c515474a6ef0ba1090b7a8faeee26b74a8ff3b33617502"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e56b9cafcd6531bab5d9b2e890bb4937f4165109fe98e2b98ef0dcfcb06ee9d"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ec40170327d4a404b0d91855d41bfe1fe4b699222b2b93e3d833a27330a87a6d"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2df5f139233060578d8c2c975128fb231a89ca0a462b35d4b5fcf7c501ebdbe1"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-win32.whl", hash = "sha256:f973157ffeab5459eefe7b97a804987876dd0a55570b8fa56b4e1954bf11329b"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"},
|
||||||
{file = "aiohttp-3.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:437399385f2abcd634865705bdc180c8314124b98299d54fe1d4c8990f2f9494"},
|
{file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09e28f572b21642128ef31f4e8372adb6888846f32fecb288c8b0457597ba61a"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f3553510abdbec67c043ca85727396ceed1272eef029b050677046d3387be8d"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e168a7560b7c61342ae0412997b069753f27ac4862ec7867eff74f0fe4ea2ad9"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db4c979b0b3e0fa7e9e69ecd11b2b3174c6963cebadeecfb7ad24532ffcdd11a"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e164e0a98e92d06da343d17d4e9c4da4654f4a4588a20d6c73548a29f176abe2"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a78079d9a39ca9ca99a8b0ac2fdc0c4d25fc80c8a8a82e5c8211509c523363"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21b30885a63c3f4ff5b77a5d6caf008b037cb521a5f33eab445dc566f6d092cc"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4b0f30372cef3fdc262f33d06e7b411cd59058ce9174ef159ad938c4a34a89da"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:8135fa153a20d82ffb64f70a1b5c2738684afa197839b34cc3e3c72fa88d302c"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ad61a9639792fd790523ba072c0555cd6be5a0baf03a49a5dd8cfcf20d56df48"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978b046ca728073070e9abc074b6299ebf3501e8dee5e26efacb13cec2b2dea0"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-win32.whl", hash = "sha256:0d2c6d8c6872df4a6ec37d2ede71eff62395b9e337b4e18efd2177de883a5033"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"},
|
||||||
{file = "aiohttp-3.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:21d69797eb951f155026651f7e9362877334508d39c2fc37bd04ff55b2007091"},
|
{file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ca9af5f8f5812d475c5259393f52d712f6d5f0d7fdad9acdb1107dd9e3cb7eb"},
|
{file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d90043c1882067f1bd26196d5d2db9aa6d268def3293ed5fb317e13c9413ea4"},
|
{file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d737fc67b9a970f3234754974531dc9afeea11c70791dcb7db53b0cf81b79784"},
|
{file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf909ea0a3fc9596e40d55d8000702a85e27fd578ff41a5500f68f20fd32e6c"},
|
{file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5835f258ca9f7c455493a57ee707b76d2d9634d84d5d7f62e77be984ea80b849"},
|
{file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da37dcfbf4b7f45d80ee386a5f81122501ec75672f475da34784196690762f4b"},
|
{file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f44875f2804bc0511a69ce44a9595d5944837a62caecc8490bbdb0e18b1342"},
|
{file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:527b3b87b24844ea7865284aabfab08eb0faf599b385b03c2aa91fc6edd6e4b6"},
|
{file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5ba88df9aa5e2f806650fcbeedbe4f6e8736e92fc0e73b0400538fd25a4dd96"},
|
{file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e7b8813be97cab8cb52b1375f41f8e6804f6507fe4660152e8ca5c48f0436017"},
|
{file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2dea10edfa1a54098703cb7acaa665c07b4e7568472a47f4e64e6319d3821ccf"},
|
{file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:713d22cd9643ba9025d33c4af43943c7a1eb8547729228de18d3e02e278472b6"},
|
{file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2d252771fc85e0cf8da0b823157962d70639e63cb9b578b1dec9868dd1f4f937"},
|
{file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-win32.whl", hash = "sha256:66bd5f950344fb2b3dbdd421aaa4e84f4411a1a13fca3aeb2bcbe667f80c9f76"},
|
{file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"},
|
||||||
{file = "aiohttp-3.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:84b14f36e85295fe69c6b9789b51a0903b774046d5f7df538176516c3e422446"},
|
{file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c121ba0b1ec2b44b73e3a8a171c4f999b33929cd2397124a8c7fcfc8cd9e06"},
|
{file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d6aaa4e7155afaf994d7924eb290abbe81a6905b303d8cb61310a2aba1c68ba"},
|
{file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43046a319664a04b146f81b40e1545d4c8ac7b7dd04c47e40bf09f65f2437346"},
|
{file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599418aaaf88a6d02a8c515e656f6faf3d10618d3dd95866eb4436520096c84b"},
|
{file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a2964319d359f494f16011e23434f6f8ef0434acd3cf154a6b7bec511e2fb7"},
|
{file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73a4131962e6d91109bca6536416aa067cf6c4efb871975df734f8d2fd821b37"},
|
{file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598adde339d2cf7d67beaccda3f2ce7c57b3b412702f29c946708f69cf8222aa"},
|
{file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75880ed07be39beff1881d81e4a907cafb802f306efd6d2d15f2b3c69935f6fb"},
|
{file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0239da9fbafd9ff82fd67c16704a7d1bccf0d107a300e790587ad05547681c8"},
|
{file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4e3a23ec214e95c9fe85a58470b660efe6534b83e6cbe38b3ed52b053d7cb6ad"},
|
{file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:47841407cc89a4b80b0c52276f3cc8138bbbfba4b179ee3acbd7d77ae33f7ac4"},
|
{file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:54d107c89a3ebcd13228278d68f1436d3f33f2dd2af5415e3feaeb1156e1a62c"},
|
{file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c37c5cce780349d4d51739ae682dec63573847a2a8dcb44381b174c3d9c8d403"},
|
{file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-win32.whl", hash = "sha256:f178d2aadf0166be4df834c4953da2d7eef24719e8aec9a65289483eeea9d618"},
|
{file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"},
|
||||||
{file = "aiohttp-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:88e5be56c231981428f4f506c68b6a46fa25c4123a2e86d156c58a8369d31ab7"},
|
{file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"},
|
||||||
{file = "aiohttp-3.8.3.tar.gz", hash = "sha256:3828fb41b7203176b82fe5d699e0d845435f2374750a44b480ea6b930f6be269"},
|
{file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
aiosignal = ">=1.1.2"
|
aiosignal = ">=1.1.2"
|
||||||
async-timeout = ">=4.0.0a3,<5.0"
|
async-timeout = ">=4.0.0a3,<5.0"
|
||||||
attrs = ">=17.3.0"
|
attrs = ">=17.3.0"
|
||||||
charset-normalizer = ">=2.0,<3.0"
|
charset-normalizer = ">=2.0,<4.0"
|
||||||
frozenlist = ">=1.1.1"
|
frozenlist = ">=1.1.1"
|
||||||
multidict = ">=4.5,<7.0"
|
multidict = ">=4.5,<7.0"
|
||||||
yarl = ">=1.0,<2.0"
|
yarl = ">=1.0,<2.0"
|
||||||
@@ -113,7 +112,6 @@ speedups = ["Brotli", "aiodns", "cchardet"]
|
|||||||
name = "aiosignal"
|
name = "aiosignal"
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
description = "aiosignal: a list of registered asynchronous callbacks"
|
description = "aiosignal: a list of registered asynchronous callbacks"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -128,7 +126,6 @@ frozenlist = ">=1.1.0"
|
|||||||
name = "anyio"
|
name = "anyio"
|
||||||
version = "3.6.2"
|
version = "3.6.2"
|
||||||
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.2"
|
python-versions = ">=3.6.2"
|
||||||
files = [
|
files = [
|
||||||
@@ -149,7 +146,6 @@ trio = ["trio (>=0.16,<0.22)"]
|
|||||||
name = "astroid"
|
name = "astroid"
|
||||||
version = "2.12.13"
|
version = "2.12.13"
|
||||||
description = "An abstract syntax tree for Python with inference support."
|
description = "An abstract syntax tree for Python with inference support."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.2"
|
python-versions = ">=3.7.2"
|
||||||
files = [
|
files = [
|
||||||
@@ -168,7 +164,6 @@ wrapt = [
|
|||||||
name = "async-timeout"
|
name = "async-timeout"
|
||||||
version = "4.0.2"
|
version = "4.0.2"
|
||||||
description = "Timeout context manager for asyncio programs"
|
description = "Timeout context manager for asyncio programs"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -180,7 +175,6 @@ files = [
|
|||||||
name = "asyncio"
|
name = "asyncio"
|
||||||
version = "3.4.3"
|
version = "3.4.3"
|
||||||
description = "reference implementation of PEP 3156"
|
description = "reference implementation of PEP 3156"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -194,7 +188,6 @@ files = [
|
|||||||
name = "attrs"
|
name = "attrs"
|
||||||
version = "22.2.0"
|
version = "22.2.0"
|
||||||
description = "Classes Without Boilerplate"
|
description = "Classes Without Boilerplate"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -213,7 +206,6 @@ tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy
|
|||||||
name = "autopep8"
|
name = "autopep8"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
description = "A tool that automatically formats Python code to conform to the PEP 8 style guide"
|
description = "A tool that automatically formats Python code to conform to the PEP 8 style guide"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -229,7 +221,6 @@ tomli = {version = "*", markers = "python_version < \"3.11\""}
|
|||||||
name = "brotli"
|
name = "brotli"
|
||||||
version = "1.0.9"
|
version = "1.0.9"
|
||||||
description = "Python bindings for the Brotli compression library"
|
description = "Python bindings for the Brotli compression library"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -317,11 +308,21 @@ files = [
|
|||||||
{file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"},
|
{file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "certifi"
|
||||||
|
version = "2023.7.22"
|
||||||
|
description = "Python package for providing Mozilla's CA Bundle."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.6"
|
||||||
|
files = [
|
||||||
|
{file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
|
||||||
|
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "charset-normalizer"
|
name = "charset-normalizer"
|
||||||
version = "2.1.1"
|
version = "2.1.1"
|
||||||
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.0"
|
python-versions = ">=3.6.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -336,7 +337,6 @@ unicode-backport = ["unicodedata2"]
|
|||||||
name = "click"
|
name = "click"
|
||||||
version = "8.1.3"
|
version = "8.1.3"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -351,7 +351,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
|||||||
name = "colorama"
|
name = "colorama"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
description = "Cross-platform colored terminal text."
|
description = "Cross-platform colored terminal text."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -363,7 +362,6 @@ files = [
|
|||||||
name = "dill"
|
name = "dill"
|
||||||
version = "0.3.6"
|
version = "0.3.6"
|
||||||
description = "serialize all of python"
|
description = "serialize all of python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -376,31 +374,29 @@ graph = ["objgraph (>=1.7.2)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastapi"
|
name = "fastapi"
|
||||||
version = "0.92.0"
|
version = "0.95.2"
|
||||||
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "fastapi-0.92.0-py3-none-any.whl", hash = "sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf"},
|
{file = "fastapi-0.95.2-py3-none-any.whl", hash = "sha256:d374dbc4ef2ad9b803899bd3360d34c534adc574546e25314ab72c0c4411749f"},
|
||||||
{file = "fastapi-0.92.0.tar.gz", hash = "sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de"},
|
{file = "fastapi-0.95.2.tar.gz", hash = "sha256:4d9d3e8c71c73f11874bcf5e33626258d143252e329a01002f767306c64fb982"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0"
|
pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0"
|
||||||
starlette = ">=0.25.0,<0.26.0"
|
starlette = ">=0.27.0,<0.28.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
||||||
dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"]
|
dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"]
|
||||||
doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.8.0)"]
|
doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer-cli (>=0.0.13,<0.0.14)", "typer[all] (>=0.6.1,<0.8.0)"]
|
||||||
test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.10.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.6.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"]
|
test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==23.1.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.7)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.7.0.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frozenlist"
|
name = "frozenlist"
|
||||||
version = "1.3.3"
|
version = "1.3.3"
|
||||||
description = "A list-like structure which implements collections.abc.MutableSequence"
|
description = "A list-like structure which implements collections.abc.MutableSequence"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -484,7 +480,6 @@ files = [
|
|||||||
name = "greenlet"
|
name = "greenlet"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
description = "Lightweight in-process concurrent programming"
|
description = "Lightweight in-process concurrent programming"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
|
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -558,7 +553,6 @@ test = ["faulthandler", "objgraph", "psutil"]
|
|||||||
name = "h11"
|
name = "h11"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -566,11 +560,31 @@ files = [
|
|||||||
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
|
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpcore"
|
||||||
|
version = "0.18.0"
|
||||||
|
description = "A minimal low-level HTTP client."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "httpcore-0.18.0-py3-none-any.whl", hash = "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced"},
|
||||||
|
{file = "httpcore-0.18.0.tar.gz", hash = "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
anyio = ">=3.0,<5.0"
|
||||||
|
certifi = "*"
|
||||||
|
h11 = ">=0.13,<0.15"
|
||||||
|
sniffio = "==1.*"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
http2 = ["h2 (>=3,<5)"]
|
||||||
|
socks = ["socksio (==1.*)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httptools"
|
name = "httptools"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
description = "A collection of framework independent HTTP protocol utils."
|
description = "A collection of framework independent HTTP protocol utils."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5.0"
|
python-versions = ">=3.5.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -620,11 +634,33 @@ files = [
|
|||||||
[package.extras]
|
[package.extras]
|
||||||
test = ["Cython (>=0.29.24,<0.30.0)"]
|
test = ["Cython (>=0.29.24,<0.30.0)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpx"
|
||||||
|
version = "0.25.0"
|
||||||
|
description = "The next generation HTTP client."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "httpx-0.25.0-py3-none-any.whl", hash = "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100"},
|
||||||
|
{file = "httpx-0.25.0.tar.gz", hash = "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
certifi = "*"
|
||||||
|
httpcore = ">=0.18.0,<0.19.0"
|
||||||
|
idna = "*"
|
||||||
|
sniffio = "*"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
brotli = ["brotli", "brotlicffi"]
|
||||||
|
cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
|
||||||
|
http2 = ["h2 (>=3,<5)"]
|
||||||
|
socks = ["socksio (==1.*)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.4"
|
version = "3.4"
|
||||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -636,7 +672,6 @@ files = [
|
|||||||
name = "isort"
|
name = "isort"
|
||||||
version = "5.11.4"
|
version = "5.11.4"
|
||||||
description = "A Python utility / library to sort Python imports."
|
description = "A Python utility / library to sort Python imports."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -654,7 +689,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"]
|
|||||||
name = "lazy-object-proxy"
|
name = "lazy-object-proxy"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
description = "A fast and thorough lazy object proxy."
|
description = "A fast and thorough lazy object proxy."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -683,7 +717,6 @@ files = [
|
|||||||
name = "loguru"
|
name = "loguru"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
description = "Python logging made (stupidly) simple"
|
description = "Python logging made (stupidly) simple"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -702,7 +735,6 @@ dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils
|
|||||||
name = "lxml"
|
name = "lxml"
|
||||||
version = "4.9.2"
|
version = "4.9.2"
|
||||||
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -795,7 +827,6 @@ source = ["Cython (>=0.29.7)"]
|
|||||||
name = "lxml-stubs"
|
name = "lxml-stubs"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
description = "Type annotations for the lxml package"
|
description = "Type annotations for the lxml package"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -810,7 +841,6 @@ test = ["coverage[toml] (==5.2)", "pytest (>=6.0.0)", "pytest-mypy-plugins (==1.
|
|||||||
name = "mccabe"
|
name = "mccabe"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
description = "McCabe checker, plugin for flake8"
|
description = "McCabe checker, plugin for flake8"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -822,7 +852,6 @@ files = [
|
|||||||
name = "msgpack"
|
name = "msgpack"
|
||||||
version = "1.0.4"
|
version = "1.0.4"
|
||||||
description = "MessagePack serializer"
|
description = "MessagePack serializer"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -884,7 +913,6 @@ files = [
|
|||||||
name = "multidict"
|
name = "multidict"
|
||||||
version = "6.0.4"
|
version = "6.0.4"
|
||||||
description = "multidict implementation"
|
description = "multidict implementation"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -968,7 +996,6 @@ files = [
|
|||||||
name = "mypy"
|
name = "mypy"
|
||||||
version = "0.991"
|
version = "0.991"
|
||||||
description = "Optional static typing for Python"
|
description = "Optional static typing for Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1019,7 +1046,6 @@ reports = ["lxml"]
|
|||||||
name = "mypy-extensions"
|
name = "mypy-extensions"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
description = "Experimental type system extensions for programs checked with the mypy typechecker."
|
description = "Experimental type system extensions for programs checked with the mypy typechecker."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1031,7 +1057,6 @@ files = [
|
|||||||
name = "nonebot-adapter-onebot"
|
name = "nonebot-adapter-onebot"
|
||||||
version = "2.2.0"
|
version = "2.2.0"
|
||||||
description = "OneBot(CQHTTP) adapter for nonebot2"
|
description = "OneBot(CQHTTP) adapter for nonebot2"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = ">=3.8,<4.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -1047,7 +1072,6 @@ nonebot2 = ">=2.0.0-beta.3,<3.0.0"
|
|||||||
name = "nonebot2"
|
name = "nonebot2"
|
||||||
version = "2.0.0rc2"
|
version = "2.0.0rc2"
|
||||||
description = "An asynchronous python bot framework."
|
description = "An asynchronous python bot framework."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = ">=3.8,<4.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -1076,7 +1100,6 @@ websockets = ["websockets (>=10.0,<11.0)"]
|
|||||||
name = "numpy"
|
name = "numpy"
|
||||||
version = "1.24.0"
|
version = "1.24.0"
|
||||||
description = "Fundamental package for array computing in Python"
|
description = "Fundamental package for array computing in Python"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -1114,7 +1137,6 @@ files = [
|
|||||||
name = "pandas"
|
name = "pandas"
|
||||||
version = "1.5.2"
|
version = "1.5.2"
|
||||||
description = "Powerful data structures for data analysis, time series, and statistics"
|
description = "Powerful data structures for data analysis, time series, and statistics"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -1149,7 +1171,7 @@ files = [
|
|||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
numpy = [
|
numpy = [
|
||||||
{version = ">=1.21.0", markers = "python_version >= \"3.10\""},
|
{version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""},
|
||||||
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
||||||
]
|
]
|
||||||
python-dateutil = ">=2.8.1"
|
python-dateutil = ">=2.8.1"
|
||||||
@@ -1162,7 +1184,6 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
|
|||||||
name = "pandas-stubs"
|
name = "pandas-stubs"
|
||||||
version = "1.5.2.221213"
|
version = "1.5.2.221213"
|
||||||
description = "Type annotations for pandas"
|
description = "Type annotations for pandas"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<3.12"
|
python-versions = ">=3.8,<3.12"
|
||||||
files = [
|
files = [
|
||||||
@@ -1177,7 +1198,6 @@ types-pytz = ">=2022.1.1"
|
|||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "2.6.0"
|
version = "2.6.0"
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1193,7 +1213,6 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock
|
|||||||
name = "playwright"
|
name = "playwright"
|
||||||
version = "1.29.0"
|
version = "1.29.0"
|
||||||
description = "A high-level API to automate web browsers"
|
description = "A high-level API to automate web browsers"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1214,7 +1233,6 @@ pyee = "9.0.4"
|
|||||||
name = "pycodestyle"
|
name = "pycodestyle"
|
||||||
version = "2.10.0"
|
version = "2.10.0"
|
||||||
description = "Python style guide checker"
|
description = "Python style guide checker"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -1226,7 +1244,6 @@ files = [
|
|||||||
name = "pydantic"
|
name = "pydantic"
|
||||||
version = "1.10.2"
|
version = "1.10.2"
|
||||||
description = "Data validation and settings management using python type hints"
|
description = "Data validation and settings management using python type hints"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1280,7 +1297,6 @@ email = ["email-validator (>=1.0.3)"]
|
|||||||
name = "pyee"
|
name = "pyee"
|
||||||
version = "9.0.4"
|
version = "9.0.4"
|
||||||
description = "A port of node.js's EventEmitter to python."
|
description = "A port of node.js's EventEmitter to python."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1295,7 +1311,6 @@ typing-extensions = "*"
|
|||||||
name = "pygtrie"
|
name = "pygtrie"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
description = "A pure Python trie data structure implementation."
|
description = "A pure Python trie data structure implementation."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1307,7 +1322,6 @@ files = [
|
|||||||
name = "pylint"
|
name = "pylint"
|
||||||
version = "2.15.9"
|
version = "2.15.9"
|
||||||
description = "python code static checker"
|
description = "python code static checker"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.2"
|
python-versions = ">=3.7.2"
|
||||||
files = [
|
files = [
|
||||||
@@ -1336,7 +1350,6 @@ testutils = ["gitpython (>3)"]
|
|||||||
name = "python-dateutil"
|
name = "python-dateutil"
|
||||||
version = "2.8.2"
|
version = "2.8.2"
|
||||||
description = "Extensions to the standard Python datetime module"
|
description = "Extensions to the standard Python datetime module"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1351,7 +1364,6 @@ six = ">=1.5"
|
|||||||
name = "python-dotenv"
|
name = "python-dotenv"
|
||||||
version = "0.21.0"
|
version = "0.21.0"
|
||||||
description = "Read key-value pairs from a .env file and set them as environment variables"
|
description = "Read key-value pairs from a .env file and set them as environment variables"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1366,7 +1378,6 @@ cli = ["click (>=5.0)"]
|
|||||||
name = "pytz"
|
name = "pytz"
|
||||||
version = "2022.7"
|
version = "2022.7"
|
||||||
description = "World timezone definitions, modern and historical"
|
description = "World timezone definitions, modern and historical"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1378,7 +1389,6 @@ files = [
|
|||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0"
|
version = "6.0"
|
||||||
description = "YAML parser and emitter for Python"
|
description = "YAML parser and emitter for Python"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -1428,7 +1438,6 @@ files = [
|
|||||||
name = "six"
|
name = "six"
|
||||||
version = "1.16.0"
|
version = "1.16.0"
|
||||||
description = "Python 2 and 3 compatibility utilities"
|
description = "Python 2 and 3 compatibility utilities"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1440,7 +1449,6 @@ files = [
|
|||||||
name = "sniffio"
|
name = "sniffio"
|
||||||
version = "1.3.0"
|
version = "1.3.0"
|
||||||
description = "Sniff out which async library your code is running under"
|
description = "Sniff out which async library your code is running under"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1450,14 +1458,13 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "starlette"
|
name = "starlette"
|
||||||
version = "0.25.0"
|
version = "0.27.0"
|
||||||
description = "The little ASGI library that shines."
|
description = "The little ASGI library that shines."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "starlette-0.25.0-py3-none-any.whl", hash = "sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628"},
|
{file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"},
|
||||||
{file = "starlette-0.25.0.tar.gz", hash = "sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c"},
|
{file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -1470,7 +1477,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam
|
|||||||
name = "tomli"
|
name = "tomli"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
description = "A lil' TOML parser"
|
description = "A lil' TOML parser"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1482,7 +1488,6 @@ files = [
|
|||||||
name = "tomlkit"
|
name = "tomlkit"
|
||||||
version = "0.11.6"
|
version = "0.11.6"
|
||||||
description = "Style preserving TOML library"
|
description = "Style preserving TOML library"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -1494,7 +1499,6 @@ files = [
|
|||||||
name = "types-pytz"
|
name = "types-pytz"
|
||||||
version = "2022.7.0.0"
|
version = "2022.7.0.0"
|
||||||
description = "Typing stubs for pytz"
|
description = "Typing stubs for pytz"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1506,7 +1510,6 @@ files = [
|
|||||||
name = "types-ujson"
|
name = "types-ujson"
|
||||||
version = "5.6.0.0"
|
version = "5.6.0.0"
|
||||||
description = "Typing stubs for ujson"
|
description = "Typing stubs for ujson"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1518,7 +1521,6 @@ files = [
|
|||||||
name = "typing-extensions"
|
name = "typing-extensions"
|
||||||
version = "4.4.0"
|
version = "4.4.0"
|
||||||
description = "Backported and Experimental Type Hints for Python 3.7+"
|
description = "Backported and Experimental Type Hints for Python 3.7+"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1530,7 +1532,6 @@ files = [
|
|||||||
name = "ujson"
|
name = "ujson"
|
||||||
version = "5.6.0"
|
version = "5.6.0"
|
||||||
description = "Ultra fast JSON encoder and decoder for Python"
|
description = "Ultra fast JSON encoder and decoder for Python"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1605,7 +1606,6 @@ files = [
|
|||||||
name = "uvicorn"
|
name = "uvicorn"
|
||||||
version = "0.20.0"
|
version = "0.20.0"
|
||||||
description = "The lightning-fast ASGI server."
|
description = "The lightning-fast ASGI server."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1620,7 +1620,7 @@ h11 = ">=0.8"
|
|||||||
httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
|
httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
|
||||||
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
|
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
|
||||||
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
|
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
|
||||||
uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
|
uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
|
||||||
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
|
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
|
||||||
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
|
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
|
||||||
|
|
||||||
@@ -1631,7 +1631,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
|
|||||||
name = "uvloop"
|
name = "uvloop"
|
||||||
version = "0.17.0"
|
version = "0.17.0"
|
||||||
description = "Fast implementation of asyncio event loop on top of libuv"
|
description = "Fast implementation of asyncio event loop on top of libuv"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1676,7 +1675,6 @@ test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "my
|
|||||||
name = "watchfiles"
|
name = "watchfiles"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
description = "Simple, modern and high performance file watching and code reload in python."
|
description = "Simple, modern and high performance file watching and code reload in python."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1707,7 +1705,6 @@ anyio = ">=3.0.0"
|
|||||||
name = "websockets"
|
name = "websockets"
|
||||||
version = "10.4"
|
version = "10.4"
|
||||||
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
|
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1786,7 +1783,6 @@ files = [
|
|||||||
name = "win32-setctime"
|
name = "win32-setctime"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
description = "A small Python utility to set file creation time on Windows"
|
description = "A small Python utility to set file creation time on Windows"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -1801,7 +1797,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
|
|||||||
name = "wrapt"
|
name = "wrapt"
|
||||||
version = "1.14.1"
|
version = "1.14.1"
|
||||||
description = "Module for decorators, wrappers and monkey patching."
|
description = "Module for decorators, wrappers and monkey patching."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1875,7 +1870,6 @@ files = [
|
|||||||
name = "yarl"
|
name = "yarl"
|
||||||
version = "1.8.2"
|
version = "1.8.2"
|
||||||
description = "Yet another URL library"
|
description = "Yet another URL library"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1962,4 +1956,4 @@ multidict = ">=4.0"
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.10,<3.12"
|
python-versions = "^3.10,<3.12"
|
||||||
content-hash = "7c10b6db4d8cf72d4453cf8eaa0d622eef3958483cc0fc239c08bd4f7dc9151b"
|
content-hash = "afbec27d3b608d5bceef47355368e1643dc211e194cb5d0f6b021b3a9fed60ef"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "nonebot-plugin-tetris-stats"
|
name = "nonebot-plugin-tetris-stats"
|
||||||
version = "0.3.3"
|
version = "0.4.4"
|
||||||
description = "一个基于nonebot2的用于查询TETRIS相关游戏玩家数据的插件"
|
description = "一个基于nonebot2的用于查询TETRIS相关游戏玩家数据的插件"
|
||||||
authors = ["scdhh <wallfjjd@gmail.com>"]
|
authors = ["scdhh <wallfjjd@gmail.com>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -19,6 +19,7 @@ pandas = "^1.4.3"
|
|||||||
playwright = "^1.24.1"
|
playwright = "^1.24.1"
|
||||||
ujson = "^5.4.0"
|
ujson = "^5.4.0"
|
||||||
Brotli = "^1.0.9"
|
Brotli = "^1.0.9"
|
||||||
|
httpx = "^0.25.0"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
mypy = "^0.991"
|
mypy = "^0.991"
|
||||||
|
|||||||
Reference in New Issue
Block a user