实验性支持评分

This commit is contained in:
qwerdvd 2023-06-28 20:07:39 +08:00
parent 0a8c4b9e50
commit cdc70a4dfe
6 changed files with 573 additions and 45 deletions

View File

@ -15,8 +15,13 @@ from .mono.Character import Character
from ..utils.error_reply import CHAR_HINT
from ..utils.fonts.first_world import fw_font_28
from ..utils.excel.read_excel import light_cone_ranks
from ..utils.map.SR_MAP_PATH import RelicId2Rarity, avatarId2Name
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name
from ..utils.map.SR_MAP_PATH import (
RelicId2Rarity,
AvatarRelicScore,
avatarId2Name,
avatarId2DamageType,
)
from ..utils.resource.RESOURCE_PATH import (
RELIC_PATH,
SKILL_PATH,
@ -61,7 +66,6 @@ skill_type_map = {
'Maze': ('秘技', 'technique'),
}
RELIC_POS = {
'1': (26, 1162),
'2': (367, 1162),
@ -265,7 +269,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
char_info.paste(attr_bg, (475, 300), attr_bg)
# 命座
for rank in range(0, 6):
for rank in range(6):
rank_bg = Image.open(TEXT_PATH / 'mz_bg.png')
rank_no_bg = Image.open(TEXT_PATH / 'mz_no_bg.png')
if rank < char.char_rank:
@ -401,6 +405,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
relic_score = 0
for relic in char.char_relic:
print(relic)
rarity = RelicId2Rarity[str(relic["relicId"])]
relic_img = Image.open(TEXT_PATH / f'yq_bg{rarity}.png')
if str(relic["SetId"])[0] == '3':
@ -438,6 +443,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
# 主属性
main_value = mp.mpf(relic['MainAffix']['Value'])
main_name: str = relic['MainAffix']['Name']
main_property: str = relic['MainAffix']['Property']
main_level: int = relic['Level']
if main_name in ['攻击力', '生命值', '防御力', '速度']:
@ -473,14 +479,35 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
anchor='mm',
)
single_relic_score = 0
main_value_score = await get_relic_score(
relic['MainAffix']['Property'], main_value, char_name, True
)
if main_property.__contains__('AddedRatio') and relic['Type'] == 5:
attr_name = main_property.split('AddedRatio')[0]
if attr_name == avatarId2DamageType[str(char.char_id)]:
for item in AvatarRelicScore:
if item['role'] == char_name:
weight_dict = item
add_value = (
(main_value + 1)
* 1
* weight_dict['AttributeAddedRatio']
* 10
)
single_relic_score += add_value
print(f'main_value_score: {main_value_score}')
single_relic_score += main_value_score
for index, i in enumerate(relic['SubAffixList']):
subName: str = i['Name']
subValue = mp.mpf(i['Value'])
subProperty = i['Property']
if subProperty == 'CriticalDamageBase':
relic_score += subValue
if subProperty == 'CriticalChanceBase':
relic_score += subValue * 2
tmp_score = await get_relic_score(
subProperty, subValue, char_name, False
)
single_relic_score += tmp_score
if subName in ['攻击力', '生命值', '防御力', '速度']:
subValueStr = nstr(subValue, 3)
else:
@ -503,17 +530,26 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
sr_font_26,
anchor='rm',
)
relic_img_draw.text(
(210, 195),
'{}'.format(int(single_relic_score)),
(255, 255, 255),
sr_font_28,
anchor='rm',
)
char_info.paste(
relic_img, RELIC_POS[str(relic["Type"])], relic_img
)
if relic_score > 1:
relic_score += single_relic_score
print(relic_score)
if relic_score > 200:
relic_value_level = Image.open(TEXT_PATH / 'CommonIconS.png')
char_info.paste(relic_value_level, (780, 963), relic_value_level)
elif relic_score > 0.6:
elif relic_score > 150:
relic_value_level = Image.open(TEXT_PATH / 'CommonIconA.png')
char_info.paste(relic_value_level, (780, 963), relic_value_level)
elif relic_score > 0.3:
elif relic_score > 100:
relic_value_level = Image.open(TEXT_PATH / 'CommonIconB.png')
char_info.paste(relic_value_level, (780, 963), relic_value_level)
elif relic_score > 0:
@ -590,3 +626,64 @@ async def get_char_data(
with open(path, 'r', encoding='utf8') as fp:
char_data = json.load(fp)
return char_data
async def get_relic_score(
subProperty: str, subValue, char_name: str, is_main: bool
) -> float:
relic_score = 0
weight_dict = {}
for item in AvatarRelicScore:
if item['role'] == char_name:
weight_dict = item
if weight_dict == {}:
return 0
if subProperty == 'CriticalDamageBase':
add_value = (subValue + 1) * 1 * weight_dict['CriticalDamageBase'] * 10
relic_score += add_value
if subProperty == 'CriticalChanceBase':
add_value = (subValue + 1) * 2 * weight_dict['CriticalChanceBase'] * 10
relic_score += add_value
if subProperty == 'AttackDelta' and not is_main:
add_value = subValue * 0.3 * 0.5 * weight_dict['AttackDelta'] * 0.1
relic_score += add_value
if subProperty == 'DefenceDelta' and not is_main:
add_value = subValue * 0.3 * 0.5 * weight_dict['DefenceDelta'] * 0.1
relic_score += add_value
if subProperty == 'HPDelta' and not is_main:
add_value = subValue * 0.3 * 0.5 * weight_dict['HPDelta'] * 0.1
relic_score += add_value
if subProperty == 'AttackAddedRatio':
add_value = (subValue + 1) * 1.5 * weight_dict['AttackAddedRatio'] * 10
relic_score += add_value
if subProperty == 'DefenceAddedRatio':
add_value = (
(subValue + 1) * 1.19 * weight_dict['DefenceAddedRatio'] * 10
)
relic_score += add_value
if subProperty == 'HPAddedRatio':
add_value = (subValue + 1) * 1.5 * weight_dict['HPAddedRatio'] * 10
relic_score += add_value
if subProperty == 'SpeedDelta':
add_value = subValue * 2.53 * weight_dict['SpeedDelta']
relic_score += add_value
if subProperty == 'BreakDamageAddedRatioBase':
add_value = (
(subValue + 1)
* 1.0
* weight_dict['BreakDamageAddedRatioBase']
* 10
)
relic_score += add_value
if subProperty == 'StatusProbabilityBase':
add_value = (
(subValue + 1) * 1.49 * weight_dict['StatusProbabilityBase'] * 10
)
relic_score += add_value
if subProperty == 'StatusResistanceBase':
add_value = (
(subValue + 1) * 1.49 * weight_dict['StatusResistanceBase'] * 10
)
relic_score += add_value
print(f'{subProperty} : {relic_score}')
return relic_score

View File

@ -33,17 +33,14 @@ async def api_to_card(
) -> Union[str, bytes]:
char_data_list = await api_to_dict(uid, enka_data)
print(char_data_list)
if isinstance(char_data_list, str):
if ('服务器正在维护或者关闭中' in char_data_list) or ('网络不太稳定' in char_data_list):
return await convert_img(pic_500)
else:
return await convert_img(pic_500)
else:
if char_data_list == []:
return await convert_img(pic_500)
if (
not isinstance(char_data_list, str)
and char_data_list == []
or isinstance(char_data_list, str)
):
return await convert_img(pic_500)
img = await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
return img
return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
async def draw_enka_card(
@ -60,13 +57,10 @@ async def draw_enka_card(
)
if showfrom == 0:
line1 = f'展柜内有 {len(char_data_list)} 个角色!'
elif char_data_list is None:
return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255)))
else:
if char_data_list is None:
return await convert_img(
Image.new('RGBA', (0, 1), (255, 255, 255))
)
else:
line1 = f'UID {str(uid)} 刷新成功'
line1 = f'UID {uid} 刷新成功'
# print(char_list)
line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板'
char_num = len(char_data_list)
@ -163,10 +157,11 @@ async def draw_enka_char(index: int, img: Image.Image, char_data: dict):
char_temp.paste(char_img, (8, 8), char_img)
char_card.paste(char_temp, (0, 0), char_mask)
if index <= 7:
if img.size[0] <= 1100:
x = 60 + (index % 4) * 220
else:
x = 160 + (index % 4) * 220
x = (
60 + (index % 4) * 220
if img.size[0] <= 1100
else 160 + (index % 4) * 220
)
img.paste(
char_card,
(x, 187 + (index // 4) * 220),

View File

@ -47,9 +47,7 @@ async def api_to_dict(
"""
if '未找到绑定的UID' in sr_uid:
return UID_HINT
if sr_data:
pass
else:
if not sr_data:
try:
sr_data = await get_char_card_info(sr_uid)
except ReadTimeout:

View File

@ -34,6 +34,7 @@ ItemId2Name_fileName = f'ItemId2Name_mapping_{version}.json'
RelicId2MainAffixGroup_fileName = (
f'RelicId2MainAffixGroup_mapping_{version}.json'
)
AvatarRelicScore_fileName = 'AvatarRelicScore.json'
class TS(TypedDict):
@ -110,3 +111,6 @@ with open(MAP / ItemId2Name_fileName, 'r', encoding='UTF-8') as f:
with open(MAP / RelicId2MainAffixGroup_fileName, 'r', encoding='UTF-8') as f:
RelicId2MainAffixGroup = msgjson.decode(f.read(), type=Dict[str, int])
with open(MAP / AvatarRelicScore_fileName, 'r', encoding='UTF-8') as f:
AvatarRelicScore = msgjson.decode(f.read(), type=List[Dict])

View File

@ -0,0 +1,434 @@
[
{
"role": "景元",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "希儿",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "布洛妮娅",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "杰帕德",
"HPDelta": 0.5,
"HPAddedRatio": 0.5,
"AttackDelta": 0.0,
"AttackAddedRatio": 0.0,
"DefenceDelta": 1.0,
"DefenceAddedRatio": 1.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.5,
"StatusResistanceBase": 0.5,
"AttributeAddedRatio": 0
},
{
"role": "姬子",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.5,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "瓦尔特",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 1.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "彦卿",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.75,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "白露",
"HPDelta": 1.0,
"HPAddedRatio": 1.0,
"AttackDelta": 0.0,
"AttackAddedRatio": 0.0,
"DefenceDelta": 0.5,
"DefenceAddedRatio": 0.5,
"SpeedDelta": 0.75,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 1,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.5,
"AttributeAddedRatio": 0
},
{
"role": "克拉拉",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "三月七",
"HPDelta": 0.5,
"HPAddedRatio": 0.5,
"AttackDelta": 0.0,
"AttackAddedRatio": 0.0,
"DefenceDelta": 1.0,
"DefenceAddedRatio": 1.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.5,
"StatusResistanceBase": 0.5,
"AttributeAddedRatio": 0
},
{
"role": "丹恒",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "阿兰",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "艾丝妲",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.75,
"HealRatio": 0,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "黑塔",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "希露瓦",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "娜塔莎",
"HPDelta": 1.0,
"HPAddedRatio": 1.0,
"AttackDelta": 0.0,
"AttackAddedRatio": 0.0,
"DefenceDelta": 0.5,
"DefenceAddedRatio": 0.5,
"SpeedDelta": 0.75,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 1,
"SPRatio": 0.75,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.5,
"AttributeAddedRatio": 0
},
{
"role": "佩拉",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 1.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "桑博",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 1.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "虎克",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "青雀",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "停云",
"HPDelta": 0.5,
"HPAddedRatio": 0.5,
"AttackDelta": 1.0,
"AttackAddedRatio": 1.0,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 1.0,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 0
},
{
"role": "素裳",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.5,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
},
{
"role": "开拓者火",
"HPDelta": 0.5,
"HPAddedRatio": 0.5,
"AttackDelta": 0.0,
"AttackAddedRatio": 0.0,
"DefenceDelta": 0.1,
"DefenceAddedRatio": 0.1,
"SpeedDelta": 1.0,
"CriticalChanceBase": 0,
"CriticalDamageBase": 0,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.0,
"StatusProbabilityBase": 1.0,
"StatusResistanceBase": 0.5,
"AttributeAddedRatio": 0
},
{
"role": "开拓者物理",
"HPDelta": 0.0,
"HPAddedRatio": 0.0,
"AttackDelta": 0.75,
"AttackAddedRatio": 0.75,
"DefenceDelta": 0.0,
"DefenceAddedRatio": 0.0,
"SpeedDelta": 0.75,
"CriticalChanceBase": 1,
"CriticalDamageBase": 1,
"BreakDamageAddedRatioBase": 0.0,
"HealRatio": 0,
"SPRatio": 0.5,
"StatusProbabilityBase": 0.0,
"StatusResistanceBase": 0.0,
"AttributeAddedRatio": 1
}
]

24
poetry.lock generated
View File

@ -598,14 +598,14 @@ files = [
[[package]]
name = "platformdirs"
version = "3.6.0"
version = "3.8.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "platformdirs-3.6.0-py3-none-any.whl", hash = "sha256:ffa199e3fbab8365778c4a10e1fbf1b9cd50707de826eb304b50e57ec0cc8d38"},
{file = "platformdirs-3.6.0.tar.gz", hash = "sha256:57e28820ca8094678b807ff529196506d7a21e17156cb1cddb3e74cebce54640"},
{file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"},
{file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"},
]
[package.extras]
@ -614,14 +614,14 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-
[[package]]
name = "pluggy"
version = "1.1.0"
version = "1.2.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "pluggy-1.1.0-py3-none-any.whl", hash = "sha256:d81d19a3a88d82ed06998353ce5d5c02587ef07ee2d808ae63904ab0ccef0087"},
{file = "pluggy-1.1.0.tar.gz", hash = "sha256:c500b592c5512df35622e4faf2135aa0b7e989c7d31344194b4afb9d5e47b1bf"},
{file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
{file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
]
[package.extras]
@ -758,14 +758,14 @@ files = [
[[package]]
name = "pytest"
version = "7.3.2"
version = "7.4.0"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"},
{file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"},
{file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"},
{file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"},
]
[package.dependencies]
@ -887,14 +887,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "setuptools"
version = "67.8.0"
version = "68.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"},
{file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"},
{file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"},
{file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"},
]
[package.extras]