mirror of
https://github.com/0-8-4/miui-auto-tasks.git
synced 2024-11-16 04:35:51 +00:00
feat: 重构项目 (#138)
* 修复无法获取成长值的问题 更改成长值获取接口 * 修复无法获取成长值的问题 更改成长值获取接口 * 改用正则获取成长值 * 推送配置说明 * 更新推送 * 更新推送 * Update config.yaml * Update config.yaml * Update requirements.txt * Update config.yaml * format the file * 提升版本号 * 提升版本号 * 提升版本号 * 修复取消点赞出错 * feat: 重构项目 * chore: add Exception * add: repo report link * feat: 添加token的获取 * chore: 修正签到参数 * Delete utils directory * Delete config.yaml * Delete miuitask.py * feat: 重构项目 * Create __init__.py * feat: 重构项目 * Create 1 * feat: 重构项目 * add: 添加cryptography依赖 * Delete utils/api/1 * chore: 使用yaml储存数据 * chore: 添加token异常提示 chore: 修正部分数据结构 * imp: add system info output * imp: auto reformat by PyCharm * imp: 增加鸣谢 * imp: 修改主程序名称 * fix: 添加被删除的文件 * imp: 根据新版本 修改GitHub Action 脚本 * add: 添加tenacity重试库,部分get_token添加重试机制 chore: 将token.py重命名为utils.py chore: 添加captcha.py,用于用户自行解决验证码 * 增加信息显示 增加显示项目信息及系统信息 * imp: 修复github action 脚本 * imp: auto reformat by PyCharm --------- Co-authored-by: 0-8-4 <ljd69154@liangjundi.cn> Co-authored-by: TardisX <ranoklx@gmail.com>
This commit is contained in:
parent
b340811639
commit
56c27977da
11
.github/workflows/docker-image.yml
vendored
11
.github/workflows/docker-image.yml
vendored
@ -1,5 +1,6 @@
|
||||
# author: 0-8-4
|
||||
# date: 24-11-2022 18:34 AEDT
|
||||
# last_update: 13-11-2023 22:57 AEDT
|
||||
#
|
||||
# This script is used to automatically build docker image and
|
||||
# push to DockerHub when every new release is published
|
||||
@ -18,6 +19,16 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Set up python 3.11 run the program once to create the `/data`
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
-
|
||||
name: run the program once to create the `/data`
|
||||
run: python3 miuitask.py
|
||||
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
146
.gitignore
vendored
146
.gitignore
vendored
@ -1 +1,145 @@
|
||||
__pycache__
|
||||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/python
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=python
|
||||
|
||||
### Python ###
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
pip-wheel-metadata/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
pytestdebug.log
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
doc/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/python
|
||||
logs
|
||||
data
|
||||
.pdm-python
|
||||
test.py
|
||||
|
@ -4,7 +4,9 @@ COPY ./utils /srv/utils/
|
||||
|
||||
COPY ./requirements.txt /tmp
|
||||
|
||||
COPY ./config.yaml ./miuitask.py /srv/
|
||||
COPY ./miuitask.py /srv/
|
||||
|
||||
VOLUME ["./data", "/srv/data"]
|
||||
|
||||
RUN pip install --no-cache-dir -i https://mirrors.bfsu.edu.cn/pypi/web/simple -r /tmp/requirements.txt && \
|
||||
rm -rf /tmp/* && \
|
||||
|
19
README.md
19
README.md
@ -36,6 +36,11 @@
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
**推荐**
|
||||
```bash
|
||||
pip install pdm
|
||||
pdm install
|
||||
```
|
||||
注意:你可能需要使用管理员权限运行命令行
|
||||
|
||||
|
||||
@ -104,7 +109,19 @@ SOFTWARE.
|
||||
|
||||
## 社区
|
||||
|
||||
本项目所有贡献者感谢所有Star了本项目的人
|
||||
感谢以下贡献者对本项目做出的贡献
|
||||
|
||||
<a href="https://github.com/0-8-4/miui-auto-tasks/graphs/contributors">
|
||||
|
||||
<img src="https://contrib.rocks/image?repo=0-8-4/miui-auto-tasks" />
|
||||
|
||||
</a>
|
||||
|
||||
![Alt](https://repobeats.axiom.co/api/embed/073d4816527b3720a03cb44fa876fe0de0216124.svg "Repobeats analytics image")
|
||||
|
||||
<br><br>
|
||||
|
||||
### 本项目所有贡献者感谢所有Star了本项目的人
|
||||
|
||||
[![Star History Chart](https://api.star-history.com/svg?repos=0-8-4/miui-auto-tasks&type=Date)](https://star-history.com/#0-8-4/miui-auto-tasks&Date)
|
||||
|
||||
|
48
config.yaml
48
config.yaml
@ -1,48 +0,0 @@
|
||||
accounts:
|
||||
- uid: 100000
|
||||
# 账户ID 非账户用户名或手机号
|
||||
password: Abcd.1234
|
||||
# 账户密码或其MD5哈希
|
||||
user-agent: 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Safari/537.36'
|
||||
# 登录社区时所用浏览器的 User-Agent
|
||||
# 可在此工具查看:https://tool.chinaz.com/useragent
|
||||
|
||||
# 功能开关
|
||||
check-in: false
|
||||
# 社区成长值签到,启用功能意味着你愿意自行承担相关风险
|
||||
browse-user-page: false
|
||||
# 社区浏览个人主页10秒,启用功能意味着你愿意自行承担相关风险
|
||||
browse-post: false
|
||||
# 社区浏览帖子10秒,启用功能意味着你愿意自行承担相关风险
|
||||
thumb-up: false
|
||||
# 点赞帖子,启用功能意味着你愿意自行承担相关风险
|
||||
browse-specialpage: false
|
||||
# 社区在活动期间可能会出现限时的“浏览指定专题页”任务,启用功能意味着你愿意自行承担相关风险
|
||||
board-follow: false
|
||||
# 社区可能会出现限时的“加入圈子”任务,启用功能意味着你愿意自行承担相关风险
|
||||
carrot-pull: false
|
||||
# 社区拔萝卜,启用功能意味着你愿意自行承担相关风险
|
||||
|
||||
# 若有多个账户,按照以下模板进行修改,使用时删除前端 #注释
|
||||
# - uid: 100001
|
||||
# password: abc123
|
||||
# user-agent: 'Mozilla/5.0 (Android 11; Mobile; rv:95.0) Gecko/95.0 Firefox/95.0'
|
||||
# check-in: false
|
||||
# browse-user-page: false
|
||||
# browse-post: false
|
||||
# thumb-up: false
|
||||
# browse-specialpage: false
|
||||
# board-follow: false
|
||||
# carrot-pull: false
|
||||
ONEPUSH:
|
||||
notifier: false
|
||||
params:
|
||||
title:
|
||||
markdown: false
|
||||
token:
|
||||
userid:
|
||||
|
||||
logging: false
|
||||
# 归档日志到本地文件
|
||||
version: v1.6.0
|
||||
# config 文件版本号,debug用
|
648
miuitask.py
648
miuitask.py
@ -1,622 +1,40 @@
|
||||
# -- coding:UTF-8 --
|
||||
import re
|
||||
import requests
|
||||
import time
|
||||
import json
|
||||
import hashlib
|
||||
import base64
|
||||
import random
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import pad
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Cipher import PKCS1_v1_5
|
||||
"""
|
||||
Date: 2023-11-13 20:29:19
|
||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||
LastEditTime: 2023-11-13 20:29:58
|
||||
"""
|
||||
import asyncio
|
||||
|
||||
from urllib import request
|
||||
from http import cookiejar
|
||||
from typing import Any, Tuple
|
||||
from utils.api.login import Login
|
||||
from utils.api.sign import BaseSign
|
||||
from utils.config import ConfigManager
|
||||
from utils.logger import log, get_message
|
||||
from utils.request import notify_me
|
||||
from utils.utils import get_token
|
||||
from utils.system_info import print_info
|
||||
|
||||
from utils.utils import system_info, get_config, w_log, s_log, check_config, format_config, random_sleep, \
|
||||
sleep_ten_sec_more, notify_me
|
||||
_conf = ConfigManager.data_obj
|
||||
|
||||
|
||||
class MIUITask:
|
||||
async def main():
|
||||
print_info()
|
||||
for account in _conf.accounts:
|
||||
login_obj = Login(account)
|
||||
if (cookies := await login_obj.login()) and (token := await get_token(cookies["cUserId"])):
|
||||
sign_obj = BaseSign(cookies)
|
||||
daily_tasks = await sign_obj.check_daily_tasks()
|
||||
sign_task_obj = sign_obj.AVAILABLE_SIGNS # 签到任务对象合集
|
||||
for task in daily_tasks:
|
||||
if not task.showType:
|
||||
log.info(f"开始执行{task.name}任务")
|
||||
if task_obj := sign_task_obj.get(task.name): # 签到任务对象
|
||||
await task_obj(cookies, token).sign()
|
||||
else:
|
||||
log.error(f"未找到{task.name}任务")
|
||||
else:
|
||||
log.info(f"{task.name}任务已完成")
|
||||
notify_me(get_message())
|
||||
|
||||
def __init__(self, uid, password, user_agent, device_id):
|
||||
self.uid = uid
|
||||
self.password = password
|
||||
self.user_agent = user_agent
|
||||
self.device_id = device_id
|
||||
|
||||
# 留空
|
||||
self.cookie = ''
|
||||
# 留空
|
||||
self.miui_vip_ph = ''
|
||||
|
||||
# 签名
|
||||
def post_sign(self, data):
|
||||
s_data = []
|
||||
for d in data:
|
||||
s_data.append(str(d) + '=' + str(data[d]))
|
||||
s_str = '&'.join(s_data)
|
||||
w_log('签名原文:' + str(s_str))
|
||||
s_str = hashlib.md5(str(s_str).encode(encoding='UTF-8')).hexdigest() + '067f0q5wds4'
|
||||
s_sign = hashlib.md5(str(s_str).encode(encoding='UTF-8')).hexdigest()
|
||||
w_log('签名结果:' + str(s_sign))
|
||||
return s_sign, data['timestamp']
|
||||
|
||||
# 点赞
|
||||
def thumb_up(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
sign_data = {
|
||||
'postId': '36625780',
|
||||
'timestamp': int(round(time.time() * 1000))
|
||||
}
|
||||
sign = self.post_sign(sign_data)
|
||||
data = {
|
||||
'postId': '36625780',
|
||||
'sign': sign[0],
|
||||
'timestamp': sign[1]
|
||||
}
|
||||
try:
|
||||
response = requests.get('https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp', headers=headers,
|
||||
params=data)
|
||||
r_json = response.json()
|
||||
if r_json['code'] == 401:
|
||||
return w_log("点赞失败:Cookie无效")
|
||||
elif r_json['code'] != 200:
|
||||
return w_log("点赞失败:" + str(r_json['message']))
|
||||
w_log("点赞成功")
|
||||
except Exception as e:
|
||||
w_log("点赞出错")
|
||||
w_log(e)
|
||||
|
||||
# 取消点赞
|
||||
def cancel_thumb_up(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
data = {
|
||||
'postId': '36625780'
|
||||
}
|
||||
try:
|
||||
response = requests.get('https://api.vip.miui.com/mtop/planet/vip/content/announceCancelThumbUp',
|
||||
headers=headers, params=data)
|
||||
r_json = response.json()
|
||||
if r_json['code'] == 401:
|
||||
return w_log("取消点赞失败:Cookie无效")
|
||||
elif r_json['code'] != 200:
|
||||
return w_log("取消点赞失败:" + str(r_json['message']))
|
||||
w_log("取消点赞成功")
|
||||
except Exception as e:
|
||||
w_log("取消点赞出错")
|
||||
w_log(e)
|
||||
|
||||
def get_vip_cookie(self, url):
|
||||
|
||||
try:
|
||||
r_cookie = cookiejar.CookieJar()
|
||||
handler = request.HTTPCookieProcessor(r_cookie)
|
||||
opener = request.build_opener(handler)
|
||||
response = opener.open(url)
|
||||
for item in r_cookie:
|
||||
self.cookie += item.name + '=' + item.value + ';'
|
||||
if self.cookie == '':
|
||||
return False
|
||||
ck_list = self.cookie.replace(" ", "").split(';')
|
||||
for ph in ck_list:
|
||||
if "miui_vip_ph=" in ph:
|
||||
self.miui_vip_ph = ph.replace("miui_vip_ph=", "")
|
||||
break
|
||||
return True
|
||||
except Exception as e:
|
||||
w_log(e)
|
||||
return False
|
||||
|
||||
# 浏览帖子10s
|
||||
def browse_post(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
data = {
|
||||
'action': 'BROWSE_POST_10S',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2',
|
||||
params=params, headers=headers, data=data)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("浏览帖子失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("浏览帖子完成,但有错误:" + str(r_json['message']))
|
||||
score = r_json['entity']['score']
|
||||
w_log("浏览帖子完成,成长值+" + str(score))
|
||||
except Exception as e:
|
||||
w_log("浏览帖子出错")
|
||||
w_log(e)
|
||||
|
||||
# 浏览个人主页10s
|
||||
def browse_user_page(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
data = {
|
||||
'action': 'BROWSE_SPECIAL_PAGES_USER_HOME',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2',
|
||||
params=params, headers=headers)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("浏览个人主页失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("浏览个人主页完成,但有错误:" + str(r_json['message']))
|
||||
score = r_json['entity']['score']
|
||||
w_log("浏览个人主页完成,成长值+" + str(score))
|
||||
except Exception as e:
|
||||
w_log("浏览个人主页出错")
|
||||
w_log(e)
|
||||
|
||||
# 浏览指定专题页
|
||||
def browse_specialpage(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
data = {
|
||||
'action': 'BROWSE_SPECIAL_PAGES_SPECIAL_PAGE',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2',
|
||||
params=params, headers=headers, data=data)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("浏览专题页失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("浏览专题页完成,但有错误:" + str(r_json['message']))
|
||||
score = r_json['entity']['score']
|
||||
w_log("浏览专题页完成,成长值+" + str(score))
|
||||
except Exception as e:
|
||||
w_log("浏览专题页出错")
|
||||
w_log(e)
|
||||
|
||||
# 加入小米圈子
|
||||
def board_follow(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'boardId': '558495',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.vip.miui.com/api/community/board/follow?'
|
||||
'&pathname=/mio/allboard&version=dev.20051',
|
||||
headers=headers, params=params)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("加入小米圈子失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("加入小米圈子失败:" + str(r_json['message']))
|
||||
w_log("加入小米圈子结果:" + str(r_json['message']))
|
||||
except Exception as e:
|
||||
w_log("加入小米圈子出错")
|
||||
w_log(e)
|
||||
|
||||
# 退出小米圈子
|
||||
def board_unfollow(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'boardId': '558495',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post('https://api.vip.miui.com/api/community/board/unfollow?'
|
||||
'&pathname=/mio/allboard&version=dev.20051', headers=headers, params=params)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("退出小米圈子失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("退出小米圈子失败:" + str(r_json['message']))
|
||||
w_log("退出小米圈子结果:" + str(r_json['message']))
|
||||
except Exception as e:
|
||||
w_log("退出小米圈子出错")
|
||||
w_log(e)
|
||||
|
||||
# 社区拔萝卜
|
||||
def carrot_pull(self):
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
data = {
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.post('https://api.vip.miui.com/api/carrot/pull', headers=headers,
|
||||
data=data)
|
||||
r_json = response.json()
|
||||
if r_json['code'] == 401:
|
||||
return w_log("社区拔萝卜失败:Cookie无效")
|
||||
elif r_json['code'] != 200:
|
||||
return w_log("社区拔萝卜失败:" + str(r_json['entity']['message']))
|
||||
w_log("社区拔萝卜结果:" + str(r_json['entity']['message']))
|
||||
money_count = r_json['entity']['header']['moneyCount']
|
||||
w_log("当前金币数:" + str(money_count))
|
||||
except Exception as e:
|
||||
w_log("社区拔萝卜出错")
|
||||
w_log(e)
|
||||
|
||||
# 每日签到
|
||||
def check_in(self):
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/checkIn',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
data = {
|
||||
'miui_vip_ph': str(self.miui_vip_ph),
|
||||
'token': get_token()
|
||||
}
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.vip.miui.com/mtop/planet/vip/user/checkinV2',
|
||||
headers=headers, params=params, data=data)
|
||||
r_json = response.json()
|
||||
if r_json['status'] == 401:
|
||||
return w_log("每日签到失败:Cookie无效")
|
||||
elif r_json['status'] != 200:
|
||||
return w_log("每日签到失败:" + str(r_json['message']))
|
||||
w_log("每日签到结果:成长值+" + str(r_json['entity']))
|
||||
except Exception as e:
|
||||
w_log("每日签到出错")
|
||||
w_log(e)
|
||||
|
||||
# 登录社区
|
||||
def login_app(self):
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.get('https://api.vip.miui.com/mtop/planet/vip/app/init/start/infos', headers=headers,
|
||||
params=params)
|
||||
r_code = response.status_code
|
||||
if r_code == 401:
|
||||
return w_log("登录社区失败:Cookie无效")
|
||||
elif r_code != 200:
|
||||
return w_log("登录社区失败")
|
||||
w_log("登录社区成功")
|
||||
except Exception as e:
|
||||
w_log("登录社区出错")
|
||||
w_log(e)
|
||||
|
||||
def mi_login(self):
|
||||
proxies = {
|
||||
'https': None,
|
||||
'http': None
|
||||
}
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Referer': 'https://account.xiaomi.com/fe/service/login/password?sid=miui_vip&qs=%253Fcallback%253Dhttp'
|
||||
'%25253A%25252F%25252Fapi.vip.miui.com%25252Fsts%25253Fsign%25253D4II4ABwZkiJzkd2YSkyEZukI4Ak'
|
||||
'%2525253D%252526followup%25253Dhttps%2525253A%2525252F%2525252Fapi.vip.miui.com%2525252Fpage'
|
||||
'%2525252Flogin%2525253FdestUrl%2525253Dhttps%252525253A%252525252F%252525252Fweb.vip.miui.com'
|
||||
'%252525252Fpage%252525252Finfo%252525252Fmio%252525252Fmio%252525252FinternalTest%252525253Fref'
|
||||
'%252525253Dhomepage%2526sid%253Dmiui_vip&callback=http%3A%2F%2Fapi.vip.miui.com%2Fsts%3Fsign'
|
||||
'%3D4II4ABwZkiJzkd2YSkyEZukI4Ak%253D%26followup%3Dhttps%253A%252F%252Fapi.vip.miui.com%252Fpage'
|
||||
'%252Flogin%253FdestUrl%253Dhttps%25253A%25252F%25252Fweb.vip.miui.com%25252Fpage%25252Finfo'
|
||||
'%25252Fmio%25252Fmio%25252FinternalTest%25253Fref%25253Dhomepage&_sign=L%2BdSQY6sjSQ%2FCRjJs4p'
|
||||
'%2BU1vNYLY%3D&serviceParam=%7B%22checkSafePhone%22%3Afalse%2C%22checkSafeAddress%22%3Afalse%2C'
|
||||
'%22lsrp_score%22%3A0.0%7D&showActiveX=false&theme=&needTheme=false&bizDeviceType=',
|
||||
'User-Agent': str(self.user_agent),
|
||||
'Origin': 'https://account.xiaomi.com',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Cookie': 'deviceId=' + str(self.device_id) + '; pass_ua=web; uLocale=zh_CN'
|
||||
}
|
||||
data = {
|
||||
'bizDeviceType': '',
|
||||
'needTheme': 'false',
|
||||
'theme': '',
|
||||
'showActiveX': 'false',
|
||||
'serviceParam': '{"checkSafePhone":false,"checkSafeAddress":false,"lsrp_score":0.0}',
|
||||
'callback': 'http://api.vip.miui.com/sts?sign=4II4ABwZkiJzkd2YSkyEZukI4Ak%3D&followup=https%3A%2F%2Fapi.vip'
|
||||
'.miui.com%2Fpage%2Flogin%3FdestUrl%3Dhttps%253A%252F%252Fweb.vip.miui.com%252Fpage%252Finfo'
|
||||
'%252Fmio%252Fmio%252FinternalTest%253Fref%253Dhomepage',
|
||||
'qs': '%3Fcallback%3Dhttp%253A%252F%252Fapi.vip.miui.com%252Fsts%253Fsign%253D4II4ABwZkiJzkd2YSkyEZukI4Ak'
|
||||
'%25253D%2526followup%253Dhttps%25253A%25252F%25252Fapi.vip.miui.com%25252Fpage%25252Flogin'
|
||||
'%25253FdestUrl%25253Dhttps%2525253A%2525252F%2525252Fweb.vip.miui.com%2525252Fpage%2525252Finfo'
|
||||
'%2525252Fmio%2525252Fmio%2525252FinternalTest%2525253Fref%2525253Dhomepage%26sid%3Dmiui_vip',
|
||||
'sid': 'miui_vip',
|
||||
'_sign': 'L+dSQY6sjSQ/CRjJs4p+U1vNYLY=',
|
||||
'user': str(self.uid),
|
||||
'cc': '+86',
|
||||
'hash': str(self.password),
|
||||
'_json': 'true'
|
||||
}
|
||||
try:
|
||||
response = requests.post('https://account.xiaomi.com/pass/serviceLoginAuth2', headers=headers, data=data,
|
||||
proxies=proxies)
|
||||
response_data = response.text.lstrip('&').lstrip('START').lstrip('&')
|
||||
r_json = json.loads(response_data)
|
||||
if r_json['code'] == 70016:
|
||||
w_log('小米账号登录失败:用户名或密码不正确')
|
||||
return False
|
||||
if r_json['code'] != 0:
|
||||
w_log('小米账号登录失败:' + r_json['desc'])
|
||||
return False
|
||||
if r_json['pwd'] != 1:
|
||||
w_log('当前账号需要短信验证码,请尝试修改UA或设备ID')
|
||||
return False
|
||||
if not self.get_vip_cookie(r_json['location']):
|
||||
w_log('小米账号登录成功,社区获取 Cookie 失败')
|
||||
return False
|
||||
w_log('账号登录完成')
|
||||
return True
|
||||
except Exception as e:
|
||||
w_log("登录小米账号出错")
|
||||
w_log(e)
|
||||
return False
|
||||
|
||||
def check_daily_tasks(self):
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
try:
|
||||
response = requests.get('https://api.vip.miui.com/mtop/planet/vip/member/getCheckinPageCakeList',
|
||||
headers=headers)
|
||||
r_json = response.json()
|
||||
if r_json['status'] != 200:
|
||||
w_log("获取每日任务状态失败:" + str(r_json['message']))
|
||||
return None
|
||||
|
||||
tasks = r_json['entity']
|
||||
task_status = {}
|
||||
for task in tasks:
|
||||
if task['head']['title'] == "每日任务":
|
||||
for daily_task in task['data']:
|
||||
task_status[daily_task['title']] = daily_task['showType']
|
||||
task_name = daily_task['title']
|
||||
task_desc = daily_task.get('desc', '')
|
||||
task_completion_status = "完成" if daily_task['showType'] == 0 else "未完成"
|
||||
task_status[task_name] = {'showType': daily_task['showType'], 'desc': task_desc}
|
||||
w_log("获取到信息: " + str(task_name) + ", " + str(task_completion_status) + ", 描述: " + str(
|
||||
task_desc))
|
||||
|
||||
return task_status
|
||||
|
||||
except Exception as e:
|
||||
w_log("获取每日任务信息出错")
|
||||
w_log(e)
|
||||
return None
|
||||
|
||||
def get_point(self) -> Tuple[Any, Any]:
|
||||
"""
|
||||
这个方法带返回值的原因是,可以调用这个方法获取返回值,可根据这个方法定制自己的“消息提示功能”。
|
||||
如:Qmsg发送到QQ 或者 发送邮件提醒
|
||||
:return: 当前的成长值
|
||||
"""
|
||||
headers = {
|
||||
'cookie': str(self.cookie)
|
||||
}
|
||||
params = {
|
||||
'userId': str(self.uid),
|
||||
'miui_vip_ph': str(self.miui_vip_ph)
|
||||
}
|
||||
try:
|
||||
response = requests.get('https://api.vip.miui.com/mtop/planet/vip/member/getGrowUpPageData',
|
||||
headers=headers, params=params)
|
||||
r_json = response.json()
|
||||
|
||||
your_point = re.findall(r"'title': '成长值'.*'title': '(\d+)'.*'title': '/'", str(r_json['entity']))[0]
|
||||
your_level = re.findall(r"'title': '(\d+段)', 'desc': '当前等级'", str(r_json['entity']))[0]
|
||||
|
||||
w_log('当前等级:' + str(your_level) + ', 当前成长值:' + str(your_point))
|
||||
|
||||
return your_point, your_level
|
||||
except Exception as e:
|
||||
w_log('成长值和等级获取失败')
|
||||
w_log(e)
|
||||
process_exception(e)
|
||||
|
||||
|
||||
def process_exception(e: Exception):
|
||||
"""
|
||||
全局异常处理
|
||||
:param e: 异常实例
|
||||
:return: No return
|
||||
"""
|
||||
if e.__str__() == 'check_hostname requires server_hostname':
|
||||
w_log('系统设置了代理,出现异常')
|
||||
|
||||
|
||||
def start(miui_task: MIUITask, check_in: bool, browse_post: bool, browse_user_page: bool, thumb_up: bool,
|
||||
browse_specialpage: bool, board_follow: bool, carrot_pull: bool):
|
||||
if miui_task.mi_login():
|
||||
w_log("本脚本用于模拟网络请求测试,仅供测试学习使用,禁止用于其他用途")
|
||||
w_log("本脚本默认不做任何操作,如您愿意承担一切可能的后果,可编辑配置文件手动打开需要的功能")
|
||||
w_log("为避免重复模拟请求,脚本将自动获取状态并决定是否继续模拟网络请求")
|
||||
miui_task.login_app()
|
||||
task_status = miui_task.check_daily_tasks()
|
||||
if task_status is None:
|
||||
w_log("无法获取状态,将跳过多数模拟请求功能")
|
||||
else:
|
||||
if "每日签到" in task_status and task_status["每日签到"].get("showType", 0) == 1 and check_in:
|
||||
w_log("模拟请求「每日签到」")
|
||||
random_sleep()
|
||||
miui_task.check_in()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「每日签到」")
|
||||
|
||||
if "浏览帖子超过10秒" in task_status and task_status["浏览帖子超过10秒"].get("showType",
|
||||
0) == 1 and browse_post:
|
||||
w_log("模拟请求「浏览帖子超过10秒」")
|
||||
sleep_ten_sec_more()
|
||||
miui_task.browse_post()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「浏览帖子超过10秒」")
|
||||
|
||||
if "浏览个人/他人主页超过10秒" in task_status and task_status["浏览个人/他人主页超过10秒"].get("showType",
|
||||
0) == 1 and browse_user_page:
|
||||
w_log("模拟请求「浏览个人/他人主页超过10秒」")
|
||||
sleep_ten_sec_more()
|
||||
miui_task.browse_user_page()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「浏览个人/他人主页超过10秒」")
|
||||
|
||||
if "点赞他人帖子" in task_status and task_status["点赞他人帖子"].get("showType", 0) == 1 and thumb_up:
|
||||
w_log("模拟请求「点赞他人帖子」")
|
||||
random_sleep()
|
||||
miui_task.thumb_up()
|
||||
random_sleep()
|
||||
miui_task.cancel_thumb_up()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「点赞他人帖子」")
|
||||
|
||||
special_page_desc = "浏览超过10秒成长值+1,每日上限1分"
|
||||
special_page_task = None
|
||||
|
||||
for task, details in task_status.items():
|
||||
if special_page_desc in details.get('desc', '') and details.get('showType', 1) == 1:
|
||||
special_page_task = task
|
||||
break
|
||||
|
||||
if special_page_task and browse_specialpage:
|
||||
w_log("模拟请求「" + str(special_page_task) + "」")
|
||||
sleep_ten_sec_more()
|
||||
miui_task.browse_specialpage()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「浏览指定专题页」")
|
||||
|
||||
if "加入小米社区圈子" in task_status and task_status["加入小米社区圈子"].get("showType",
|
||||
0) == 1 and board_follow:
|
||||
w_log("模拟请求「加入小米社区圈子」")
|
||||
random_sleep()
|
||||
miui_task.board_follow()
|
||||
random_sleep()
|
||||
miui_task.board_unfollow()
|
||||
else:
|
||||
w_log("自动跳过模拟请求「加入小米社区圈子」")
|
||||
w_log("请注意,未在配置文件启用或不需要执行的功能请求将被自动跳过,且不会支持“灌水”的功能")
|
||||
if carrot_pull:
|
||||
w_log("模拟请求「社区拔萝卜」")
|
||||
random_sleep()
|
||||
miui_task.carrot_pull()
|
||||
random_sleep()
|
||||
miui_task.get_point()
|
||||
|
||||
|
||||
def main():
|
||||
w_log("MIUI-AUTO-TASK v1.6.0.2")
|
||||
w_log('---------- 系统信息 -------------')
|
||||
system_info()
|
||||
w_log('---------- 项目信息 -------------')
|
||||
w_log("这是一个免费且开源的项目,如果你是付费购买获得请务必退款")
|
||||
w_log("项目地址:https://github.com/0-8-4/miui-auto-tasks")
|
||||
w_log("欢迎 star,感谢東雲研究所中的大佬")
|
||||
w_log('---------- 配置检测 -------------')
|
||||
|
||||
config = get_config()
|
||||
|
||||
if not check_config(config):
|
||||
w_log('配置文件没有正确配置')
|
||||
exit(1)
|
||||
else:
|
||||
config = format_config(config)
|
||||
|
||||
for i in config.get('accounts'):
|
||||
w_log('---------- EXECUTING -------------')
|
||||
start(
|
||||
MIUITask(i.get('uid'), i.get('password'), i.get('user-agent'), device_id=i.get('device-id')),
|
||||
i.get('check-in'), i.get('browse-post'), i.get('browse-user-page'), i.get('thumb-up'),
|
||||
i.get('browse-specialpage'), i.get('board-follow'), i.get('carrot-pull')
|
||||
)
|
||||
time.sleep(5)
|
||||
s_log(config.get('logging'))
|
||||
notify_me()
|
||||
|
||||
|
||||
def main_handler(event, context):
|
||||
main()
|
||||
|
||||
# 随机字符
|
||||
def random_str(length):
|
||||
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-=_+~`{}[]|:<>?/.'
|
||||
return ''.join(random.choice(s) for _ in range(length))
|
||||
|
||||
# AES加密
|
||||
def aes_encrypt(key, data):
|
||||
iv = '0102030405060708'.encode('utf-8')
|
||||
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
|
||||
padded_data = pad(data.encode('utf-8'), AES.block_size, style='pkcs7')
|
||||
ciphertext = cipher.encrypt(padded_data)
|
||||
return base64.b64encode(ciphertext).decode('utf-8')
|
||||
|
||||
# RSA加密
|
||||
def rsa_encrypt(key, data):
|
||||
public_key = RSA.import_key(key)
|
||||
cipher = PKCS1_v1_5.new(public_key)
|
||||
ciphertext = cipher.encrypt(base64.b64encode(data.encode('utf-8')))
|
||||
return base64.b64encode(ciphertext).decode('utf-8')
|
||||
|
||||
# 获取Token
|
||||
def get_token():
|
||||
key = random_str(16)
|
||||
public_key = """-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArxfNLkuAQ/BYHzkzVwtu
|
||||
g+0abmYRBVCEScSzGxJIOsfxVzcuqaKO87H2o2wBcacD3bRHhMjTkhSEqxPjQ/FE
|
||||
XuJ1cdbmr3+b3EQR6wf/cYcMx2468/QyVoQ7BADLSPecQhtgGOllkC+cLYN6Md34
|
||||
Uii6U+VJf0p0q/saxUTZvhR2ka9fqJ4+6C6cOghIecjMYQNHIaNW+eSKunfFsXVU
|
||||
+QfMD0q2EM9wo20aLnos24yDzRjh9HJc6xfr37jRlv1/boG/EABMG9FnTm35xWrV
|
||||
R0nw3cpYF7GZg13QicS/ZwEsSd4HyboAruMxJBPvK3Jdr4ZS23bpN0cavWOJsBqZ
|
||||
VwIDAQAB
|
||||
-----END PUBLIC KEY-----"""
|
||||
data = '{"type":0,"startTs":' + str(round(time.time() * 1000)) + ',"endTs":' + str(round(
|
||||
time.time() * 1000)) + ',"env":{"p1":"","p2":"","p3":"","p4":"","p5":"","p6":"","p7":"","p8":"","p9":"","p10":"","p11":"","p12":"","p13":"","p14":"","p15":"","p16":"","p17":"","p18":"","p19":5,"p20":"","p21":"","p22":5,"p23":"","p24":"","p25":"","p26":"","p28":"","p29":"","p30":"","p31":"","p32":"","p33":"","p34":""},"action":{"a1":[],"a2":[],"a3":[],"a4":[],"a5":[],"a6":[],"a7":[],"a8":[],"a9":[],"a10":[],"a11":[],"a12":[],"a13":[],"a14":[]},"force":false,"talkBack":false,"uid":"' + random_str(
|
||||
27) + '","nonce":{"t":' + str(round(time.time())) + ',"r":' + str(
|
||||
round(time.time())) + '},"version":"2.0","scene":"GROW_UP_CHECKIN"}'
|
||||
s = rsa_encrypt(public_key, key)
|
||||
d = aes_encrypt(key, data)
|
||||
url = 'https://verify.sec.xiaomi.com/captcha/v2/data?k=3dc42a135a8d45118034d1ab68213073&locale=zh_CN'
|
||||
data = {'s': s, 'd': d, 'a': 'GROW_UP_CHECKIN'}
|
||||
result = requests.post(url=url, data=data).json()
|
||||
if result['msg'] != '参数错误':
|
||||
return result['data']['token']
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
asyncio.run(main())
|
||||
|
691
pdm.lock
Normal file
691
pdm.lock
Normal file
@ -0,0 +1,691 @@
|
||||
# This file is @generated by PDM.
|
||||
# It is not intended for manual editing.
|
||||
|
||||
[[package]]
|
||||
name = "annotated-types"
|
||||
version = "0.6.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Reusable constraint types to use with typing.Annotated"
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
version = "4.0.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||
dependencies = [
|
||||
"idna>=2.8",
|
||||
"sniffio>=1.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
version = "2023.7.22"
|
||||
requires_python = ">=3.6"
|
||||
summary = "Python package for providing Mozilla's CA Bundle."
|
||||
|
||||
[[package]]
|
||||
name = "cffi"
|
||||
version = "1.16.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Foreign Function Interface for Python calling C code."
|
||||
dependencies = [
|
||||
"pycparser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "charset-normalizer"
|
||||
version = "3.3.2"
|
||||
requires_python = ">=3.7.0"
|
||||
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||
summary = "Cross-platform colored terminal text."
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "41.0.5"
|
||||
requires_python = ">=3.7"
|
||||
summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||
dependencies = [
|
||||
"cffi>=1.12",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.14.0"
|
||||
requires_python = ">=3.7"
|
||||
summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||
|
||||
[[package]]
|
||||
name = "httpcore"
|
||||
version = "1.0.2"
|
||||
requires_python = ">=3.8"
|
||||
summary = "A minimal low-level HTTP client."
|
||||
dependencies = [
|
||||
"certifi",
|
||||
"h11<0.15,>=0.13",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpx"
|
||||
version = "0.25.1"
|
||||
requires_python = ">=3.8"
|
||||
summary = "The next generation HTTP client."
|
||||
dependencies = [
|
||||
"anyio",
|
||||
"certifi",
|
||||
"httpcore",
|
||||
"idna",
|
||||
"sniffio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.4"
|
||||
requires_python = ">=3.5"
|
||||
summary = "Internationalized Domain Names in Applications (IDNA)"
|
||||
|
||||
[[package]]
|
||||
name = "loguru"
|
||||
version = "0.7.2"
|
||||
requires_python = ">=3.5"
|
||||
summary = "Python logging made (stupidly) simple"
|
||||
dependencies = [
|
||||
"colorama>=0.3.4; sys_platform == \"win32\"",
|
||||
"win32-setctime>=1.0.0; sys_platform == \"win32\"",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "onepush"
|
||||
version = "1.3.0"
|
||||
requires_python = ">=3.6"
|
||||
summary = "A Python library to send notifications to your iPhone, Discord, Telegram, WeChat, QQ and DingTalk."
|
||||
dependencies = [
|
||||
"pycryptodome",
|
||||
"requests",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "orjson"
|
||||
version = "3.9.10"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
|
||||
|
||||
[[package]]
|
||||
name = "pycparser"
|
||||
version = "2.21"
|
||||
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
summary = "C parser in Python"
|
||||
|
||||
[[package]]
|
||||
name = "pycryptodome"
|
||||
version = "3.19.0"
|
||||
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
summary = "Cryptographic library for Python"
|
||||
|
||||
[[package]]
|
||||
name = "pydantic"
|
||||
version = "2.4.2"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Data validation using Python type hints"
|
||||
dependencies = [
|
||||
"annotated-types>=0.4.0",
|
||||
"pydantic-core==2.10.1",
|
||||
"typing-extensions>=4.6.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic-core"
|
||||
version = "2.10.1"
|
||||
requires_python = ">=3.7"
|
||||
summary = ""
|
||||
dependencies = [
|
||||
"typing-extensions!=4.7.0,>=4.6.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml"
|
||||
version = "6.0.1"
|
||||
requires_python = ">=3.6"
|
||||
summary = "YAML parser and emitter for Python"
|
||||
|
||||
[[package]]
|
||||
name = "requests"
|
||||
version = "2.31.0"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Python HTTP for Humans."
|
||||
dependencies = [
|
||||
"certifi>=2017.4.17",
|
||||
"charset-normalizer<4,>=2",
|
||||
"idna<4,>=2.5",
|
||||
"urllib3<3,>=1.21.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sniffio"
|
||||
version = "1.3.0"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Sniff out which async library your code is running under"
|
||||
|
||||
[[package]]
|
||||
name = "tenacity"
|
||||
version = "8.2.3"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Retry code until it succeeds"
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.8.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Backported and Experimental Type Hints for Python 3.8+"
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.0.7"
|
||||
requires_python = ">=3.7"
|
||||
summary = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||
|
||||
[[package]]
|
||||
name = "win32-setctime"
|
||||
version = "1.1.0"
|
||||
requires_python = ">=3.5"
|
||||
summary = "A small Python utility to set file creation time on Windows"
|
||||
|
||||
[metadata]
|
||||
lock_version = "4.2"
|
||||
cross_platform = true
|
||||
groups = ["default"]
|
||||
content_hash = "sha256:8516846f7d53a24a8c156ad98f5db5132de8fee375e17d35a1747d707731c118"
|
||||
|
||||
[metadata.files]
|
||||
"annotated-types 0.6.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/28/78/d31230046e58c207284c6b2c4e8d96e6d3cb4e52354721b944d3e1ee4aa5/annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
|
||||
{url = "https://files.pythonhosted.org/packages/67/fe/8c7b275824c6d2cd17c93ee85d0ee81c090285b6d52f4876ccc47cf9c3c4/annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
|
||||
]
|
||||
"anyio 4.0.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"},
|
||||
{url = "https://files.pythonhosted.org/packages/74/17/5075225ee1abbb93cd7fc30a2d343c6a3f5f71cf388f14768a7a38256581/anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"},
|
||||
]
|
||||
"certifi 2023.7.22" = [
|
||||
{url = "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
|
||||
{url = "https://files.pythonhosted.org/packages/98/98/c2ff18671db109c9f10ed27f5ef610ae05b73bd876664139cf95bd1429aa/certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
|
||||
]
|
||||
"cffi 1.16.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/04/a2/55f290ac034bd98c2a63e83be96925729cb2a70c8c42adc391ec5fbbaffd/cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
|
||||
{url = "https://files.pythonhosted.org/packages/09/d4/8759cc3b2222c159add8ce3af0089912203a31610f4be4c36f98e320b4c6/cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
|
||||
{url = "https://files.pythonhosted.org/packages/18/6c/0406611f3d5aadf4c5b08f6c095d874aed8dfc2d3a19892707d72536d5dc/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/18/76e26bcfa6a7a62f880791122261575b3048ac57dd72f300ba0827629ab8/cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/3b/f95e667064141843843df8ca79dd49ba57bb7a7615d6d7d538531e45f002/cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/f8/5931cfb7a8cc15d224099cead5e5432efe729bd61abce72d9b3e51e5800b/cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
|
||||
{url = "https://files.pythonhosted.org/packages/22/04/1d10d5baf3faaae9b35f6c49bcf25c1be81ea68cc7ee6923206d02be85b0/cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
|
||||
{url = "https://files.pythonhosted.org/packages/22/05/43cfda378da7bb0aa19b3cf34fe54f8867b0d581294216339d87deefd69c/cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/14/8398798ab001523f1abb2b4170a01bf2114588f3f1fa1f984b3f3bef107e/cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
|
||||
{url = "https://files.pythonhosted.org/packages/36/44/124481b75d228467950b9e81d20ec963f33517ca551f08956f2838517ece/cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
|
||||
{url = "https://files.pythonhosted.org/packages/39/44/4381b8d26e9cfa3e220e3c5386f443a10c6313a6ade7acb314b2bcc0a6ce/cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
|
||||
{url = "https://files.pythonhosted.org/packages/40/c9/cfba735d9ed117471e32d7bce435dd49721261ae294277c64aa929ec9c9d/cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
|
||||
{url = "https://files.pythonhosted.org/packages/47/e3/b6832b1b9a1b6170c585ee2c2d30baf64d0a497c17e6623f42cfeb59c114/cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
|
||||
{url = "https://files.pythonhosted.org/packages/4a/56/572f7f728b20e4d51766e63d7de811e45c7cae727dc1f769caad2973fb52/cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
|
||||
{url = "https://files.pythonhosted.org/packages/4a/ac/a4046ab3d72536eff8bc30b39d767f69bd8be715c5e395b71cfca26f03d9/cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
|
||||
{url = "https://files.pythonhosted.org/packages/4c/00/e17e2a8df0ff5aca2edd9eeebd93e095dd2515f2dd8d591d84a3233518f6/cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
|
||||
{url = "https://files.pythonhosted.org/packages/50/bd/17a8f9ac569d328de304e7318d7707fcdb6f028bcc194d80cfc654902007/cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
|
||||
{url = "https://files.pythonhosted.org/packages/54/49/b8875986beef2e74fc668b95f2df010e354f78e009d33d95b375912810c3/cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
|
||||
{url = "https://files.pythonhosted.org/packages/57/3a/c263cf4d5b02880274866968fa2bf196a02c4486248bc164732319b4a4c0/cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
|
||||
{url = "https://files.pythonhosted.org/packages/58/ac/2a3ea436a6cbaa8f75ddcab39010e5e0817a18f26fef5d2fe2e0c7df3425/cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
|
||||
{url = "https://files.pythonhosted.org/packages/5a/c7/694814b3757878b29da39bc2f0cf9d20295f4c1e0a0bde7971708d5f23f8/cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
|
||||
{url = "https://files.pythonhosted.org/packages/68/ce/95b0bae7968c65473e1298efb042e10cafc7bafc14d9e4f154008241c91d/cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
|
||||
{url = "https://files.pythonhosted.org/packages/69/46/8882b0405be4ac7db3fefa5a201f221acb54f27c76e584e23e9c62b68819/cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
|
||||
{url = "https://files.pythonhosted.org/packages/73/dd/15c6f32166f0c8f97d8aadee9ac8f096557899f4f21448d2feb74cf4f210/cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
|
||||
{url = "https://files.pythonhosted.org/packages/7f/5a/39e212f99aa73660a1c523f6b7ddeb4e26f906faaa5088e97b617a89c7ae/cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
|
||||
{url = "https://files.pythonhosted.org/packages/85/3e/a4e4857c2aae635195459679ac9daea296630c1d76351259eb3de3c18ed0/cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
|
||||
{url = "https://files.pythonhosted.org/packages/8b/5c/7f9cd1fb80512c9e16c90b29b26fea52977e9ab268321f64b42f4c8488a3/cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
|
||||
{url = "https://files.pythonhosted.org/packages/8c/54/82aa3c014760d5a6ddfde3253602f0ac1937dd504621d4139746f230a7b5/cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
|
||||
{url = "https://files.pythonhosted.org/packages/95/c8/ce05a6cba2bec12d4b28285e66c53cc88dd7385b102dea7231da3b74cfef/cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
|
||||
{url = "https://files.pythonhosted.org/packages/9b/1a/575200306a3dfd9102ce573e7158d459a1bd7e44637e4f22a999c4fd64b1/cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
|
||||
{url = "https://files.pythonhosted.org/packages/9b/89/a31c81e36bbb793581d8bba4406a8aac4ba84b2559301c44eef81f4cf5df/cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
|
||||
{url = "https://files.pythonhosted.org/packages/9d/da/e6dbf22b66899419e66c501ae5f1cf3d69979d4c75ad30da683f60abba94/cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
|
||||
{url = "https://files.pythonhosted.org/packages/a3/81/5f5d61338951afa82ce4f0f777518708893b9420a8b309cc037fbf114e63/cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
|
||||
{url = "https://files.pythonhosted.org/packages/aa/aa/1c43e48a6f361d1529f9e4602d6992659a0107b5f21cae567e2eddcf8d66/cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
|
||||
{url = "https://files.pythonhosted.org/packages/ae/00/831d01e63288d1654ed3084a6ac8b0940de6dc0ada4ba71b830fff7a0088/cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
|
||||
{url = "https://files.pythonhosted.org/packages/b4/5f/c6e7e8d80fbf727909e4b1b5b9352082fc1604a14991b1d536bfaee5a36c/cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
|
||||
{url = "https://files.pythonhosted.org/packages/b4/f6/b28d2bfb5fca9e8f9afc9d05eae245bed9f6ba5c2897fefee7a9abeaf091/cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
|
||||
{url = "https://files.pythonhosted.org/packages/b5/23/ea84dd4985649fcc179ba3a6c9390412e924d20b0244dc71a6545788f5a2/cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
|
||||
{url = "https://files.pythonhosted.org/packages/be/3e/0b197d1bfbf386a90786b251dbf2634a15f2ea3d4e4070e99c7d1c7689cf/cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
|
||||
{url = "https://files.pythonhosted.org/packages/c4/01/f5116266fe80c04d4d1cc96c3d355606943f9fb604a810e0b02228a0ce19/cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
|
||||
{url = "https://files.pythonhosted.org/packages/c9/6e/751437067affe7ac0944b1ad4856ec11650da77f0dd8f305fae1117ef7bb/cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
|
||||
{url = "https://files.pythonhosted.org/packages/c9/7c/43d81bdd5a915923c3bad5bb4bff401ea00ccc8e28433fb6083d2e3bf58e/cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
|
||||
{url = "https://files.pythonhosted.org/packages/e0/80/52b71420d68c4be18873318f6735c742f1172bb3b18d23f0306e6444d410/cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
|
||||
{url = "https://files.pythonhosted.org/packages/e4/9a/7169ae3a67a7bb9caeb2249f0617ac1458df118305c53afa3dec4a9029cd/cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
|
||||
{url = "https://files.pythonhosted.org/packages/e4/c7/c09cc6fd1828ea950e60d44e0ef5ed0b7e3396fbfb856e49ca7d629b1408/cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
|
||||
{url = "https://files.pythonhosted.org/packages/e9/63/e285470a4880a4f36edabe4810057bd4b562c6ddcc165eacf9c3c7210b40/cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
|
||||
{url = "https://files.pythonhosted.org/packages/ea/ac/e9e77bc385729035143e54cc8c4785bd480eaca9df17565963556b0b7a93/cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
|
||||
{url = "https://files.pythonhosted.org/packages/eb/de/4f644fc78a1144a897e1f908abfb2058f7be05a8e8e4fe90b7f41e9de36b/cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
|
||||
{url = "https://files.pythonhosted.org/packages/ee/68/74a2b9f9432b70d97d1184cdabf32d7803124c228adef9481d280864a4a7/cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
|
||||
{url = "https://files.pythonhosted.org/packages/f0/31/a6503a5c4874fb4d4c2053f73f09a957cb427b6943fab5a43b8e156df397/cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
|
||||
{url = "https://files.pythonhosted.org/packages/f1/c9/326611aa83e16b13b6db4dbb73b5455c668159a003c4c2f0c3bcb2ddabaf/cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
|
||||
{url = "https://files.pythonhosted.org/packages/f9/6c/af5f40c66aac38aa70abfa6f26e8296947a79ef373cb81a14c791c3da91d/cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
|
||||
]
|
||||
"charset-normalizer 3.3.2" = [
|
||||
{url = "https://files.pythonhosted.org/packages/05/31/e1f51c76db7be1d4aef220d29fbfa5dbb4a99165d9833dcbf166753b6dc0/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
|
||||
{url = "https://files.pythonhosted.org/packages/05/8c/eb854996d5fef5e4f33ad56927ad053d04dc820e4a3d39023f35cad72617/charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
|
||||
{url = "https://files.pythonhosted.org/packages/07/07/7e554f2bbce3295e191f7e653ff15d55309a9ca40d0362fcdab36f01063c/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
|
||||
{url = "https://files.pythonhosted.org/packages/13/82/83c188028b6f38d39538442dd127dc794c602ae6d45d66c469f4063a4c30/charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
|
||||
{url = "https://files.pythonhosted.org/packages/13/f8/eefae0629fa9260f83b826ee3363e311bb03cfdd518dad1bd10d57cb2d84/charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
|
||||
{url = "https://files.pythonhosted.org/packages/16/ea/a9e284aa38cccea06b7056d4cbc7adf37670b1f8a668a312864abf1ff7c6/charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
|
||||
{url = "https://files.pythonhosted.org/packages/19/28/573147271fd041d351b438a5665be8223f1dd92f273713cb882ddafe214c/charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
|
||||
{url = "https://files.pythonhosted.org/packages/1e/49/7ab74d4ac537ece3bc3334ee08645e231f39f7d6df6347b29a74b0537103/charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
|
||||
{url = "https://files.pythonhosted.org/packages/1f/8d/33c860a7032da5b93382cbe2873261f81467e7b37f4ed91e25fed62fd49b/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
|
||||
{url = "https://files.pythonhosted.org/packages/24/9d/2e3ef673dfd5be0154b20363c5cdcc5606f35666544381bee15af3778239/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
|
||||
{url = "https://files.pythonhosted.org/packages/28/76/e6222113b83e3622caa4bb41032d0b1bf785250607392e1b778aca0b8a7d/charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
|
||||
{url = "https://files.pythonhosted.org/packages/2a/9d/a6d15bd1e3e2914af5955c8eb15f4071997e7078419328fee93dfd497eb7/charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
|
||||
{url = "https://files.pythonhosted.org/packages/2b/61/095a0aa1a84d1481998b534177c8566fdc50bb1233ea9a0478cd3cc075bd/charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
|
||||
{url = "https://files.pythonhosted.org/packages/2d/dc/9dacba68c9ac0ae781d40e1a0c0058e26302ea0660e574ddf6797a0347f7/charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
|
||||
{url = "https://files.pythonhosted.org/packages/2e/37/9223632af0872c86d8b851787f0edd3fe66be4a5378f51242b25212f8374/charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
|
||||
{url = "https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
|
||||
{url = "https://files.pythonhosted.org/packages/2f/0e/d7303ccae9735ff8ff01e36705ad6233ad2002962e8668a970fc000c5e1b/charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/95/ef68482e4a6adf781fae8d183fb48d6f2be8facb414f49c90ba6a5149cd1/charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/c3/3b96a435c5109dd5b6adc8a59ba1d678b302a97938f032e3770cc84cd354/charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
|
||||
{url = "https://files.pythonhosted.org/packages/34/2a/f392457d45e24a0c9bfc012887ed4f3c54bf5d4d05a5deb970ffec4b7fc0/charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
|
||||
{url = "https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
|
||||
{url = "https://files.pythonhosted.org/packages/3d/09/d82fe4a34c5f0585f9ea1df090e2a71eb9bb1e469723053e1ee9f57c16f3/charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
|
||||
{url = "https://files.pythonhosted.org/packages/3d/85/5b7416b349609d20611a64718bed383b9251b5a601044550f0c8983b8900/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
|
||||
{url = "https://files.pythonhosted.org/packages/3e/33/21a875a61057165e92227466e54ee076b73af1e21fe1b31f1e292251aa1e/charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
|
||||
{url = "https://files.pythonhosted.org/packages/3f/ba/3f5e7be00b215fa10e13d64b1f6237eb6ebea66676a41b2bcdd09fe74323/charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
|
||||
{url = "https://files.pythonhosted.org/packages/40/26/f35951c45070edc957ba40a5b1db3cf60a9dbb1b350c2d5bef03e01e61de/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
|
||||
{url = "https://files.pythonhosted.org/packages/43/05/3bf613e719efe68fb3a77f9c536a389f35b95d75424b96b426a47a45ef1d/charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
|
||||
{url = "https://files.pythonhosted.org/packages/44/80/b339237b4ce635b4af1c73742459eee5f97201bd92b2371c53e11958392e/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
|
||||
{url = "https://files.pythonhosted.org/packages/45/59/3d27019d3b447a88fe7e7d004a1e04be220227760264cc41b405e863891b/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
|
||||
{url = "https://files.pythonhosted.org/packages/46/6a/d5c26c41c49b546860cc1acabdddf48b0b3fb2685f4f5617ac59261b44ae/charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
|
||||
{url = "https://files.pythonhosted.org/packages/4f/d1/d547cc26acdb0cc458b152f79b2679d7422f29d41581e6fa907861e88af1/charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
|
||||
{url = "https://files.pythonhosted.org/packages/51/fd/0ee5b1c2860bb3c60236d05b6e4ac240cf702b67471138571dad91bcfed8/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
|
||||
{url = "https://files.pythonhosted.org/packages/53/cd/aa4b8a4d82eeceb872f83237b2d27e43e637cac9ffaef19a1321c3bafb67/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
|
||||
{url = "https://files.pythonhosted.org/packages/54/7f/cad0b328759630814fcf9d804bfabaf47776816ad4ef2e9938b7e1123d04/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
|
||||
{url = "https://files.pythonhosted.org/packages/57/ec/80c8d48ac8b1741d5b963797b7c0c869335619e13d4744ca2f67fc11c6fc/charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
|
||||
{url = "https://files.pythonhosted.org/packages/58/78/a0bc646900994df12e07b4ae5c713f2b3e5998f58b9d3720cce2aa45652f/charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
|
||||
{url = "https://files.pythonhosted.org/packages/58/a2/0c63d5d7ffac3104b86631b7f2690058c97bf72d3145c0a9cd4fb90c58c2/charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
|
||||
{url = "https://files.pythonhosted.org/packages/5b/ae/ce2c12fcac59cb3860b2e2d76dc405253a4475436b1861d95fe75bdea520/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
|
||||
{url = "https://files.pythonhosted.org/packages/63/09/c1bc53dab74b1816a00d8d030de5bf98f724c52c1635e07681d312f20be8/charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
|
||||
{url = "https://files.pythonhosted.org/packages/66/fe/c7d3da40a66a6bf2920cce0f436fa1f62ee28aaf92f412f0bf3b84c8ad6c/charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
|
||||
{url = "https://files.pythonhosted.org/packages/68/77/02839016f6fbbf808e8b38601df6e0e66c17bbab76dff4613f7511413597/charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
|
||||
{url = "https://files.pythonhosted.org/packages/6c/c2/4a583f800c0708dd22096298e49f887b49d9746d0e78bfc1d7e29816614c/charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
|
||||
{url = "https://files.pythonhosted.org/packages/72/1a/641d5c9f59e6af4c7b53da463d07600a695b9824e20849cb6eea8a627761/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
|
||||
{url = "https://files.pythonhosted.org/packages/74/20/8923a06f15eb3d7f6a306729360bd58f9ead1dc39bc7ea8831f4b407e4ae/charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
|
||||
{url = "https://files.pythonhosted.org/packages/74/f1/0d9fe69ac441467b737ba7f48c68241487df2f4522dd7246d9426e7c690e/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
|
||||
{url = "https://files.pythonhosted.org/packages/79/66/8946baa705c588521afe10b2d7967300e49380ded089a62d38537264aece/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
|
||||
{url = "https://files.pythonhosted.org/packages/7b/ef/5eb105530b4da8ae37d506ccfa25057961b7b63d581def6f99165ea89c7e/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
|
||||
{url = "https://files.pythonhosted.org/packages/81/b2/160893421adfa3c45554fb418e321ed342bb10c0a4549e855b2b2a3699cb/charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
|
||||
{url = "https://files.pythonhosted.org/packages/8d/b7/9e95102e9a8cce6654b85770794b582dda2921ec1fd924c10fbcf215ad31/charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
|
||||
{url = "https://files.pythonhosted.org/packages/91/33/749df346e93d7a30cdcb90cbfdd41a06026317bfbfb62cd68307c1a3c543/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
|
||||
{url = "https://files.pythonhosted.org/packages/91/95/e2cfa7ce962e6c4b59a44a6e19e541c3a0317e543f0e0923f844e8d7d21d/charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
|
||||
{url = "https://files.pythonhosted.org/packages/96/fc/0cae31c0f150cd1205a2a208079de865f69a8fd052a98856c40c99e36b3c/charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
|
||||
{url = "https://files.pythonhosted.org/packages/98/69/5d8751b4b670d623aa7a47bef061d69c279e9f922f6705147983aa76c3ce/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
|
||||
{url = "https://files.pythonhosted.org/packages/99/b0/9c365f6d79a9f0f3c379ddb40a256a67aa69c59609608fe7feb6235896e1/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
|
||||
{url = "https://files.pythonhosted.org/packages/9e/ef/cd47a63d3200b232792e361cd67530173a09eb011813478b1c0fb8aa7226/charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
|
||||
{url = "https://files.pythonhosted.org/packages/a0/b1/4e72ef73d68ebdd4748f2df97130e8428c4625785f2b6ece31f555590c2d/charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
|
||||
{url = "https://files.pythonhosted.org/packages/a2/51/e5023f937d7f307c948ed3e5c29c4b7a3e42ed2ee0b8cdf8f3a706089bf0/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
|
||||
{url = "https://files.pythonhosted.org/packages/a2/a0/4af29e22cb5942488cf45630cbdd7cefd908768e69bdd90280842e4e8529/charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
|
||||
{url = "https://files.pythonhosted.org/packages/a8/31/47d018ef89f95b8aded95c589a77c072c55e94b50a41aa99c0a2008a45a4/charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
|
||||
{url = "https://files.pythonhosted.org/packages/a8/6f/4ff299b97da2ed6358154b6eb3a2db67da2ae204e53d205aacb18a7e4f34/charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
|
||||
{url = "https://files.pythonhosted.org/packages/ae/d5/4fecf1d58bedb1340a50f165ba1c7ddc0400252d6832ff619c4568b36cc0/charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
|
||||
{url = "https://files.pythonhosted.org/packages/b2/62/5a5dcb9a71390a9511a253bde19c9c89e0b20118e41080185ea69fb2c209/charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
|
||||
{url = "https://files.pythonhosted.org/packages/b3/c1/ebca8e87c714a6a561cfee063f0655f742e54b8ae6e78151f60ba8708b3a/charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
|
||||
{url = "https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
|
||||
{url = "https://files.pythonhosted.org/packages/b8/60/e2f67915a51be59d4539ed189eb0a2b0d292bf79270410746becb32bc2c3/charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
|
||||
{url = "https://files.pythonhosted.org/packages/bd/28/7ea29e73eea52c7e15b4b9108d0743fc9e4cc2cdb00d275af1df3d46d360/charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
|
||||
{url = "https://files.pythonhosted.org/packages/be/4d/9e370f8281cec2fcc9452c4d1ac513324c32957c5f70c73dd2fa8442a21a/charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
|
||||
{url = "https://files.pythonhosted.org/packages/c1/9d/254a2f1bcb0ce9acad838e94ed05ba71a7cb1e27affaa4d9e1ca3958cdb6/charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
|
||||
{url = "https://files.pythonhosted.org/packages/c2/65/52aaf47b3dd616c11a19b1052ce7fa6321250a7a0b975f48d8c366733b9f/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
|
||||
{url = "https://files.pythonhosted.org/packages/c8/ce/09d6845504246d95c7443b8c17d0d3911ec5fdc838c3213e16c5e47dee44/charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
|
||||
{url = "https://files.pythonhosted.org/packages/c9/7a/6d8767fac16f2c80c7fa9f14e0f53d4638271635c306921844dc0b5fd8a6/charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
|
||||
{url = "https://files.pythonhosted.org/packages/cc/94/f7cf5e5134175de79ad2059edf2adce18e0685ebdb9227ff0139975d0e93/charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
|
||||
{url = "https://files.pythonhosted.org/packages/cf/7c/f3b682fa053cc21373c9a839e6beba7705857075686a05c72e0f8c4980ca/charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
|
||||
{url = "https://files.pythonhosted.org/packages/d1/2f/0d1efd07c74c52b6886c32a3b906fb8afd2fecf448650e73ecb90a5a27f1/charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
|
||||
{url = "https://files.pythonhosted.org/packages/d1/b2/fcedc8255ec42afee97f9e6f0145c734bbe104aac28300214593eb326f1d/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
|
||||
{url = "https://files.pythonhosted.org/packages/d8/b5/eb705c313100defa57da79277d9207dc8d8e45931035862fa64b625bfead/charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
|
||||
{url = "https://files.pythonhosted.org/packages/da/f1/3702ba2a7470666a62fd81c58a4c40be00670e5006a67f4d626e57f013ae/charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
|
||||
{url = "https://files.pythonhosted.org/packages/db/fb/d29e343e7c57bbf1231275939f6e75eb740cd47a9d7cb2c52ffeb62ef869/charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
|
||||
{url = "https://files.pythonhosted.org/packages/dd/51/68b61b90b24ca35495956b718f35a9756ef7d3dd4b3c1508056fa98d1a1b/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
|
||||
{url = "https://files.pythonhosted.org/packages/df/3e/a06b18788ca2eb6695c9b22325b6fde7dde0f1d1838b1792a0076f58fe9d/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
|
||||
{url = "https://files.pythonhosted.org/packages/e1/9c/60729bf15dc82e3aaf5f71e81686e42e50715a1399770bcde1a9e43d09db/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
|
||||
{url = "https://files.pythonhosted.org/packages/e4/a6/7ee57823d46331ddc37dd00749c95b0edec2c79b15fc0d6e6efb532e89ac/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
|
||||
{url = "https://files.pythonhosted.org/packages/eb/5c/97d97248af4920bc68687d9c3b3c0f47c910e21a8ff80af4565a576bd2f0/charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
|
||||
{url = "https://files.pythonhosted.org/packages/ed/3a/a448bf035dce5da359daf9ae8a16b8a39623cc395a2ffb1620aa1bce62b0/charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
|
||||
{url = "https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
|
||||
{url = "https://files.pythonhosted.org/packages/ef/d4/a1d72a8f6aa754fdebe91b848912025d30ab7dced61e9ed8aabbf791ed65/charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
|
||||
{url = "https://files.pythonhosted.org/packages/f2/0e/e06bc07ef4673e4d24dc461333c254586bb759fdd075031539bab6514d07/charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
|
||||
{url = "https://files.pythonhosted.org/packages/f6/93/bb6cbeec3bf9da9b2eba458c15966658d1daa8b982c642f81c93ad9b40e1/charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
|
||||
{url = "https://files.pythonhosted.org/packages/f6/d3/bfc699ab2c4f9245867060744e8136d359412ff1e5ad93be38a46d160f9d/charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
|
||||
{url = "https://files.pythonhosted.org/packages/f7/9d/bcf4a449a438ed6f19790eee543a86a740c77508fbc5ddab210ab3ba3a9a/charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
|
||||
]
|
||||
"colorama 0.4.6" = [
|
||||
{url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||
{url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||
]
|
||||
"cryptography 41.0.5" = [
|
||||
{url = "https://files.pythonhosted.org/packages/05/40/ade6e708e6e90528dc50b215adce495fec49286f199bc11e4199b1666505/cryptography-41.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548"},
|
||||
{url = "https://files.pythonhosted.org/packages/0b/c1/2f1e8abb31ec0bf8b004052bbe0face0a8be386ed5ea30e5e300bfffd51a/cryptography-41.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797"},
|
||||
{url = "https://files.pythonhosted.org/packages/16/a7/38fdcdd634515f589c8c723608c0f0b38d66c6c2320b3095967486f3045a/cryptography-41.0.5.tar.gz", hash = "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"},
|
||||
{url = "https://files.pythonhosted.org/packages/1b/30/24cf09530df7ee5d85a3070b5ef8de5810b49130d955ae8bce11720b8b2a/cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72"},
|
||||
{url = "https://files.pythonhosted.org/packages/26/41/e5ebaad8b27f8662c92a7d4cb9bf16e488450cb4b6ee0fce5b78b3327679/cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723"},
|
||||
{url = "https://files.pythonhosted.org/packages/2a/6d/33e42b8595da059bf10beb1529e501d5817ed4480b1d285303d155cdfccd/cryptography-41.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1"},
|
||||
{url = "https://files.pythonhosted.org/packages/2a/d1/3e64e809eff9d8bda5d50ac95fcf419e33f8864c632d42afe011dca97f46/cryptography-41.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d"},
|
||||
{url = "https://files.pythonhosted.org/packages/2e/92/720491aae578d21d23934d816ef0620bd1081a1bfdc015f228cc8abccaf1/cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88"},
|
||||
{url = "https://files.pythonhosted.org/packages/3e/1b/1703679eface155413730f4a2313aebf846ae7496c15083ae9c07e7324b2/cryptography-41.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696"},
|
||||
{url = "https://files.pythonhosted.org/packages/48/4b/ef0a674e8ea1d7946dfed0fd3a683bd3a8134af7c7b1e2b0d49205bb494b/cryptography-41.0.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e"},
|
||||
{url = "https://files.pythonhosted.org/packages/4b/3d/081af0b323a8efd6cd9d9c5b248049b91a7c2cf5473fc67bae374f016781/cryptography-41.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d"},
|
||||
{url = "https://files.pythonhosted.org/packages/4d/47/f8f1a8f762e4e7b772d1c9898caec7fa0a1ed4de5b9a536d7997fbb7133c/cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86"},
|
||||
{url = "https://files.pythonhosted.org/packages/59/34/d3023b52daacea96c4cb0514bd9712011cac444ee45d166919386f7ac13f/cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179"},
|
||||
{url = "https://files.pythonhosted.org/packages/76/77/e5ed12b40bbb710137bec76dd43efa6151b43fdece233b647463349e38fa/cryptography-41.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5"},
|
||||
{url = "https://files.pythonhosted.org/packages/85/62/48bcebd955945d8da3fe9b84a679dbf4bf179e1ac36e583b7eaa47506758/cryptography-41.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20"},
|
||||
{url = "https://files.pythonhosted.org/packages/86/35/f03a42444866ef7f23134812a05012dcb509418214fb78ec848f28cd14b8/cryptography-41.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81"},
|
||||
{url = "https://files.pythonhosted.org/packages/9c/d5/fa53fbaac5a906b08d9a81beef10fc395cf5de8501897499adf54a3acdcd/cryptography-41.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf"},
|
||||
{url = "https://files.pythonhosted.org/packages/bb/36/5af9ca6e0b00bd0c40b0d0e3d95a1bfc4fb7e0b94e522d1394ff4f7505cc/cryptography-41.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147"},
|
||||
{url = "https://files.pythonhosted.org/packages/c2/e6/d653656f8864e629794f322ea53ef30dbc8c5ed4c1f0c162ab93451b0eb4/cryptography-41.0.5-cp37-abi3-win32.whl", hash = "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936"},
|
||||
{url = "https://files.pythonhosted.org/packages/e3/21/958e33e2c149461e0a93ca358b794771d55f781ca808efcadb86a4c08e49/cryptography-41.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da"},
|
||||
{url = "https://files.pythonhosted.org/packages/ea/04/a9b58dbaccbc226c3d81f8edfc3cb91497dc295f0cc28d693c4f524169a4/cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8"},
|
||||
{url = "https://files.pythonhosted.org/packages/ed/d9/97ca3b4ee56a77fee0ec7ecb2a354c260a11ad5bc50d1e3de165e71f2ec4/cryptography-41.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1"},
|
||||
{url = "https://files.pythonhosted.org/packages/f7/13/6de3719532415f83b38fc3b56188efd4c9a1fe3910d8cdeabf5fef8fe3f1/cryptography-41.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84"},
|
||||
]
|
||||
"h11 0.14.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
|
||||
{url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
|
||||
]
|
||||
"httpcore 1.0.2" = [
|
||||
{url = "https://files.pythonhosted.org/packages/18/56/78a38490b834fa0942cbe6d39bd8a7fd76316e8940319305a98d2b320366/httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"},
|
||||
{url = "https://files.pythonhosted.org/packages/56/ba/78b0a99c4da0ff8b0f59defa2f13ca4668189b134bd9840b6202a93d9a0f/httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"},
|
||||
]
|
||||
"httpx 0.25.1" = [
|
||||
{url = "https://files.pythonhosted.org/packages/1c/fe/c0523094193929a68b288e0ae3eb865725f1ee9faca0f21693a86e96c943/httpx-0.25.1.tar.gz", hash = "sha256:ffd96d5cf901e63863d9f1b4b6807861dbea4d301613415d9e6e57ead15fc5d0"},
|
||||
{url = "https://files.pythonhosted.org/packages/82/61/a5fca4a1e88e40969bbd0cf0d981f3aa76d5057db160b94f49603fc18740/httpx-0.25.1-py3-none-any.whl", hash = "sha256:fec7d6cc5c27c578a391f7e87b9aa7d3d8fbcd034f6399f9f79b45bcc12a866a"},
|
||||
]
|
||||
"idna 3.4" = [
|
||||
{url = "https://files.pythonhosted.org/packages/8b/e1/43beb3d38dba6cb420cefa297822eac205a277ab43e5ba5d5c46faf96438/idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
|
||||
{url = "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
|
||||
]
|
||||
"loguru 0.7.2" = [
|
||||
{url = "https://files.pythonhosted.org/packages/03/0a/4f6fed21aa246c6b49b561ca55facacc2a44b87d65b8b92362a8e99ba202/loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"},
|
||||
{url = "https://files.pythonhosted.org/packages/9e/30/d87a423766b24db416a46e9335b9602b054a72b96a88a241f2b09b560fa8/loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"},
|
||||
]
|
||||
"onepush 1.3.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/e1/a2/1d65907128f1b7980d7da0e68b134298ced50d38df8ddf5133e32c8e9f99/onepush-1.3.0-py3-none-any.whl", hash = "sha256:196af2e147a54381b5ffa32565f5f3955a0647328cc283812ce2f87f4bc09f47"},
|
||||
]
|
||||
"orjson 3.9.10" = [
|
||||
{url = "https://files.pythonhosted.org/packages/03/96/4fd0da4f4a5a450054e69439875b4e856654dcbbfea6907d7753b827c937/orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"},
|
||||
{url = "https://files.pythonhosted.org/packages/09/33/d090754faab1a63ecf80b1df220d6787605caefd570331c757a3553afbf2/orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"},
|
||||
{url = "https://files.pythonhosted.org/packages/17/e2/7ff96963ba854f0a807fd2783bd7d947ecb0cac7df1d802699727c418aec/orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"},
|
||||
{url = "https://files.pythonhosted.org/packages/18/3e/a94caa7b1bf60de94a007839cd929f97089d02ba7f91d6417073f0406a69/orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"},
|
||||
{url = "https://files.pythonhosted.org/packages/1d/75/fd2fe67a7a8d5dbf624b8171d2d118beb956856b1358085b3c106f181ef0/orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/2a/a8747496b05a565172349819add866db5729c12f18d502dd3b496d9d87cd/orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"},
|
||||
{url = "https://files.pythonhosted.org/packages/23/76/d2698b954bf1f1a3002f3c96b5524ef80b60de7d29100871c2c0b3effc95/orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"},
|
||||
{url = "https://files.pythonhosted.org/packages/25/98/fbd7ccfa0c65ee01164a5b43bf527f0bed100e7dea367221115fbcbb5b66/orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"},
|
||||
{url = "https://files.pythonhosted.org/packages/26/46/48e96fe45d0aa717e4d1a808b7d42e4be1fbdfc1d2c97e86930f6c6f779d/orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/87/df738743a001196415e68ec2e3998a3d191670f5df22d32d124585184ded/orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"},
|
||||
{url = "https://files.pythonhosted.org/packages/34/c0/faa1eb343588cad0afa7a2d36ec4a873e65b99c291342fe375d4da1b3a26/orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"},
|
||||
{url = "https://files.pythonhosted.org/packages/39/c2/e60f7964d3b42395997b446885da8dd0065602f97b3da1ca66f26d150feb/orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"},
|
||||
{url = "https://files.pythonhosted.org/packages/40/93/53523939d0987d36fc4035b971cf3de376332e8f2d77bc8f04125f7f7215/orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"},
|
||||
{url = "https://files.pythonhosted.org/packages/42/5b/d4e30811886f009424c08e5ca56a4b23ef536333163e02ddbff6dc3a9a9d/orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"},
|
||||
{url = "https://files.pythonhosted.org/packages/49/94/6cff6e8c3e7b5432ac0de02a3946071764847fd492b4c5090b61b1c13244/orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"},
|
||||
{url = "https://files.pythonhosted.org/packages/4c/57/ad919abe2aed396ec081a72708db03e9af3ed30d1ba78db6929a2920b42a/orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"},
|
||||
{url = "https://files.pythonhosted.org/packages/52/1d/d99ae729b6eb97c6f66595dcaed29af3814f89dc2768c85977dff9d9d114/orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"},
|
||||
{url = "https://files.pythonhosted.org/packages/54/bf/2c3482f397894f25e4399f7d48c483cc757e8c1201a933696fe399cc9271/orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"},
|
||||
{url = "https://files.pythonhosted.org/packages/5a/23/42d1db93fd31ee9fea79c448ddb511fa574f6f281d3bdfa9e2c7d943296a/orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"},
|
||||
{url = "https://files.pythonhosted.org/packages/5c/96/56f64b82615cc99d561acf3936f3f5e466f749bc5c0bd40f20f6bd30cf76/orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"},
|
||||
{url = "https://files.pythonhosted.org/packages/5d/30/c64b59de053c0bd0d8e8e0fdc2a3485a1cee55e5ff118592110bcbf85aa3/orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"},
|
||||
{url = "https://files.pythonhosted.org/packages/5d/67/d7837cf0ac956e3c81c67dda3e8f2ffc60dd50ffc480ec7c17f2e22a36ae/orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"},
|
||||
{url = "https://files.pythonhosted.org/packages/60/fe/756b9df73ec02eb714ddbb5613ee02221576a7afe9617f94381e85c47af3/orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"},
|
||||
{url = "https://files.pythonhosted.org/packages/62/84/766a9973ede5e1fe8a2015a92211728934fed541c9fe1aa140115e432617/orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"},
|
||||
{url = "https://files.pythonhosted.org/packages/72/75/642688bf5d99131fe8cf603f4ef9f26e4b1c6ed8f7f5c7e6fb31def54fb7/orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"},
|
||||
{url = "https://files.pythonhosted.org/packages/73/af/eed54ce0ca853b6c1c481fe2713362f44ad0827cfed4f444f006b737ef4d/orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"},
|
||||
{url = "https://files.pythonhosted.org/packages/78/9a/9be97bc0e4c77aff1ca441f438825d2f491d61c4c408d6ef4b80c87bb425/orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"},
|
||||
{url = "https://files.pythonhosted.org/packages/7f/3f/f97d64f29a6b86c1e03802927b82a329efcdcc65f8c454caf0d773145d25/orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"},
|
||||
{url = "https://files.pythonhosted.org/packages/86/70/487588bbf549aecf797de7414b83d1c6eb5fc88c3ef8314d0e02c72beb41/orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"},
|
||||
{url = "https://files.pythonhosted.org/packages/89/9b/4c1d2d1587621de5a04bd53d8d67406d25f9ce74dea7babe77615f9d4783/orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"},
|
||||
{url = "https://files.pythonhosted.org/packages/a2/49/2eaf69e8805f97934bcb4f26ef3ef1d86c2338d4d2730d6fd1f14dcaa62d/orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"},
|
||||
{url = "https://files.pythonhosted.org/packages/a9/96/fab12f5c586b1cabd11886d9c67044af68916a5cdaf6f00b25b86a5604c2/orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"},
|
||||
{url = "https://files.pythonhosted.org/packages/b0/6e/1b75897f9afae0eb7d72b0bedd371ef2d9063d4616444b6f4364689785f3/orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"},
|
||||
{url = "https://files.pythonhosted.org/packages/b0/f6/7520e29d05b043d3b95fb40bc7830353700e7251e18fe6bbba2276a8df06/orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"},
|
||||
{url = "https://files.pythonhosted.org/packages/bd/92/0c2bdb7f94b2446d7129cbb1dbe51eefa4d0e3dfbef06e1e385e9049b47f/orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"},
|
||||
{url = "https://files.pythonhosted.org/packages/bd/db/3371b0e060be149a8eef58489a43e0adbd5f79d57bb66d881b2aaf756494/orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"},
|
||||
{url = "https://files.pythonhosted.org/packages/c0/16/d4bb7c683f0361eb0398ca30e81e3edfa58aa313e70a0812c75d9c0f6c4b/orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"},
|
||||
{url = "https://files.pythonhosted.org/packages/c3/44/704d7a3e989fb9e4131920a990f2d931a41ab7e85959b648508120b26677/orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"},
|
||||
{url = "https://files.pythonhosted.org/packages/d1/2b/79eaa5ab9552299eddfcb769944fd475f35b3d7d71e2b98754dc1a455f65/orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"},
|
||||
{url = "https://files.pythonhosted.org/packages/d9/57/7924f0228d235c3ce72da6d822dade9d3469982b2043685285bee3500de1/orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"},
|
||||
{url = "https://files.pythonhosted.org/packages/dd/14/fb9335efdc8c01f7a3a34bb37fde8af325242066d19df27211f2bc402dd5/orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"},
|
||||
{url = "https://files.pythonhosted.org/packages/df/01/e87878a81d12d9c6fd4c53a304d2820c19e07ff33e66cbbd8f39ce780c96/orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"},
|
||||
{url = "https://files.pythonhosted.org/packages/e0/1e/6732d94424f7c17eb558c52435a7bbe10883d5ecfe0712288d0c0b963b52/orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"},
|
||||
{url = "https://files.pythonhosted.org/packages/e3/35/f2c568fb2aedc22407ade7080cbbed7dedf893b97bfeee48c2901d6a440f/orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"},
|
||||
{url = "https://files.pythonhosted.org/packages/e4/1f/5570483ddd4a81500a0ffdc7727aa546a92b77a472dadc052013a4ec740b/orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"},
|
||||
{url = "https://files.pythonhosted.org/packages/e5/19/dae2f7bdef43f07a51f6f2461777e93d0b31e5d7b46ac8f1bd46dc499f4e/orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"},
|
||||
{url = "https://files.pythonhosted.org/packages/e8/91/db831f3bd2b66793a25c53a4642a16b6e83d4681605ac25703ddda0f7e71/orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"},
|
||||
{url = "https://files.pythonhosted.org/packages/f3/93/3f57a2014c884f446ce8452fe5a047f090ad87cf752e3175f49f7cf21857/orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"},
|
||||
{url = "https://files.pythonhosted.org/packages/f8/c7/7d458f3074ddbef351d7738ab1fe8a270a18e09b8709546aab20220c3cfb/orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"},
|
||||
{url = "https://files.pythonhosted.org/packages/fe/24/9a747fccd553e6cf7dc849fef15793386d7b007172a44cfe004eca3c6e4f/orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"},
|
||||
]
|
||||
"pycparser 2.21" = [
|
||||
{url = "https://files.pythonhosted.org/packages/5e/0b/95d387f5f4433cb0f53ff7ad859bd2c6051051cebbb564f139a999ab46de/pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
|
||||
{url = "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
|
||||
]
|
||||
"pycryptodome 3.19.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/00/e6/73931df4046e34a6354d323b4a5b5c18e5184f4a08687806ee3353c81a6b/pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434"},
|
||||
{url = "https://files.pythonhosted.org/packages/14/54/73900e62cb7fc998556f2aa47089a6eef0b5cb7ecba61c5f6ac58bcf28c2/pycryptodome-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49"},
|
||||
{url = "https://files.pythonhosted.org/packages/15/e2/e2c1da755bcaf09bda2856ea3d6238d86291fe00b4d2799c8937cf2c717a/pycryptodome-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0"},
|
||||
{url = "https://files.pythonhosted.org/packages/16/ec/90760498fa5342a17f62feb19d126198c7992e29e4319723f6bcf025365c/pycryptodome-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405"},
|
||||
{url = "https://files.pythonhosted.org/packages/1a/72/acc37a491b95849b51a2cced64df62aaff6a5c82d26aca10bc99dbda025b/pycryptodome-3.19.0.tar.gz", hash = "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"},
|
||||
{url = "https://files.pythonhosted.org/packages/1b/ad/2699516926592369917dbd1894ac5d25e371680f53b628b530e94db314b5/pycryptodome-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/03/bd639213eba37d29a16d359b42def13def905a456358f8af52107fc4e8a4/pycryptodome-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f"},
|
||||
{url = "https://files.pythonhosted.org/packages/21/c2/2ecf1d8645df123f0a67f8a965cf961b291c738cfc38625cb34bd33af4de/pycryptodome-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f"},
|
||||
{url = "https://files.pythonhosted.org/packages/23/e0/b3ecb14fd9869b68706ff234583471e05104c7ca2db196ed234f5a030d05/pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa"},
|
||||
{url = "https://files.pythonhosted.org/packages/2d/8a/a05cb7434cda97da2491bee1418be9651ce99fec74bfe95320e153845853/pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1"},
|
||||
{url = "https://files.pythonhosted.org/packages/30/7f/728391d15a1d71d78232539a2141b472a6e7f6cd12af316c150beb3093f0/pycryptodome-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/35/2b14645adfaa081d5b30c28e5d433bf460d8d47c2834f172cedf62b26978/pycryptodome-3.19.0-cp35-abi3-win32.whl", hash = "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997"},
|
||||
{url = "https://files.pythonhosted.org/packages/38/84/d429fafe45c0a32dc7d759fbb9b917282944d6852cdaf9e5dc743ea7b0aa/pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9"},
|
||||
{url = "https://files.pythonhosted.org/packages/3c/33/6db737891448ad0607b683f34c5ced7b39620b7826aed52a83cb233fc2b9/pycryptodome-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c"},
|
||||
{url = "https://files.pythonhosted.org/packages/42/99/a0fd55f1fa59d6a5cd6541432dcbd13b9ad7d8787530c7212ddec707b58a/pycryptodome-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea"},
|
||||
{url = "https://files.pythonhosted.org/packages/44/15/d6e3bbc6be85058d7a9997c4b119fe6b7f1804fb65513ddd1537ecaa225d/pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc"},
|
||||
{url = "https://files.pythonhosted.org/packages/44/f0/2286a280a94471fb9248a8afa36b264e7d7ea778620f18b81284e02fdf38/pycryptodome-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db"},
|
||||
{url = "https://files.pythonhosted.org/packages/53/ad/f56dab6f62dfc09583c15f4bcdb70a4dda775e4ce1b31aeb5eef74624db9/pycryptodome-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34"},
|
||||
{url = "https://files.pythonhosted.org/packages/5f/a7/ea48485b470ac50d914fc668620578b8ddb2c42033893d09af1b9fe90a31/pycryptodome-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4"},
|
||||
{url = "https://files.pythonhosted.org/packages/82/b7/876ced7a574843bf6358da5a2faa910925a8b9eb79bb7f164d070dbf72ae/pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33"},
|
||||
{url = "https://files.pythonhosted.org/packages/87/c4/c979db0914a23541d62c9e4b5e8a30f56a78c6dec8677db6a5327d306be5/pycryptodome-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810"},
|
||||
{url = "https://files.pythonhosted.org/packages/91/4e/ef9af3cbd716ea80e920c791af0c66b1615542dd4453312117acf8327667/pycryptodome-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631"},
|
||||
{url = "https://files.pythonhosted.org/packages/95/bc/4ae55ac69dd31c0004c38b1e34c8cefbce0d384927de596a3d73d7e506a3/pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a"},
|
||||
{url = "https://files.pythonhosted.org/packages/a8/62/a25ffede38886e42e7b4d4c13b8529fdbebc441b0ef74ff9d2ddac60f019/pycryptodome-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa"},
|
||||
{url = "https://files.pythonhosted.org/packages/b8/97/243bc2019517abb13051e197f33deaf69493bbe020846e6571c7a485a428/pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde"},
|
||||
{url = "https://files.pythonhosted.org/packages/c8/c1/9978ddb32d54569e4c160a5a9db20b7c7cdb1043d63da3b4135ce417643c/pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400"},
|
||||
{url = "https://files.pythonhosted.org/packages/d1/ba/990582a3bcf5eaeb7a9442d853dc921ba0d185f19aad9521ed1951c7b96f/pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e"},
|
||||
{url = "https://files.pythonhosted.org/packages/d5/43/df7e6633563ee913bac35b05ef9b40359e4be06961c870953b23310095ab/pycryptodome-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7"},
|
||||
{url = "https://files.pythonhosted.org/packages/d6/df/295e56dca0b4834665626326359c5a1f3092287be56db4b316926df7ad0c/pycryptodome-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb"},
|
||||
{url = "https://files.pythonhosted.org/packages/da/63/43feb85e3183e4bcd0d3780579c8006f37e8bd2438812a210a4738728244/pycryptodome-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270"},
|
||||
{url = "https://files.pythonhosted.org/packages/e0/19/25a95c687bf0d79c977170fd085e395990ea2b6f3ed888cd66e8543f9127/pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5"},
|
||||
{url = "https://files.pythonhosted.org/packages/fc/e3/2a39e57b25b3ec374171e314596d550440a7ee1609374e388f63c2ab08e6/pycryptodome-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551"},
|
||||
]
|
||||
"pydantic 2.4.2" = [
|
||||
{url = "https://files.pythonhosted.org/packages/73/66/0a72c9fcde42e5650c8d8d5c5c1873b9a3893018020c77ca8eb62708b923/pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"},
|
||||
{url = "https://files.pythonhosted.org/packages/df/e8/4f94ebd6972eff3babcea695d9634a4d60bea63955b9a4a413ec2fd3dd41/pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"},
|
||||
]
|
||||
"pydantic-core 2.10.1" = [
|
||||
{url = "https://files.pythonhosted.org/packages/00/64/a8521cfc5f5f857190b761022ec1eae7c714a9d8ce02a9388affd007fdee/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"},
|
||||
{url = "https://files.pythonhosted.org/packages/06/4e/3f8f1cab0b0cbf97dda7d4e9e4e97d5543b2cf51655809dffc9b43ca8816/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"},
|
||||
{url = "https://files.pythonhosted.org/packages/0b/0e/65f6de84186c694ee8345d58cc625fe347ae7682374e2d6538bfad04a649/pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"},
|
||||
{url = "https://files.pythonhosted.org/packages/0d/d0/53f3bfc6be4d7a12e4314646c3e8c6da5d57495a5043649edb687bc7a1a1/pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"},
|
||||
{url = "https://files.pythonhosted.org/packages/0e/50/d03292a5537a237a0ccce6613749fd9b88e56d98c6cc3a39e768002a5867/pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"},
|
||||
{url = "https://files.pythonhosted.org/packages/0f/9b/268b31c715ab6d059488598529481ec82285ef9c04241a093dd56926df16/pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"},
|
||||
{url = "https://files.pythonhosted.org/packages/12/68/c7aa1266bd4e23d95a7fedf5874baed39c5b9a60c5f0a97d523ed8356c44/pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"},
|
||||
{url = "https://files.pythonhosted.org/packages/14/9e/73f8d78835857518df4af04be11669b5a7cfd3211d66aacdf7e67eaed1c4/pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"},
|
||||
{url = "https://files.pythonhosted.org/packages/19/95/cd2e41b009ef5ef35001567115456c80414e723932dfd26685ee420e0cbf/pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"},
|
||||
{url = "https://files.pythonhosted.org/packages/1b/5d/f3d45e0147af991484e053da020bfbb151cd30bbbfe0538f13342cf13754/pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"},
|
||||
{url = "https://files.pythonhosted.org/packages/1d/f8/9b27ecd02750f02e30d0761a2bcc688b7693d1c0edac35c5a11ae6dc9c07/pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"},
|
||||
{url = "https://files.pythonhosted.org/packages/1e/3f/86b9209f6a68a28a90327aed12a3cd62f0c124bf9186d294de3c5b90b935/pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"},
|
||||
{url = "https://files.pythonhosted.org/packages/1e/5c/8e9256d3e72f0f2f213287bd08753a0fded4164f907f5e0232269b548bc2/pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"},
|
||||
{url = "https://files.pythonhosted.org/packages/1e/7d/1d9aca00181f223388f439d0cd1c20c6a99d37ae3a00640c3e7da09dc7f6/pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"},
|
||||
{url = "https://files.pythonhosted.org/packages/23/7b/ebce15ffe162a0b2e6b3f4f07e6d884c52da418b6b8cdff6382e1a5958ec/pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"},
|
||||
{url = "https://files.pythonhosted.org/packages/25/b3/ec5f941873a70afa8db9f15e6e36d3cb4ed71005ebf7f76701d230b5cec8/pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"},
|
||||
{url = "https://files.pythonhosted.org/packages/27/28/fb4d1d9da89a9a920ae7ea18b026aee548d1129264db9447a465083931c7/pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"},
|
||||
{url = "https://files.pythonhosted.org/packages/28/f3/5d62112cfdfc076d8c4e02aefc0529806fe6579b4e2200045b63863e60ac/pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"},
|
||||
{url = "https://files.pythonhosted.org/packages/2b/a4/0da1a5968ef277a7d5cb63010ec03af779863691fa020b6720a004a3f885/pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"},
|
||||
{url = "https://files.pythonhosted.org/packages/2c/d3/be75d6e8521720f75e7c8c068b525f7556a683ad77f68da8ebb1eb704a90/pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"},
|
||||
{url = "https://files.pythonhosted.org/packages/2d/1c/735cfef9c07cd9b03d75b3b98c86692e2913fb06cb04738faa9fcedeabf3/pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"},
|
||||
{url = "https://files.pythonhosted.org/packages/2f/2a/280c5a4fdd54749c4efcb455b324658cf341313469617a987fb0bd178e47/pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"},
|
||||
{url = "https://files.pythonhosted.org/packages/2f/4d/212cac1a005bb34bc24ca13469c062fb96e5efd2683999acca4a23f10b75/pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"},
|
||||
{url = "https://files.pythonhosted.org/packages/32/22/d010091430a0a43ebd5ade2abe69727972b53d872ecffbe9ab3aed1f3ea5/pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/29/be841774e59e7d355ed9a42b799984576cbdf7b92dbaeb5e01c68c9b90ee/pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"},
|
||||
{url = "https://files.pythonhosted.org/packages/33/50/e9ed10546bc169f49240e1bd5642fe2235a60bccfd5ec9e8f3dadee8932e/pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"},
|
||||
{url = "https://files.pythonhosted.org/packages/35/6e/9dde2f91a1e95f986b1e137fbb61dcdfe3217b7aad1c1bc8b56894258816/pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"},
|
||||
{url = "https://files.pythonhosted.org/packages/39/09/120c06a52ed4bb1022d060bec0a16e5deb4ce79a1c4c11ef9519bc32b59f/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"},
|
||||
{url = "https://files.pythonhosted.org/packages/3c/f0/644ac22b5d3e0b6a79c0c9dcbb26784de3939baef0ec0c21f10db2283d83/pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"},
|
||||
{url = "https://files.pythonhosted.org/packages/3f/82/c50cf91f9a89f38e1519d6d4024cb57c9a42c15b1fd64f8b1404093d9a7f/pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"},
|
||||
{url = "https://files.pythonhosted.org/packages/41/08/a03df23464230390171e195804996548325e0152d02c287e8eac047b11cc/pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"},
|
||||
{url = "https://files.pythonhosted.org/packages/42/07/db979876f056cf635bda6befd2ae36c70c7288f5ce1d359a9d69fce52e85/pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"},
|
||||
{url = "https://files.pythonhosted.org/packages/43/e9/7f504abc12a6b143aed087b38b1648c39a534bda918d4b929a6fa851d1f5/pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"},
|
||||
{url = "https://files.pythonhosted.org/packages/44/4f/0906a1469b281800a4a7a4d1a986f129cdf2f922df115b8981f34e03bf05/pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"},
|
||||
{url = "https://files.pythonhosted.org/packages/45/49/1a11586e2e4bc052581cc7f9d3090c23fb49c2572536dd26004764603959/pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"},
|
||||
{url = "https://files.pythonhosted.org/packages/46/d2/29a7aaa07340d3f5509065167f33ff4241c9b9f1496ce326434a8ebf8d7d/pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"},
|
||||
{url = "https://files.pythonhosted.org/packages/49/53/c8efc99c928083e2338628adfa1d6985ec622a0b348247611406a77640f2/pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"},
|
||||
{url = "https://files.pythonhosted.org/packages/53/f7/2319b5d77bd725180269a8c6157f37dd0cfa335b47350800574e7484f3c5/pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"},
|
||||
{url = "https://files.pythonhosted.org/packages/53/ff/c76665d6724f556e81e6bbedd8a0966be84cea838c2f29249cef5140cbed/pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"},
|
||||
{url = "https://files.pythonhosted.org/packages/56/94/11edcb82202d15559f451f842175356368a06e9aaaa996cf386e5b28c8b5/pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"},
|
||||
{url = "https://files.pythonhosted.org/packages/57/5b/f8d8bc3523065978eec7bd2e43d5e335e1993cd708a941440a0e71d21fc3/pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"},
|
||||
{url = "https://files.pythonhosted.org/packages/58/2e/8f9abc988bf25385e6418c607ba21a311b48ca0ff24399387f6a0276221c/pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"},
|
||||
{url = "https://files.pythonhosted.org/packages/5d/3e/5583d9a606ce3884c2d624d7b1114a4572c17cc26b6601f09a6be2a3f918/pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"},
|
||||
{url = "https://files.pythonhosted.org/packages/69/94/134f22de331ff0f612cd246523acf9ec8ce0bce84bd2d9054d61a74166dc/pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"},
|
||||
{url = "https://files.pythonhosted.org/packages/6c/18/d73a329b97fce152b991c0fa7686f247820a87cb8cee5f1e731913a926c1/pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"},
|
||||
{url = "https://files.pythonhosted.org/packages/70/bb/9d8fdd27c7cfb3d9c37e6a03591d0fb1fefd97193af108c389ea48d3a0a9/pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"},
|
||||
{url = "https://files.pythonhosted.org/packages/72/eb/857c94a1fe04724ca3cf8101b795dbc345ccda1093c9c402bc234494f8bd/pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"},
|
||||
{url = "https://files.pythonhosted.org/packages/7b/32/4c23d835f1aec938debae87527b4abe98bb65d49c7a48505167e03f65ec9/pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"},
|
||||
{url = "https://files.pythonhosted.org/packages/7c/49/bd863a3d7c5412d739f3a28da0f437f25ccfa92413675c93412e64b812ed/pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"},
|
||||
{url = "https://files.pythonhosted.org/packages/7e/32/0f8afe171b96c264d2c3bbf7986763699edc7f1156265f1170cb9d978155/pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"},
|
||||
{url = "https://files.pythonhosted.org/packages/7e/79/ce020f23d8e4e874aa95e4097a90804912b933145aa870818fdfd8c86739/pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"},
|
||||
{url = "https://files.pythonhosted.org/packages/84/68/e543eb8279c6f3bd83938c4cbfe4b7b52ac82840bc47f658ee3f98d06647/pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"},
|
||||
{url = "https://files.pythonhosted.org/packages/84/a1/4ed094546618713168de952b2d39b3a99df186ae9cf320e979497c5a2cd9/pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"},
|
||||
{url = "https://files.pythonhosted.org/packages/86/67/d36e2237d84ac96f400e29586da1e21eabf9aa227fc9c3e4410fbc6408de/pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"},
|
||||
{url = "https://files.pythonhosted.org/packages/8a/0d/b5dfdc0e944964270d7f481967a8f58b0721a15fea8ff811d01825555e69/pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"},
|
||||
{url = "https://files.pythonhosted.org/packages/8d/ab/baf66342f1d18228ed3e54a05308b967c3de3692517f3237c570447e6256/pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"},
|
||||
{url = "https://files.pythonhosted.org/packages/92/69/9c74485cd3ac2c9c1d8ab9336dd0ccd23d3f24449501116684561a8eff76/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"},
|
||||
{url = "https://files.pythonhosted.org/packages/93/35/15886e78deced0b90b1d7869ab7b77ba32549f15a608cce0788f6377660e/pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"},
|
||||
{url = "https://files.pythonhosted.org/packages/93/44/cae38dcb9eed4e7e5b6ae1a26d99097a3bc32ee959a147268abcb54a6c89/pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"},
|
||||
{url = "https://files.pythonhosted.org/packages/9f/9a/321a73f6f1483b1ddd41fae7bb7cf9465461bad8fa132880b97ca462ee1a/pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"},
|
||||
{url = "https://files.pythonhosted.org/packages/a2/38/0d848085c1e70ac83ea34a6798eb3e0d5f28c9659f88222a89c71c480cc9/pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"},
|
||||
{url = "https://files.pythonhosted.org/packages/a4/5e/f8436267bb9a35099a75237325107beb640a5a8c8b718492381e9b836719/pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"},
|
||||
{url = "https://files.pythonhosted.org/packages/a6/4e/69413225ad2530bc468fa049373c48da12c7e27dc21915124c5d2574a593/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"},
|
||||
{url = "https://files.pythonhosted.org/packages/a8/0b/68680fb71a4b0e044a7c8719fd5fee8a4b5746ade2cd00399fff7f881545/pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"},
|
||||
{url = "https://files.pythonhosted.org/packages/aa/c9/e007230e7989398216a427bcc38b92f72eb1938e3fcf1e22834c9df53882/pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"},
|
||||
{url = "https://files.pythonhosted.org/packages/af/31/8e466c6ed47cddf23013d2f2ccf3fdb5b908ffa1d5c444150c41690d6eca/pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"},
|
||||
{url = "https://files.pythonhosted.org/packages/b2/c3/08750ddfa34666b929eb1cd37bd38cc3c75cf8a10703cdbdcdc0ee954571/pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"},
|
||||
{url = "https://files.pythonhosted.org/packages/b3/03/4231e45a795f9637f03bf494c408425302654f41e78800c69937c758bd9e/pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"},
|
||||
{url = "https://files.pythonhosted.org/packages/b3/c2/7995f1c63b8bf0d74a04a40bfa6438d9efb65eafd49f29bb3a604424af83/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"},
|
||||
{url = "https://files.pythonhosted.org/packages/b5/42/16ea5f43da4528747947eba4dc1fddf798adac189297784702b028025ce9/pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"},
|
||||
{url = "https://files.pythonhosted.org/packages/b8/57/a90587737429561f1917d034c6db46b17bd560520ac6ef8dee261f7a421e/pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"},
|
||||
{url = "https://files.pythonhosted.org/packages/b8/90/f8841bb866c1fe080eabc784c79641f25e280ab9a4d77ac719d702749af9/pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"},
|
||||
{url = "https://files.pythonhosted.org/packages/b9/20/d2beaa2b2935de6dd4212d3429680ec1da3fecda7c6230bafa866a5c3a1d/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"},
|
||||
{url = "https://files.pythonhosted.org/packages/b9/51/2f69af3df07b9bb0f69599f688eb196f45487742ec2fb06f933f04b5a91c/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"},
|
||||
{url = "https://files.pythonhosted.org/packages/b9/b6/c13996fe8881ee4ec4e0e41006d6fbd98d346ff4dfa1972c94a15dcb19df/pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"},
|
||||
{url = "https://files.pythonhosted.org/packages/ba/3a/24d971c152d8d9c8768558e9ee2f4861e0e2a17ba1713a12ebc8f13ce2cd/pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"},
|
||||
{url = "https://files.pythonhosted.org/packages/bc/45/bf9598373902a270955850dccb365f8a9706c11356e2d4a087fe47cbb93d/pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"},
|
||||
{url = "https://files.pythonhosted.org/packages/bc/99/aa826dab5fd0f6aa49d91ed12e7f7ccda343765198ad3ebdf08b3e684faf/pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"},
|
||||
{url = "https://files.pythonhosted.org/packages/be/cc/66adc75728ab224d7907cbea1c56c6ae52dfedc32a7097aec9a139e41f70/pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"},
|
||||
{url = "https://files.pythonhosted.org/packages/bf/13/38cbe60e0f8e5af4cc84e61e45b589f18c6fa9b0e6eae05005560d20b267/pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"},
|
||||
{url = "https://files.pythonhosted.org/packages/bf/8e/7bc10d457262fffc6fa934bfdc3f318dca4e06ef4cbd7ee10ea25c617424/pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"},
|
||||
{url = "https://files.pythonhosted.org/packages/c4/43/7c6f10654facb41938e3296ca982a912900ea16e1f223b1fea2296c6c0f6/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"},
|
||||
{url = "https://files.pythonhosted.org/packages/c4/67/a5c3f28ccf231cd3d44abab76b719e923767b50ec7c62f706187c4f5b14e/pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"},
|
||||
{url = "https://files.pythonhosted.org/packages/c5/68/5ae011884f1e8eda0bd56db36a021b79891da9f10d64152b569e2a76bdd6/pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"},
|
||||
{url = "https://files.pythonhosted.org/packages/c5/f7/22bc55b9f675d0ea46abb3b0f7599958ac6302ed5ecca45dd9235aebc977/pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"},
|
||||
{url = "https://files.pythonhosted.org/packages/c8/4c/1435b9c71e6f00ee4d866e9e4acd1d679cb512afe406efc0983a0c13fc10/pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"},
|
||||
{url = "https://files.pythonhosted.org/packages/cb/1b/069642e5091a5c36ef4a89f98acd0cde0bcad5d019d9e4a5a467e7e6ff86/pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"},
|
||||
{url = "https://files.pythonhosted.org/packages/cc/7d/b51952bbabf35b766088544dac44a88f4dc8a00f4a5235ac3955c7aa4285/pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"},
|
||||
{url = "https://files.pythonhosted.org/packages/ce/8a/c8a1b8bc5f89ca9b3a1777b6b66cd0ec7a204bbc81ecd7eb3fba8133f461/pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"},
|
||||
{url = "https://files.pythonhosted.org/packages/d4/61/8887e44c3f4399d872223adce03bc0c235bb3aee168c71f120398cfe1fcf/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"},
|
||||
{url = "https://files.pythonhosted.org/packages/d5/de/dec5a958a906da5376b21743006e682e41b4a5725a06d1519b62bf9a8427/pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"},
|
||||
{url = "https://files.pythonhosted.org/packages/d8/e1/f5b1466ffa7ab31db11655f52ba3bd98a9959e9b9ea94ddcc38ecccdb3d6/pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"},
|
||||
{url = "https://files.pythonhosted.org/packages/da/82/4139ea7aebec9e22be42d8a5342df5022b7b6b6deb10126dc3ff80b4d6fd/pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"},
|
||||
{url = "https://files.pythonhosted.org/packages/db/d7/510c3d79ea9e8134f951629011a5f9fce5be2f4f65faf6c8666077e0212b/pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"},
|
||||
{url = "https://files.pythonhosted.org/packages/de/e1/794b3cda45269e6f957849820bce0bde24bf9be91dd57161a7baf6fcf143/pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"},
|
||||
{url = "https://files.pythonhosted.org/packages/e0/ac/699f0d88ac642a6ce87fa412940e95b020c12188819bedff465ec2ba7aff/pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"},
|
||||
{url = "https://files.pythonhosted.org/packages/e5/ba/099acbaf08a78bddb5e857e3a25b5544a5391109b60e0600447b4161e813/pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"},
|
||||
{url = "https://files.pythonhosted.org/packages/e6/59/050694e5cf10528f964c8e4a44e5b449fcd64dd37517d1e281c675072af0/pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"},
|
||||
{url = "https://files.pythonhosted.org/packages/e7/3a/e08a51157b4777dd0e4546a626dc7581c2ec910e7513a3f3d840e785e121/pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"},
|
||||
{url = "https://files.pythonhosted.org/packages/e8/e7/fe7fc52d4d3107e24b2e87d184fa46ca27a0bcd2d505b55baf6420ae2714/pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"},
|
||||
{url = "https://files.pythonhosted.org/packages/e9/bf/0358af0fcbfcb2aa67057fbf5405947bd5eeefd7622d9718ae705f69f4b2/pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"},
|
||||
{url = "https://files.pythonhosted.org/packages/ed/4b/54ffc25d0807c3c1f2381b1a285dc19d931e644425756dd8054a226b3c5e/pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"},
|
||||
{url = "https://files.pythonhosted.org/packages/f1/27/dd4772d6ca3edd7fad8276ecb1386b5a950ac1c5421dc59b8be743bf26ae/pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"},
|
||||
{url = "https://files.pythonhosted.org/packages/f9/7d/42cad280f2952f3c3a68aaac4133d2d3749102cf2ded9dce6cfcd41d61b6/pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"},
|
||||
{url = "https://files.pythonhosted.org/packages/f9/81/9f6f19e4763a684713c128d4cd0597d5a31ca625ebd36e8e44fcfe3814e8/pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"},
|
||||
{url = "https://files.pythonhosted.org/packages/fd/a5/6b9eca1da69b6c51442422d8fcc8453c838a712c01fbedf260e2b0124203/pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"},
|
||||
]
|
||||
"pyyaml 6.0.1" = [
|
||||
{url = "https://files.pythonhosted.org/packages/02/74/b2320ebe006b6a521cf929c78f12a220b9db319b38165023623ed195654b/PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
|
||||
{url = "https://files.pythonhosted.org/packages/03/5c/c4671451b2f1d76ebe352c0945d4cd13500adb5d05f5a51ee296d80152f7/PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
|
||||
{url = "https://files.pythonhosted.org/packages/03/f7/4f8b71f3ce8cfb2c06e814aeda5b26ecc62ecb5cf85f5c8898be34e6eb6a/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
|
||||
{url = "https://files.pythonhosted.org/packages/06/92/e0224aa6ebf9dc54a06a4609da37da40bb08d126f5535d81bff6b417b2ae/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
|
||||
{url = "https://files.pythonhosted.org/packages/07/91/45dfd0ef821a7f41d9d0136ea3608bb5b1653e42fd56a7970532cb5c003f/PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
|
||||
{url = "https://files.pythonhosted.org/packages/0d/46/62ae77677e532c0af6c81ddd6f3dbc16bdcc1208b077457354442d220bfb/PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
|
||||
{url = "https://files.pythonhosted.org/packages/0e/88/21b2f16cb2123c1e9375f2c93486e35fdc86e63f02e274f0e99c589ef153/PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
|
||||
{url = "https://files.pythonhosted.org/packages/1e/ae/964ccb88a938f20ece5754878f182cfbd846924930d02d29d06af8d4c69e/PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
|
||||
{url = "https://files.pythonhosted.org/packages/24/62/7fcc372442ec8ea331da18c24b13710e010c5073ab851ef36bf9dacb283f/PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
|
||||
{url = "https://files.pythonhosted.org/packages/24/97/9b59b43431f98d01806b288532da38099cc6f2fea0f3d712e21e269c0279/PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
|
||||
{url = "https://files.pythonhosted.org/packages/27/d5/fb4f7a3c96af89c214387af42c76117d2c2a0a40576e217632548a6e1aff/PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
|
||||
{url = "https://files.pythonhosted.org/packages/28/09/55f715ddbf95a054b764b547f617e22f1d5e45d83905660e9a088078fe67/PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
|
||||
{url = "https://files.pythonhosted.org/packages/29/0f/9782fa5b10152abf033aec56a601177ead85ee03b57781f2d9fced09eefc/PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
|
||||
{url = "https://files.pythonhosted.org/packages/29/61/bf33c6c85c55bc45a29eee3195848ff2d518d84735eb0e2d8cb42e0d285e/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
|
||||
{url = "https://files.pythonhosted.org/packages/2b/9f/fbade56564ad486809c27b322d0f7e6a89c01f6b4fe208402e90d4443a99/PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
|
||||
{url = "https://files.pythonhosted.org/packages/2e/97/3e0e089ee85e840f4b15bfa00e4e63d84a3691ababbfea92d6f820ea6f21/PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
|
||||
{url = "https://files.pythonhosted.org/packages/40/da/a175a35cf5583580e90ac3e2a3dbca90e43011593ae62ce63f79d7b28d92/PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
|
||||
{url = "https://files.pythonhosted.org/packages/41/9a/1c4c51f1a0d2b6fd805973701ab0ec84d5e622c5aaa573b0e1157f132809/PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
|
||||
{url = "https://files.pythonhosted.org/packages/4a/4b/c71ef18ef83c82f99e6da8332910692af78ea32bd1d1d76c9787dfa36aea/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
|
||||
{url = "https://files.pythonhosted.org/packages/4d/f1/08f06159739254c8947899c9fc901241614195db15ba8802ff142237664c/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
|
||||
{url = "https://files.pythonhosted.org/packages/4f/78/77b40157b6cb5f2d3d31a3d9b2efd1ba3505371f76730d267e8b32cf4b7f/PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
|
||||
{url = "https://files.pythonhosted.org/packages/57/c5/5d09b66b41d549914802f482a2118d925d876dc2a35b2d127694c1345c34/PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
|
||||
{url = "https://files.pythonhosted.org/packages/5b/07/10033a403b23405a8fc48975444463d3d10a5c2736b7eb2550b07b367429/PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
|
||||
{url = "https://files.pythonhosted.org/packages/5e/94/7d5ee059dfb92ca9e62f4057dcdec9ac08a9e42679644854dc01177f8145/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
|
||||
{url = "https://files.pythonhosted.org/packages/62/2a/df7727c52e151f9e7b852d7d1580c37bd9e39b2f29568f0f81b29ed0abc2/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
|
||||
{url = "https://files.pythonhosted.org/packages/73/9c/766e78d1efc0d1fca637a6b62cea1b4510a7fb93617eb805223294fef681/PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
|
||||
{url = "https://files.pythonhosted.org/packages/7b/5e/efd033ab7199a0b2044dab3b9f7a4f6670e6a52c089de572e928d2873b06/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
|
||||
{url = "https://files.pythonhosted.org/packages/7d/39/472f2554a0f1e825bd7c5afc11c817cd7a2f3657460f7159f691fbb37c51/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
|
||||
{url = "https://files.pythonhosted.org/packages/7f/5d/2779ea035ba1e533c32ed4a249b4e0448f583ba10830b21a3cddafe11a4e/PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
|
||||
{url = "https://files.pythonhosted.org/packages/84/02/404de95ced348b73dd84f70e15a41843d817ff8c1744516bf78358f2ffd2/PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
|
||||
{url = "https://files.pythonhosted.org/packages/84/4d/82704d1ab9290b03da94e6425f5e87396b999fd7eb8e08f3a92c158402bf/PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
|
||||
{url = "https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
|
||||
{url = "https://files.pythonhosted.org/packages/ac/6c/967d91a8edf98d2b2b01d149bd9e51b8f9fb527c98d80ebb60c6b21d60c4/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
|
||||
{url = "https://files.pythonhosted.org/packages/b3/34/65bb4b2d7908044963ebf614fe0fdb080773fc7030d7e39c8d3eddcd4257/PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
|
||||
{url = "https://files.pythonhosted.org/packages/b4/33/720548182ffa8344418126017aa1d4ab4aeec9a2275f04ce3f3573d8ace8/PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
|
||||
{url = "https://files.pythonhosted.org/packages/b6/a0/b6700da5d49e9fed49dc3243d3771b598dad07abb37cc32e524607f96adc/PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
|
||||
{url = "https://files.pythonhosted.org/packages/ba/91/090818dfa62e85181f3ae23dd1e8b7ea7f09684864a900cab72d29c57346/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
|
||||
{url = "https://files.pythonhosted.org/packages/bc/06/1b305bf6aa704343be85444c9d011f626c763abb40c0edc1cad13bfd7f86/PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
|
||||
{url = "https://files.pythonhosted.org/packages/c1/39/47ed4d65beec9ce07267b014be85ed9c204fa373515355d3efa62d19d892/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
|
||||
{url = "https://files.pythonhosted.org/packages/c7/d1/02baa09d39b1bb1ebaf0d850d106d1bdcb47c91958557f471153c49dc03b/PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
|
||||
{url = "https://files.pythonhosted.org/packages/c8/6b/6600ac24725c7388255b2f5add93f91e58a5d7efaf4af244fdbcc11a541b/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
|
||||
{url = "https://files.pythonhosted.org/packages/cc/5c/fcabd17918348c7db2eeeb0575705aaf3f7ab1657f6ce29b2e31737dd5d1/PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
|
||||
{url = "https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
|
||||
{url = "https://files.pythonhosted.org/packages/d6/6a/439d1a6f834b9a9db16332ce16c4a96dd0e3970b65fe08cbecd1711eeb77/PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
|
||||
{url = "https://files.pythonhosted.org/packages/d7/8f/db62b0df635b9008fe90aa68424e99cee05e68b398740c8a666a98455589/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
|
||||
{url = "https://files.pythonhosted.org/packages/e1/a1/27bfac14b90adaaccf8c8289f441e9f76d94795ec1e7a8f134d9f2cb3d0b/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
|
||||
{url = "https://files.pythonhosted.org/packages/e5/31/ba812efa640a264dbefd258986a5e4e786230cb1ee4a9f54eb28ca01e14a/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
|
||||
{url = "https://files.pythonhosted.org/packages/ec/0d/26fb23e8863e0aeaac0c64e03fd27367ad2ae3f3cccf3798ee98ce160368/PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
|
||||
{url = "https://files.pythonhosted.org/packages/f1/26/55e4f21db1f72eaef092015d9017c11510e7e6301c62a6cfee91295d13c6/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
|
||||
{url = "https://files.pythonhosted.org/packages/fe/88/def2e57fe740544f2eefb1645f1d6e0094f56c00f4eade708140b6137ead/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
|
||||
]
|
||||
"requests 2.31.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
|
||||
{url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
|
||||
]
|
||||
"sniffio 1.3.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
|
||||
{url = "https://files.pythonhosted.org/packages/cd/50/d49c388cae4ec10e8109b1b833fd265511840706808576df3ada99ecb0ac/sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
|
||||
]
|
||||
"tenacity 8.2.3" = [
|
||||
{url = "https://files.pythonhosted.org/packages/89/3c/253e1627262373784bf9355db9d6f20d2d8831d79f91e9cca48050cddcc2/tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
|
||||
{url = "https://files.pythonhosted.org/packages/f4/f1/990741d5bb2487d529d20a433210ffa136a367751e454214013b441c4575/tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
|
||||
]
|
||||
"typing-extensions 4.8.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/1f/7a/8b94bb016069caa12fc9f587b28080ac33b4fbb8ca369b98bc0a4828543e/typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
|
||||
{url = "https://files.pythonhosted.org/packages/24/21/7d397a4b7934ff4028987914ac1044d3b7d52712f30e2ac7a2ae5bc86dd0/typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
|
||||
]
|
||||
"urllib3 2.0.7" = [
|
||||
{url = "https://files.pythonhosted.org/packages/af/47/b215df9f71b4fdba1025fc05a77db2ad243fa0926755a52c5e71659f4e3c/urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
|
||||
{url = "https://files.pythonhosted.org/packages/d2/b2/b157855192a68541a91ba7b2bbcb91f1b4faa51f8bae38d8005c034be524/urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
|
||||
]
|
||||
"win32-setctime 1.1.0" = [
|
||||
{url = "https://files.pythonhosted.org/packages/0a/e6/a7d828fef907843b2a5773ebff47fb79ac0c1c88d60c0ca9530ee941e248/win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"},
|
||||
{url = "https://files.pythonhosted.org/packages/6b/dd/f95a13d2b235a28d613ba23ebad55191514550debb968b46aab99f2e3a30/win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
|
||||
]
|
24
pyproject.toml
Normal file
24
pyproject.toml
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
[project]
|
||||
name = ""
|
||||
version = ""
|
||||
description = ""
|
||||
authors = [
|
||||
{name = "Night-stars-1", email = "nujj1042633805@gmail.com"},
|
||||
]
|
||||
dependencies = [
|
||||
"onepush",
|
||||
"orjson>=3.9.10",
|
||||
"loguru>=0.7.2",
|
||||
"pydantic>=2.4.2",
|
||||
"httpx>=0.25.1",
|
||||
"cryptography>=41.0.5",
|
||||
"pyyaml>=6.0.1",
|
||||
"tenacity>=8.2.3",
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
license = {text = "MIT"}
|
||||
|
||||
[build-system]
|
||||
requires = ["pdm-backend"]
|
||||
build-backend = "pdm.backend"
|
@ -1,5 +1,8 @@
|
||||
requests>=2.25.1
|
||||
python-dotenv>=0.19.2
|
||||
PyYAML>=6.0
|
||||
crypto
|
||||
onepush
|
||||
orjson>=3.9.10
|
||||
loguru>=0.7.2
|
||||
pydantic>=2.4.2
|
||||
httpx>=0.25.1
|
||||
cryptography>=41.0.5
|
||||
pyyaml>=6.0.1
|
||||
tenacity>=8.2.3
|
91
utils/api/login.py
Normal file
91
utils/api/login.py
Normal file
@ -0,0 +1,91 @@
|
||||
"""
|
||||
Date: 2023-11-12 14:05:06
|
||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||
LastEditTime: 2023-11-13 12:32:26
|
||||
"""
|
||||
import orjson
|
||||
|
||||
from typing import Dict, List, Optional, Union
|
||||
|
||||
from ..config import Account
|
||||
from ..request import get, post
|
||||
from ..logger import log
|
||||
from ..data_model import LoginResultHandler
|
||||
|
||||
|
||||
class Login:
|
||||
def __init__(self, account: Account) -> None:
|
||||
self.user_agent = account.user_agent
|
||||
self.uid = account.uid
|
||||
self.password = account.password
|
||||
|
||||
async def login(self) -> Union[Dict[str, str], bool]:
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Referer': 'https://account.xiaomi.com/fe/service/login/password?sid=miui_vip&qs=%253Fcallback%253Dhttp'
|
||||
'%25253A%25252F%25252Fapi.vip.miui.com%25252Fsts%25253Fsign%25253D4II4ABwZkiJzkd2YSkyEZukI4Ak'
|
||||
'%2525253D%252526followup%25253Dhttps%2525253A%2525252F%2525252Fapi.vip.miui.com%2525252Fpage'
|
||||
'%2525252Flogin%2525253FdestUrl%2525253Dhttps%252525253A%252525252F%252525252Fweb.vip.miui.com'
|
||||
'%252525252Fpage%252525252Finfo%252525252Fmio%252525252Fmio%252525252FinternalTest%252525253Fref'
|
||||
'%252525253Dhomepage%2526sid%253Dmiui_vip&callback=http%3A%2F%2Fapi.vip.miui.com%2Fsts%3Fsign'
|
||||
'%3D4II4ABwZkiJzkd2YSkyEZukI4Ak%253D%26followup%3Dhttps%253A%252F%252Fapi.vip.miui.com%252Fpage'
|
||||
'%252Flogin%253FdestUrl%253Dhttps%25253A%25252F%25252Fweb.vip.miui.com%25252Fpage%25252Finfo'
|
||||
'%25252Fmio%25252Fmio%25252FinternalTest%25253Fref%25253Dhomepage&_sign=L%2BdSQY6sjSQ%2FCRjJs4p'
|
||||
'%2BU1vNYLY%3D&serviceParam=%7B%22checkSafePhone%22%3Afalse%2C%22checkSafeAddress%22%3Afalse%2C'
|
||||
'%22lsrp_score%22%3A0.0%7D&showActiveX=false&theme=&needTheme=false&bizDeviceType=',
|
||||
'User-Agent': str(self.user_agent),
|
||||
'Origin': 'https://account.xiaomi.com',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Cookie': 'deviceId=; pass_ua=web; uLocale=zh_CN'
|
||||
}
|
||||
data = {
|
||||
'bizDeviceType': '',
|
||||
'needTheme': 'false',
|
||||
'theme': '',
|
||||
'showActiveX': 'false',
|
||||
'serviceParam': '{"checkSafePhone":false,"checkSafeAddress":false,"lsrp_score":0.0}',
|
||||
'callback': 'http://api.vip.miui.com/sts?sign=4II4ABwZkiJzkd2YSkyEZukI4Ak%3D&followup=https%3A%2F%2Fapi.vip'
|
||||
'.miui.com%2Fpage%2Flogin%3FdestUrl%3Dhttps%253A%252F%252Fweb.vip.miui.com%252Fpage%252Finfo'
|
||||
'%252Fmio%252Fmio%252FinternalTest%253Fref%253Dhomepage',
|
||||
'qs': '%3Fcallback%3Dhttp%253A%252F%252Fapi.vip.miui.com%252Fsts%253Fsign%253D4II4ABwZkiJzkd2YSkyEZukI4Ak'
|
||||
'%25253D%2526followup%253Dhttps%25253A%25252F%25252Fapi.vip.miui.com%25252Fpage%25252Flogin'
|
||||
'%25253FdestUrl%25253Dhttps%2525253A%2525252F%2525252Fweb.vip.miui.com%2525252Fpage%2525252Finfo'
|
||||
'%2525252Fmio%2525252Fmio%2525252FinternalTest%2525253Fref%2525253Dhomepage%26sid%3Dmiui_vip',
|
||||
'sid': 'miui_vip',
|
||||
'_sign': 'L+dSQY6sjSQ/CRjJs4p+U1vNYLY=',
|
||||
'user': str(self.uid),
|
||||
'cc': '+86',
|
||||
'hash': str(self.password),
|
||||
'_json': 'true'
|
||||
}
|
||||
try:
|
||||
response = await post('https://account.xiaomi.com/pass/serviceLoginAuth2', headers=headers, data=data)
|
||||
log.debug(response.text)
|
||||
result = response.text.lstrip('&').lstrip('START').lstrip('&')
|
||||
data = orjson.loads(result)
|
||||
api_data = LoginResultHandler(data)
|
||||
if api_data.success:
|
||||
log.success('小米账号登录成功')
|
||||
cookies = await self.get_cookie(api_data.location)
|
||||
return cookies
|
||||
elif not api_data.pwd_wrong:
|
||||
log.error('小米账号登录失败:' + api_data.message)
|
||||
return False
|
||||
elif api_data.need_captcha:
|
||||
log.error('当前账号需要短信验证码, 请尝试修改UA或设备ID')
|
||||
return False
|
||||
else:
|
||||
log.error('小米账号登录失败:用户名或密码不正确')
|
||||
return False
|
||||
except Exception:
|
||||
log.exception("登录小米账号出错")
|
||||
return False
|
||||
|
||||
async def get_cookie(self, url: str) -> Union[Dict[str, str], bool]:
|
||||
try:
|
||||
response = await get(url, follow_redirects=False)
|
||||
log.debug(response.text)
|
||||
return dict(response.cookies)
|
||||
except Exception:
|
||||
log.exception("社区获取 Cookie 失败")
|
||||
return False
|
219
utils/api/sign.py
Normal file
219
utils/api/sign.py
Normal file
@ -0,0 +1,219 @@
|
||||
import time
|
||||
|
||||
from typing import Dict, List, Optional, Set, Type, Union
|
||||
|
||||
from ..data_model import ApiResultHandler, DailyTasksResult, SignResultHandler
|
||||
from ..request import get, post
|
||||
from ..logger import log
|
||||
|
||||
|
||||
class BaseSign:
|
||||
"""
|
||||
签到基类
|
||||
"""
|
||||
NAME = ""
|
||||
"""任务名字"""
|
||||
|
||||
PARAMS = {}
|
||||
"""签到参数"""
|
||||
|
||||
DATA = {}
|
||||
"""签到数据"""
|
||||
|
||||
URL_SIGN = ""
|
||||
"""签到地址"""
|
||||
|
||||
AVAILABLE_SIGNS: Dict[str, Type["BaseSign"]] = {}
|
||||
"""可用的子类"""
|
||||
|
||||
def __init__(self, cookie: Dict, token: Optional[str] = None):
|
||||
self.cookie = cookie
|
||||
self.token = token
|
||||
self.headers = {
|
||||
}
|
||||
|
||||
async def check_daily_tasks(self) -> Union[List[DailyTasksResult], List[None]]:
|
||||
try:
|
||||
response = await get('https://api.vip.miui.com/mtop/planet/vip/member/getCheckinPageCakeList',
|
||||
cookies=self.cookie)
|
||||
log.debug(response.text)
|
||||
result = response.json()
|
||||
api_data = ApiResultHandler(result)
|
||||
if api_data.success:
|
||||
task_status = []
|
||||
task = next(filter(lambda x: x['head']['title'] == "每日任务", api_data.data))
|
||||
for daily_task in task['data']:
|
||||
task_name = daily_task['title']
|
||||
task_desc = daily_task.get('desc', '')
|
||||
showType = True if daily_task['showType'] == 0 else False
|
||||
task_status.append(DailyTasksResult(name=task_name, showType=showType, desc=task_desc))
|
||||
return task_status
|
||||
else:
|
||||
log.error("获取每日任务状态失败:" + api_data.message)
|
||||
return []
|
||||
except Exception as e:
|
||||
log.exception("获取每日任务异常")
|
||||
return []
|
||||
|
||||
async def sign(self) -> bool:
|
||||
"""
|
||||
每日任务处理器
|
||||
"""
|
||||
try:
|
||||
params = self.PARAMS.copy()
|
||||
params['miui_vip_ph'] = self.cookie['miui_vip_ph'] if 'miui_vip_ph' in self.cookie else params
|
||||
params['token'] = self.token if 'token' in params else params
|
||||
data = self.DATA.copy()
|
||||
data['miui_vip_ph'] = self.cookie['miui_vip_ph'] if 'miui_vip_ph' in self.cookie else data
|
||||
response = await post(self.URL_SIGN,
|
||||
params=params, data=data,
|
||||
cookies=self.cookie, headers=self.headers)
|
||||
log.debug(response.text)
|
||||
result = response.json()
|
||||
api_data = SignResultHandler(result)
|
||||
if api_data:
|
||||
log.success(f"{self.NAME}结果: 成长值+" + api_data.growth)
|
||||
return True
|
||||
elif api_data.ck_invalid:
|
||||
log.error(f"{self.NAME}失败: Cookie无效")
|
||||
return False
|
||||
else:
|
||||
log.error(f"{self.NAME}失败:" + api_data.message)
|
||||
return False
|
||||
except Exception:
|
||||
log.exception(f"{self.NAME}出错")
|
||||
return False
|
||||
|
||||
|
||||
class Check_In(BaseSign):
|
||||
"""
|
||||
每日签到
|
||||
"""
|
||||
NAME = "每日签到"
|
||||
|
||||
PARAMS = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/checkIn',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
|
||||
DATA = {
|
||||
'miui_vip_ph': "{miui_vip_ph}",
|
||||
'token': ""
|
||||
}
|
||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/user/checkinV2'
|
||||
|
||||
|
||||
class Browse_Post(BaseSign):
|
||||
"""
|
||||
浏览帖子超过10秒
|
||||
"""
|
||||
NAME = "浏览帖子超过10秒"
|
||||
|
||||
PARAMS = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
DATA = {
|
||||
'action': 'BROWSE_POST_10S',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2'
|
||||
|
||||
|
||||
class Browse_User_Page(BaseSign):
|
||||
"""
|
||||
浏览个人主页10s
|
||||
"""
|
||||
NAME = "浏览个人主页10s"
|
||||
|
||||
PARAMS = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
DATA = {
|
||||
'action': 'BROWSE_SPECIAL_PAGES_USER_HOME',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2'
|
||||
|
||||
|
||||
class Browse_Special_Page(BaseSign):
|
||||
"""
|
||||
浏览指定专题页
|
||||
"""
|
||||
NAME = "浏览指定专题页"
|
||||
|
||||
PARAMS = {
|
||||
'ref': 'vipAccountShortcut',
|
||||
'pathname': '/mio/detail',
|
||||
'version': 'dev.231026',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
DATA = {
|
||||
'action': 'BROWSE_SPECIAL_PAGES_SPECIAL_PAGE',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2'
|
||||
|
||||
|
||||
class Board_Follow(BaseSign):
|
||||
"""
|
||||
加入小米圈子
|
||||
"""
|
||||
NAME = "加入小米圈子"
|
||||
|
||||
PARAMS = {
|
||||
'pathname': '/mio/allboard',
|
||||
'version': 'dev.20051',
|
||||
'boardId': '558495',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
|
||||
URL_SIGN = 'https://api.vip.miui.com/api/community/board/follow'
|
||||
|
||||
|
||||
class Board_UnFollow(BaseSign):
|
||||
"""
|
||||
退出小米圈子
|
||||
"""
|
||||
NAME = "退出小米圈子"
|
||||
|
||||
PARAMS = {
|
||||
'pathname': '/mio/allboard',
|
||||
'version': 'dev.20051',
|
||||
'boardId': '558495',
|
||||
'miui_vip_ph': "{miui_vip_ph}"
|
||||
}
|
||||
|
||||
URL_SIGN = 'https://api.vip.miui.com/api/community/board/unfollow'
|
||||
|
||||
|
||||
class Thumb_Up(BaseSign):
|
||||
"""
|
||||
点赞他人帖子
|
||||
"""
|
||||
NAME = "点赞他人帖子"
|
||||
|
||||
DATA = {
|
||||
'postId': '36625780',
|
||||
'sign': '36625780',
|
||||
'timestamp': int(round(time.time() * 1000))
|
||||
}
|
||||
|
||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp'
|
||||
|
||||
|
||||
# 注册签到任务
|
||||
BaseSign.AVAILABLE_SIGNS[Check_In.NAME] = Check_In
|
||||
BaseSign.AVAILABLE_SIGNS[Browse_Post.NAME] = Browse_Post
|
||||
BaseSign.AVAILABLE_SIGNS[Browse_User_Page.NAME] = Browse_User_Page
|
||||
BaseSign.AVAILABLE_SIGNS[Browse_Special_Page.NAME] = Browse_Special_Page
|
||||
BaseSign.AVAILABLE_SIGNS[Board_Follow.NAME] = Board_Follow
|
||||
BaseSign.AVAILABLE_SIGNS[Board_UnFollow.NAME] = Board_UnFollow
|
||||
BaseSign.AVAILABLE_SIGNS[Thumb_Up.NAME] = Thumb_Up
|
18
utils/captcha.py
Normal file
18
utils/captcha.py
Normal file
@ -0,0 +1,18 @@
|
||||
"""
|
||||
Date: 2023-11-13 19:55:22
|
||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||
LastEditTime: 2023-11-13 20:24:51
|
||||
"""
|
||||
|
||||
from .request import get, post
|
||||
from .logger import log
|
||||
from .data_model import ApiResultHandler, GeetestResult
|
||||
|
||||
|
||||
async def get_validate(gt: str, challenge: str) -> GeetestResult:
|
||||
validate = ""
|
||||
try:
|
||||
return GeetestResult(challenge=challenge, validate=validate)
|
||||
except Exception:
|
||||
log.exception("获取人机验证结果异常")
|
||||
return GeetestResult(challenge="", validate="")
|
134
utils/config.py
Normal file
134
utils/config.py
Normal file
@ -0,0 +1,134 @@
|
||||
import os
|
||||
import orjson
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
from hashlib import md5
|
||||
|
||||
import yaml
|
||||
from loguru import logger as log
|
||||
from orjson import JSONDecodeError
|
||||
from pydantic import BaseModel, ValidationError, validator
|
||||
|
||||
ROOT_PATH = Path(__name__).parent.absolute()
|
||||
|
||||
DATA_PATH = ROOT_PATH / "data"
|
||||
'''数据保存目录'''
|
||||
|
||||
CONFIG_PATH = DATA_PATH / "config.yaml"
|
||||
"""数据文件默认路径"""
|
||||
|
||||
|
||||
def md5_crypto(passwd: str) -> str:
|
||||
return md5(passwd.encode('utf8')).hexdigest().upper()
|
||||
|
||||
|
||||
class Account(BaseModel):
|
||||
uid: str = "100000"
|
||||
"""账户ID 非账户用户名或手机号"""
|
||||
password: str = ""
|
||||
"""账户密码或其MD5哈希"""
|
||||
user_agent: str = 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Safari/537.36'
|
||||
"""登录社区时所用浏览器的 User-Agent"""
|
||||
|
||||
"""功能开关"""
|
||||
Check_In: bool = False
|
||||
"""社区成长值签到,启用功能意味着你愿意自行承担相关风险"""
|
||||
Browse_User_Page: bool = False
|
||||
"""社区浏览个人主页10秒,启用功能意味着你愿意自行承担相关风险"""
|
||||
Browse_Post: bool = False
|
||||
"""社区浏览帖子10秒,启用功能意味着你愿意自行承担相关风险"""
|
||||
Thumb_Up: bool = False
|
||||
"""点赞帖子,启用功能意味着你愿意自行承担相关风险"""
|
||||
Browse_Special_Page: bool = False
|
||||
"""社区在活动期间可能会出现限时的“浏览指定专题页”任务,启用功能意味着你愿意自行承担相关风险"""
|
||||
Board_Follow: bool = False
|
||||
"""社区可能会出现限时的“加入圈子”任务,启用功能意味着你愿意自行承担相关风险"""
|
||||
carrot_pull: bool = False
|
||||
"""社区拔萝卜,启用功能意味着你愿意自行承担相关风险"""
|
||||
|
||||
@validator("password", allow_reuse=True)
|
||||
def _(cls, v: Optional[str]):
|
||||
if len(v) == 32:
|
||||
return v
|
||||
return md5_crypto(v)
|
||||
|
||||
|
||||
class OnePush(BaseModel):
|
||||
notifier: str = ""
|
||||
"""是否开启消息推送"""
|
||||
params: Dict = {
|
||||
"title": "",
|
||||
"markdown": False,
|
||||
"token": "",
|
||||
"userid": ""
|
||||
}
|
||||
"""推送参数"""
|
||||
|
||||
|
||||
class Config(BaseModel):
|
||||
accounts: List[Account] = [Account()]
|
||||
"""偏好设置"""
|
||||
ONEPUSH: OnePush = OnePush()
|
||||
"""消息推送"""
|
||||
|
||||
|
||||
def write_plugin_data(data: Config = None):
|
||||
"""
|
||||
写入插件数据文件
|
||||
|
||||
:param data: 配置对象
|
||||
"""
|
||||
try:
|
||||
if data is None:
|
||||
data = ConfigManager.data_obj
|
||||
try:
|
||||
# str_data = orjson.dumps(data.dict(), option=orjson.OPT_PASSTHROUGH_DATETIME | orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_INDENT_2)
|
||||
str_data = yaml.dump(data.model_dump(), indent=4, allow_unicode=True, sort_keys=False)
|
||||
except (AttributeError, TypeError, ValueError):
|
||||
log.exception("数据对象序列化失败,可能是数据类型错误")
|
||||
return False
|
||||
with open(CONFIG_PATH, "w") as f:
|
||||
f.write(str_data)
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
class ConfigManager:
|
||||
data_obj = Config()
|
||||
"""加载出的插件数据对象"""
|
||||
platform = "pc"
|
||||
"""运行环境"""
|
||||
|
||||
@classmethod
|
||||
def load_config(cls):
|
||||
"""
|
||||
加载插件数据文件
|
||||
"""
|
||||
if os.path.exists(DATA_PATH) and os.path.isfile(CONFIG_PATH):
|
||||
try:
|
||||
with open(CONFIG_PATH, 'r') as file:
|
||||
data = yaml.safe_load(file)
|
||||
new_model = Config.model_validate(data)
|
||||
for attr in new_model.model_fields:
|
||||
ConfigManager.data_obj.__setattr__(attr, new_model.__getattribute__(attr))
|
||||
write_plugin_data(ConfigManager.data_obj) # 同步配置
|
||||
except (ValidationError, JSONDecodeError):
|
||||
log.exception(f"读取数据文件失败,请检查数据文件 {CONFIG_PATH} 格式是否正确")
|
||||
raise
|
||||
except Exception:
|
||||
log.exception(
|
||||
f"读取数据文件失败,请检查数据文件 {CONFIG_PATH} 是否存在且有权限读取和写入")
|
||||
raise
|
||||
else:
|
||||
try:
|
||||
if not os.path.exists(DATA_PATH):
|
||||
os.mkdir(DATA_PATH)
|
||||
write_plugin_data()
|
||||
except (AttributeError, TypeError, ValueError, PermissionError):
|
||||
log.exception(f"创建数据文件失败,请检查是否有权限读取和写入 {CONFIG_PATH}")
|
||||
raise
|
||||
log.info(f"数据文件 {CONFIG_PATH} 不存在,已创建默认数据文件。")
|
||||
|
||||
|
||||
ConfigManager.load_config()
|
137
utils/data_model.py
Normal file
137
utils/data_model.py
Normal file
@ -0,0 +1,137 @@
|
||||
from typing import (Any, Dict, NamedTuple, Optional)
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class ApiResultHandler(BaseModel):
|
||||
"""
|
||||
API返回的数据处理器
|
||||
"""
|
||||
content: Dict[str, Any]
|
||||
"""API返回的JSON对象序列化以后的Dict对象"""
|
||||
data: Optional[Dict[str, Any]] = None
|
||||
"""API返回的数据体"""
|
||||
message: str = ""
|
||||
"""API返回的消息内容"""
|
||||
status: Optional[int] = None
|
||||
"""API返回的状态码"""
|
||||
|
||||
def __init__(self, content: Dict[str, Any]):
|
||||
super().__init__(content=content)
|
||||
|
||||
for key in ["data", "entity"]:
|
||||
if self.data is None:
|
||||
self.data = self.content.get(key)
|
||||
else:
|
||||
break
|
||||
|
||||
for key in ["code", "status"]:
|
||||
if self.status is None:
|
||||
self.status = self.content.get(key)
|
||||
|
||||
for key in ["desc", "message"]:
|
||||
if self.message == "":
|
||||
self.message = self.content.get(key, "")
|
||||
|
||||
@property
|
||||
def success(self):
|
||||
"""
|
||||
是否成功
|
||||
"""
|
||||
return self.status in [0, 200] or self.message in ["成功", "OK", "success"]
|
||||
|
||||
|
||||
class LoginResultHandler(ApiResultHandler):
|
||||
"""
|
||||
登录API返回的数据处理器
|
||||
"""
|
||||
pwd: Optional[int] = None
|
||||
"""登录状态"""
|
||||
location: Optional[str] = None
|
||||
"""登录成功后的跳转地址"""
|
||||
|
||||
def __init__(self, content: Dict[str, Any]):
|
||||
super().__init__(content=content)
|
||||
|
||||
self.pwd = self.content.get("pwd")
|
||||
self.location = self.content.get("location")
|
||||
|
||||
@property
|
||||
def need_captcha(self):
|
||||
"""
|
||||
是否需要验证码
|
||||
"""
|
||||
return self.status == 87001 or "验证码" in self.message
|
||||
|
||||
@property
|
||||
def pwd_wrong(self):
|
||||
"""
|
||||
密码错误
|
||||
"""
|
||||
return self.status == 70016
|
||||
|
||||
|
||||
class DailyTasksResult(NamedTuple):
|
||||
"""
|
||||
每日任务API返回的数据处理器
|
||||
"""
|
||||
name: str
|
||||
"""任务名称"""
|
||||
showType: bool
|
||||
"""任务状态"""
|
||||
desc: Optional[str]
|
||||
"""任务描述"""
|
||||
|
||||
|
||||
class SignResultHandler(ApiResultHandler):
|
||||
"""
|
||||
签到API返回的数据处理器
|
||||
"""
|
||||
|
||||
growth: Optional[str] = None
|
||||
"""签到成功后的成长值"""
|
||||
|
||||
def __init__(self, content: Dict[str, Any]):
|
||||
super().__init__(content=content)
|
||||
|
||||
self.growth = self.content.get("entity", {}).get("score", "未知")
|
||||
|
||||
def __bool__(self):
|
||||
"""
|
||||
签到是否成功
|
||||
"""
|
||||
return self.success
|
||||
|
||||
@property
|
||||
def ck_invalid(self):
|
||||
"""
|
||||
cookie是否失效
|
||||
"""
|
||||
return self.status == 401
|
||||
|
||||
|
||||
class TokenResultHandler(ApiResultHandler):
|
||||
"""
|
||||
TOKEN数据处理器
|
||||
"""
|
||||
token: str = ""
|
||||
|
||||
def __init__(self, content: Dict[str, Any]):
|
||||
super().__init__(content=content)
|
||||
|
||||
self.token = self.data.get("token", "")
|
||||
|
||||
@property
|
||||
def need_verify(self):
|
||||
"""需要验证码"""
|
||||
return self.data.get("result") == False and self.data.get("url")
|
||||
|
||||
@property
|
||||
def success(self):
|
||||
"""是否成功获取TOKEN"""
|
||||
return self.token != ""
|
||||
|
||||
class GeetestResult(NamedTuple):
|
||||
"""人机验证结果数据"""
|
||||
validate: str
|
||||
challenge: str
|
||||
|
45
utils/logger.py
Normal file
45
utils/logger.py
Normal file
@ -0,0 +1,45 @@
|
||||
"""
|
||||
Date: 2023-11-11 23:39:10
|
||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||
LastEditTime: 2023-11-12 13:58:56
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
from loguru import logger
|
||||
|
||||
message = ""
|
||||
|
||||
|
||||
def LogFilter(record):
|
||||
global message
|
||||
if record["level"].no >= 20:
|
||||
message += f"{record.get('message')}\n"
|
||||
return True
|
||||
|
||||
|
||||
def get_message():
|
||||
"""
|
||||
说明:
|
||||
返回消息
|
||||
返回:
|
||||
收集到的消息
|
||||
"""
|
||||
global message
|
||||
return message
|
||||
|
||||
|
||||
path_log = os.path.join("logs", '日志文件.log')
|
||||
log = logger
|
||||
log.remove()
|
||||
|
||||
log.add(sys.stdout, level="INFO", colorize=True,
|
||||
format="<cyan>{module}</cyan>.<cyan>{function}</cyan>"
|
||||
":<cyan>{line}</cyan> - "
|
||||
"<level>{message}</level>", filter=LogFilter)
|
||||
|
||||
log.add(path_log, level="DEBUG",
|
||||
format="{time:HH:mm:ss} - "
|
||||
"{level}\t| "
|
||||
"{module}.{function}:{line} - {message}",
|
||||
rotation="1 days", enqueue=True, serialize=False, encoding="utf-8", retention="10 days")
|
77
utils/request.py
Normal file
77
utils/request.py
Normal file
@ -0,0 +1,77 @@
|
||||
"""
|
||||
Date: 2023-11-11 23:34:08
|
||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||
LastEditTime: 2023-11-13 18:17:50
|
||||
"""
|
||||
import httpx
|
||||
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from onepush import notify
|
||||
|
||||
from .logger import log
|
||||
from .config import ConfigManager
|
||||
|
||||
_conf = ConfigManager.data_obj
|
||||
|
||||
|
||||
async def get(url: str,
|
||||
*,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
params: Optional[Dict[str, Any]] = None,
|
||||
timeout: Optional[int] = 20,
|
||||
**kwargs) -> httpx.Response:
|
||||
"""
|
||||
说明:
|
||||
httpx的get请求封装
|
||||
参数:
|
||||
:param url: url
|
||||
:param headers: 请求头
|
||||
:param params: params
|
||||
:param data: data
|
||||
:param json: json
|
||||
:param timeout: 超时时间
|
||||
"""
|
||||
async with httpx.AsyncClient() as client:
|
||||
return await client.get(url,
|
||||
headers=headers,
|
||||
params=params,
|
||||
timeout=timeout,
|
||||
**kwargs)
|
||||
|
||||
|
||||
async def post(url: str,
|
||||
*,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
params: Optional[Dict[str, Any]] = None,
|
||||
timeout: Optional[int] = 20,
|
||||
**kwargs) -> httpx.Response:
|
||||
"""
|
||||
说明:
|
||||
httpx的post请求封装
|
||||
参数:
|
||||
:param url: url
|
||||
:param headers: 请求头
|
||||
:param params: params
|
||||
:param data: data
|
||||
:param json: json
|
||||
:param timeout: 超时时间
|
||||
"""
|
||||
async with httpx.AsyncClient() as client:
|
||||
return await client.post(url,
|
||||
headers=headers,
|
||||
params=params,
|
||||
timeout=timeout,
|
||||
**kwargs)
|
||||
|
||||
|
||||
def notify_me(content=""):
|
||||
"""
|
||||
默认推送日志
|
||||
"""
|
||||
notifier = _conf.ONEPUSH.notifier
|
||||
params = _conf.ONEPUSH.params
|
||||
if not notifier or not params:
|
||||
log.error('未配置推送或未正确配置推送')
|
||||
return
|
||||
return notify(notifier, content=content, **params)
|
29
utils/system_info.py
Normal file
29
utils/system_info.py
Normal file
@ -0,0 +1,29 @@
|
||||
import platform
|
||||
from urllib.request import getproxies
|
||||
from utils.logger import log
|
||||
|
||||
|
||||
def print_info():
|
||||
log.info("MIUI-AUTO-TASK v1.7.0")
|
||||
log.info('---------- 系统信息 -------------')
|
||||
system_info()
|
||||
log.info('---------- 项目信息 -------------')
|
||||
log.info("这是一个免费且开源的项目,如果你是付费购买获得请务必退款")
|
||||
log.info("项目地址:https://github.com/0-8-4/miui-auto-tasks")
|
||||
log.info("欢迎 star,感谢所有项目贡献者,已经提交issues的人,帮助项目发展的人")
|
||||
|
||||
|
||||
def system_info():
|
||||
log.info(show_info('操作系统平台', platform.platform()))
|
||||
log.info(show_info('操作系统版本', platform.version()))
|
||||
log.info(show_info('操作系统名称', platform.system()))
|
||||
log.info(show_info('操作系统位元', platform.architecture()))
|
||||
log.info(show_info('操作系统类型', platform.machine()))
|
||||
log.info(show_info('处理器信息', platform.processor()))
|
||||
log.info(show_info('Python 版本', str(platform.python_version()) + ' ' + str(platform.python_build())))
|
||||
if getproxies():
|
||||
log.info(show_info('系统代理', getproxies()))
|
||||
|
||||
|
||||
def show_info(tip, info):
|
||||
return "{}: {}".format(tip, info)
|
353
utils/utils.py
353
utils/utils.py
@ -1,154 +1,223 @@
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
import platform
|
||||
import dotenv
|
||||
import yaml
|
||||
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
||||
from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15
|
||||
from cryptography.hazmat.primitives import padding, serialization
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
import base64
|
||||
from urllib.parse import urlparse, parse_qsl
|
||||
from pydantic import ValidationError
|
||||
from typing import Type
|
||||
from tenacity import RetryError, Retrying, stop_after_attempt
|
||||
|
||||
from hashlib import md5
|
||||
from onepush import notify
|
||||
from urllib.request import getproxies
|
||||
from .request import get, post
|
||||
from .data_model import TokenResultHandler
|
||||
from .logger import log
|
||||
from .captcha import get_validate
|
||||
|
||||
logs = ''
|
||||
message = ''
|
||||
config = {'account': []}
|
||||
CONFIG_VERSION_REQUIRE: str = 'v1.6.0'
|
||||
public_key_pem = '''-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArxfNLkuAQ/BYHzkzVwtu
|
||||
g+0abmYRBVCEScSzGxJIOsfxVzcuqaKO87H2o2wBcacD3bRHhMjTkhSEqxPjQ/FE
|
||||
XuJ1cdbmr3+b3EQR6wf/cYcMx2468/QyVoQ7BADLSPecQhtgGOllkC+cLYN6Md34
|
||||
Uii6U+VJf0p0q/saxUTZvhR2ka9fqJ4+6C6cOghIecjMYQNHIaNW+eSKunfFsXVU
|
||||
+QfMD0q2EM9wo20aLnos24yDzRjh9HJc6xfr37jRlv1/boG/EABMG9FnTm35xWrV
|
||||
R0nw3cpYF7GZg13QicS/ZwEsSd4HyboAruMxJBPvK3Jdr4ZS23bpN0cavWOJsBqZ
|
||||
VwIDAQAB
|
||||
-----END PUBLIC KEY-----'''
|
||||
|
||||
headers = {
|
||||
'Accept': '*/*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-type': 'application/x-www-form-urlencoded',
|
||||
'Origin': 'https://web.vip.miui.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'https://web.vip.miui.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
|
||||
'sec-ch-ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
}
|
||||
|
||||
def md5_crypto(passwd: str) -> str:
|
||||
return md5(passwd.encode('utf8')).hexdigest()
|
||||
def get_random_chars_as_string(count: int) -> str:
|
||||
characters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#,%^&*()-=_+~`{}[]|:<>.?/')
|
||||
selected_chars = random.sample(characters, count)
|
||||
return ''.join(selected_chars)
|
||||
|
||||
def aes_encrypt(key, data) -> base64:
|
||||
iv = b'0102030405060708'
|
||||
cipher = Cipher(algorithms.AES(key.encode('utf-8')), modes.CBC(iv), backend=default_backend())
|
||||
encryptor = cipher.encryptor()
|
||||
padder = padding.PKCS7(algorithms.AES.block_size).padder()
|
||||
padded_data = padder.update(data.encode('utf-8')) + padder.finalize()
|
||||
ciphertext = encryptor.update(padded_data) + encryptor.finalize()
|
||||
return base64.b64encode(ciphertext).decode('utf-8')
|
||||
|
||||
def show_info(tip, info):
|
||||
return "{}: {}".format(tip, info)
|
||||
def rsa_encrypt(public_key_pem, data: str) -> base64:
|
||||
public_key = serialization.load_pem_public_key(
|
||||
public_key_pem.encode('utf-8'),
|
||||
backend=default_backend()
|
||||
)
|
||||
encoded_data = base64.b64encode(data.encode('utf-8'))
|
||||
ciphertext = public_key.encrypt(
|
||||
encoded_data,
|
||||
PKCS1v15()
|
||||
)
|
||||
|
||||
return base64.b64encode(ciphertext).decode('utf-8')
|
||||
|
||||
def system_info():
|
||||
w_log(show_info('操作系统平台', platform.platform()))
|
||||
w_log(show_info('操作系统版本', platform.version()))
|
||||
w_log(show_info('操作系统名称', platform.system()))
|
||||
w_log(show_info('操作系统位元', platform.architecture()))
|
||||
w_log(show_info('操作系统类型', platform.machine()))
|
||||
w_log(show_info('处理器信息', platform.processor()))
|
||||
w_log(show_info('Python 版本', str(platform.python_version()) + ' ' + str(platform.python_build())))
|
||||
if getproxies():
|
||||
w_log(show_info('系统代理', getproxies()))
|
||||
|
||||
|
||||
def get_config() -> dict:
|
||||
global config
|
||||
config_path_legacy = dotenv.find_dotenv(filename='config.env')
|
||||
config_path_yaml = dotenv.find_dotenv(filename='config.yaml')
|
||||
|
||||
# yaml config
|
||||
if config_path_yaml:
|
||||
w_log('正在加载 ' + config_path_yaml + ' 配置文件')
|
||||
with open(config_path_yaml, "rb") as stream:
|
||||
try:
|
||||
config = yaml.safe_load(stream)
|
||||
config_version: str = config.get('version')
|
||||
|
||||
# check config file version
|
||||
# if config version not meet the requirement
|
||||
if CONFIG_VERSION_REQUIRE != config_version:
|
||||
w_log('配置文件版本和程序运行要求版本不匹配,请检查配置文件')
|
||||
w_log('配置文件版本: ' + config_version)
|
||||
w_log('运行程序配置版本要求: ' + CONFIG_VERSION_REQUIRE)
|
||||
exit(1) # exit the program
|
||||
w_log('配置文件已成功加载,文件版本 ' + config_version)
|
||||
|
||||
except yaml.YAMLError as e:
|
||||
w_log('配置文件载入错误')
|
||||
w_log(e)
|
||||
return config
|
||||
else:
|
||||
w_log('配置文件不存在')
|
||||
exit(1)
|
||||
|
||||
|
||||
def w_log(text):
|
||||
global logs
|
||||
global message
|
||||
now_localtime = time.strftime("%H:%M:%S", time.localtime())
|
||||
logs += now_localtime + ' | ' + str(text) + '\n'
|
||||
message += str(text) + '\n'
|
||||
print(now_localtime + ' | ' + str(text))
|
||||
|
||||
|
||||
def s_log(flag):
|
||||
if flag:
|
||||
global logs
|
||||
folder = os.path.exists('./logs')
|
||||
if not folder:
|
||||
os.makedirs('./logs')
|
||||
now_localtime = time.strftime("%Y-%m-%d", time.localtime())
|
||||
fname = now_localtime + '.log'
|
||||
with open('./logs/' + fname, 'a+', encoding='utf-8') as f:
|
||||
f.write(logs)
|
||||
|
||||
|
||||
def check_config(config: dict) -> bool:
|
||||
if config.get('accounts'):
|
||||
for i in config.get('accounts'):
|
||||
if not i.get('uid') or not i.get('password') or not i.get('user-agent'):
|
||||
return False
|
||||
if not isinstance(i.get('check-in'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('browse-user-page'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('browse-post'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('thumb-up'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('browse-specialpage'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('board-follow'), bool):
|
||||
return False
|
||||
if not isinstance(i.get('carrot-pull'), bool):
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
if not isinstance(config.get('logging'), bool):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def format_config(config: dict) -> dict:
|
||||
for i in config.get('accounts'):
|
||||
i['uid'] = str(i.get('uid'))
|
||||
i['user-agent'] = str(i.get('user-agent'))
|
||||
if len(i.get('password')) != 32:
|
||||
i['password'] = md5_crypto(i.get('password')).upper()
|
||||
else:
|
||||
i['password'] = str(i.get('password')).upper()
|
||||
if i.get('device-id'):
|
||||
i['device-id'] = str(i.get('device-id'))
|
||||
else:
|
||||
i['device-id'] = None
|
||||
return config
|
||||
|
||||
|
||||
def random_sleep():
|
||||
time.sleep(random.randint(1, 9))
|
||||
|
||||
|
||||
def sleep_ten_sec_more():
|
||||
time.sleep(random.randint(10, 12))
|
||||
|
||||
|
||||
def notify_me(content=None):
|
||||
IncorrectReturn = (KeyError, TypeError, AttributeError, IndexError, ValidationError)
|
||||
"""API返回数据无效会触发的异常组合"""
|
||||
def is_incorrect_return(exception: Exception, *addition_exceptions: Type[Exception]) -> bool:
|
||||
"""
|
||||
默认推送日志
|
||||
判断是否是API返回数据无效的异常
|
||||
:param exception: 异常对象
|
||||
:param addition_exceptions: 额外的异常类型,用于触发判断
|
||||
"""
|
||||
global message
|
||||
global config
|
||||
if not content:
|
||||
content = message
|
||||
notifier = config.get('ONEPUSH', {}).get('notifier', '')
|
||||
params = config.get('ONEPUSH', {}).get('params', '')
|
||||
if not notifier or not params:
|
||||
s_log('未配置推送或未正确配置推送')
|
||||
return
|
||||
if not config.get('ONEPUSH', {}).get('title', ''):
|
||||
config['ONEPUSH']['title'] = ''
|
||||
return notify(notifier, content=content, **params)
|
||||
exceptions = IncorrectReturn + addition_exceptions
|
||||
return isinstance(exception, exceptions) or isinstance(exception.__cause__, exceptions)
|
||||
|
||||
async def get_token_by_captcha(url: str) -> str:
|
||||
try:
|
||||
parsed_url = urlparse(url)
|
||||
query_params = dict(parse_qsl(parsed_url.query)) # 解析URL参数
|
||||
gt = query_params.get("c")
|
||||
challenge = query_params.get("l")
|
||||
geetest_data = await get_validate(gt, challenge)
|
||||
params = {
|
||||
'k': '3dc42a135a8d45118034d1ab68213073',
|
||||
'locale': 'zh_CN',
|
||||
'_t': round(time.time()*1000),
|
||||
}
|
||||
|
||||
data = {
|
||||
'e': query_params.get("e"), # 人机验证的e参数,来自URL
|
||||
'challenge': geetest_data.challenge,
|
||||
'seccode': f'{geetest_data.validate}|jordan',
|
||||
}
|
||||
|
||||
response = await post('https://verify.sec.xiaomi.com/captcha/v2/gt/dk/verify', params=params, headers=headers, data=data)
|
||||
log.debug(response.text)
|
||||
result = response.json()
|
||||
api_data = TokenResultHandler(result)
|
||||
if api_data.success:
|
||||
return api_data.token
|
||||
elif not api_data.data.get("result"):
|
||||
log.error("遇到人机验证码,无法获取TOKEN")
|
||||
return False
|
||||
else:
|
||||
log.error("遇到未知错误,无法获取TOKEN")
|
||||
return False
|
||||
except Exception:
|
||||
log.exception("获取TOKEN异常")
|
||||
return False
|
||||
|
||||
async def get_token(uid: str) -> str:
|
||||
try:
|
||||
for attempt in Retrying(stop=stop_after_attempt(3)):
|
||||
with attempt:
|
||||
data = {
|
||||
"type": 0,
|
||||
"startTs": round(time.time()*1000),
|
||||
"endTs": round(time.time()*1000),
|
||||
"env": {
|
||||
"p1": "",
|
||||
"p2": "",
|
||||
"p3": "",
|
||||
"p4": "",
|
||||
"p5": "",
|
||||
"p6": "",
|
||||
"p7": "",
|
||||
"p8": "",
|
||||
"p9": "",
|
||||
"p10": "",
|
||||
"p11": "",
|
||||
"p12": "",
|
||||
"p13": "",
|
||||
"p14": "",
|
||||
"p15": "",
|
||||
"p16": "",
|
||||
"p17": "",
|
||||
"p18": "",
|
||||
"p19": "",
|
||||
"p20": "",
|
||||
"p21": "",
|
||||
"p22": "",
|
||||
"p23": "",
|
||||
"p24": "",
|
||||
"p25": "",
|
||||
"p26": "",
|
||||
"p28": "",
|
||||
"p29": "",
|
||||
"p30": "",
|
||||
"p31": "",
|
||||
"p32": "",
|
||||
"p33": [],
|
||||
"p34": ""
|
||||
},
|
||||
"action": {
|
||||
"a1": [],
|
||||
"a2": [],
|
||||
"a3": [],
|
||||
"a4": [],
|
||||
"a5": [],
|
||||
"a6": [],
|
||||
"a7": [],
|
||||
"a8": [],
|
||||
"a9": [],
|
||||
"a10": [],
|
||||
"a11": [],
|
||||
"a12": [],
|
||||
"a13": [],
|
||||
"a14": []
|
||||
},
|
||||
"force": False,
|
||||
"talkBack": False,
|
||||
"uid": uid,
|
||||
"nonce": {
|
||||
"t": round(time.time()),
|
||||
"r": round(time.time())
|
||||
},
|
||||
"version": "2.0",
|
||||
"scene": "GROW_UP_CHECKIN"
|
||||
}
|
||||
|
||||
key = get_random_chars_as_string(16)
|
||||
|
||||
params = {
|
||||
'k': '3dc42a135a8d45118034d1ab68213073',
|
||||
'locale': 'zh_CN',
|
||||
'_t': round(time.time()*1000),
|
||||
}
|
||||
|
||||
|
||||
data = {
|
||||
's': rsa_encrypt(public_key_pem, key),
|
||||
'd': aes_encrypt(key, str(data)),
|
||||
'a': 'GROW_UP_CHECKIN',
|
||||
}
|
||||
response = await post('https://verify.sec.xiaomi.com/captcha/v2/data', params=params, headers=headers, data=data)
|
||||
result = response.json()
|
||||
api_data = TokenResultHandler(result)
|
||||
if api_data.success:
|
||||
return api_data.token
|
||||
elif api_data.need_verify:
|
||||
log.error("遇到人机验证码, 尝试调用解决方案")
|
||||
url = api_data.data.get("url")
|
||||
for _ in range(3):
|
||||
if toekn := await get_token_by_captcha(url):
|
||||
return toekn
|
||||
return False
|
||||
else:
|
||||
log.error("遇到未知错误,无法获取TOKEN")
|
||||
return False
|
||||
except RetryError as e:
|
||||
if is_incorrect_return(e):
|
||||
log.exception(f"TOKEN - 服务器没有正确返回 {response.text}")
|
||||
else:
|
||||
log.exception("获取TOKEN异常")
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user