mirror of
https://github.com/0-8-4/miui-auto-tasks.git
synced 2024-11-21 14:48:20 +00:00
迁移依赖&修复bug (#190)
* add missing dependency: apscheduler fix some bugs in Dockerfile * 🔧 自动更新requirements * fix: 解决某些情况下不能正确生成、读取配置文件 update: 将python版本升级到3.12,迁移pydantic v2依赖 修改Dockerfile * 🔧 自动更新requirements * Pylint * Hadolint - DL3042 https://github.com/hadolint/hadolint/wiki/DL3042 --------- Co-authored-by: JaHIY <jaklsy@gmail.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Night-stars-1 <99261160+Night-stars-1@users.noreply.github.com>
This commit is contained in:
parent
7d202666d8
commit
6ade926505
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
25
.idea/runConfigurations/miuitask.xml
Normal file
25
.idea/runConfigurations/miuitask.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="miuitask" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
||||||
|
<module name="miui-auto-tasks" />
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="SDK_NAME" value="Python 3.12 (miui-auto-tasks)" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||||
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/miuitask.py" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
|
<option name="EMULATE_TERMINAL" value="false" />
|
||||||
|
<option name="MODULE_MODE" value="false" />
|
||||||
|
<option name="REDIRECT_INPUT" value="false" />
|
||||||
|
<option name="INPUT_FILE" value="" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
11
Dockerfile
11
Dockerfile
@ -1,8 +1,11 @@
|
|||||||
FROM python:3.9-alpine
|
FROM python:3.12.0-slim
|
||||||
|
|
||||||
RUN apk add --no-cache gcc musl-dev python3-dev libffi-dev
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y gcc musl-dev libffi-dev libssl-dev ca-certificates cron \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN pip install pdm
|
RUN pip install --no-cache-dir pdm
|
||||||
|
|
||||||
COPY ./utils /srv/utils/
|
COPY ./utils /srv/utils/
|
||||||
|
|
||||||
@ -12,7 +15,7 @@ COPY pyproject.toml pdm.lock /srv/
|
|||||||
|
|
||||||
WORKDIR /srv
|
WORKDIR /srv
|
||||||
|
|
||||||
RUN
|
RUN pip install --no-cache-dir urllib3 certifi
|
||||||
|
|
||||||
RUN pdm install --prod && \
|
RUN pdm install --prod && \
|
||||||
echo "0 4 * * * python /srv/miuitask.py" > /var/spool/cron/crontabs/root
|
echo "0 4 * * * python /srv/miuitask.py" > /var/spool/cron/crontabs/root
|
||||||
|
@ -15,12 +15,13 @@ from utils.utils import get_token
|
|||||||
|
|
||||||
_conf = ConfigManager.data_obj
|
_conf = ConfigManager.data_obj
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
"""启动签到"""
|
"""启动签到"""
|
||||||
print_info()
|
print_info()
|
||||||
for account in _conf.accounts:
|
for account in _conf.accounts:
|
||||||
login_obj = Login(account)
|
login_obj = Login(account)
|
||||||
if (cookies := await login_obj.login()):
|
if cookies := await login_obj.login():
|
||||||
token = await get_token(cookies["cUserId"])
|
token = await get_token(cookies["cUserId"])
|
||||||
sign_obj = BaseSign(cookies)
|
sign_obj = BaseSign(cookies)
|
||||||
daily_tasks = await sign_obj.check_daily_tasks()
|
daily_tasks = await sign_obj.check_daily_tasks()
|
||||||
@ -55,4 +56,3 @@ if __name__ == "__main__":
|
|||||||
scheduler.shutdown()
|
scheduler.shutdown()
|
||||||
else:
|
else:
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
|
|
341
pdm.lock
341
pdm.lock
@ -1,11 +1,21 @@
|
|||||||
# This file is @generated by PDM.
|
# This file is @generated by PDM.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
groups = ["default"]
|
||||||
|
strategy = ["cross_platform"]
|
||||||
|
lock_version = "4.4"
|
||||||
|
content_hash = "sha256:7ac73c16a45c551cacc6a58d52a4773e6ec5e5186365f6ef3f5e8e9e6b76ffc2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "annotated-types"
|
name = "annotated-types"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Reusable constraint types to use with typing.Annotated"
|
summary = "Reusable constraint types to use with typing.Annotated"
|
||||||
|
files = [
|
||||||
|
{file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
|
||||||
|
{file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyio"
|
name = "anyio"
|
||||||
@ -16,6 +26,25 @@ dependencies = [
|
|||||||
"idna>=2.8",
|
"idna>=2.8",
|
||||||
"sniffio>=1.1",
|
"sniffio>=1.1",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"},
|
||||||
|
{file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "apscheduler"
|
||||||
|
version = "3.10.4"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "In-process task scheduler with Cron-like capabilities"
|
||||||
|
dependencies = [
|
||||||
|
"pytz",
|
||||||
|
"six>=1.4.0",
|
||||||
|
"tzlocal!=3.*,>=2.0",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "APScheduler-3.10.4-py3-none-any.whl", hash = "sha256:fb91e8a768632a4756a585f79ec834e0e27aad5860bac7eaa523d9ccefd87661"},
|
||||||
|
{file = "APScheduler-3.10.4.tar.gz", hash = "sha256:e6df071b27d9be898e486bc7940a7be50b4af2e9da7c08f0744a96d4bd4cef4a"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "apscheduler"
|
name = "apscheduler"
|
||||||
@ -33,6 +62,10 @@ name = "certifi"
|
|||||||
version = "2023.7.22"
|
version = "2023.7.22"
|
||||||
requires_python = ">=3.6"
|
requires_python = ">=3.6"
|
||||||
summary = "Python package for providing Mozilla's CA Bundle."
|
summary = "Python package for providing Mozilla's CA Bundle."
|
||||||
|
files = [
|
||||||
|
{file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
|
||||||
|
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cffi"
|
name = "cffi"
|
||||||
@ -42,18 +75,80 @@ summary = "Foreign Function Interface for Python calling C code."
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"pycparser",
|
"pycparser",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
|
||||||
|
{file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
|
||||||
|
{file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
|
||||||
|
{file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "charset-normalizer"
|
name = "charset-normalizer"
|
||||||
version = "3.3.2"
|
version = "3.3.2"
|
||||||
requires_python = ">=3.7.0"
|
requires_python = ">=3.7.0"
|
||||||
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||||
|
files = [
|
||||||
|
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
|
||||||
|
{file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
|
||||||
|
{file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorama"
|
name = "colorama"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
summary = "Cross-platform colored terminal text."
|
summary = "Cross-platform colored terminal text."
|
||||||
|
files = [
|
||||||
|
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||||
|
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cryptography"
|
name = "cryptography"
|
||||||
@ -63,12 +158,41 @@ summary = "cryptography is a package which provides cryptographic recipes and pr
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cffi>=1.12",
|
"cffi>=1.12",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-win32.whl", hash = "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936"},
|
||||||
|
{file = "cryptography-41.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81"},
|
||||||
|
{file = "cryptography-41.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1"},
|
||||||
|
{file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72"},
|
||||||
|
{file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88"},
|
||||||
|
{file = "cryptography-41.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf"},
|
||||||
|
{file = "cryptography-41.0.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e"},
|
||||||
|
{file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8"},
|
||||||
|
{file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179"},
|
||||||
|
{file = "cryptography-41.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d"},
|
||||||
|
{file = "cryptography-41.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1"},
|
||||||
|
{file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86"},
|
||||||
|
{file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723"},
|
||||||
|
{file = "cryptography-41.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84"},
|
||||||
|
{file = "cryptography-41.0.5.tar.gz", hash = "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h11"
|
name = "h11"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
requires_python = ">=3.7"
|
requires_python = ">=3.7"
|
||||||
summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||||
|
files = [
|
||||||
|
{file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
|
||||||
|
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpcore"
|
name = "httpcore"
|
||||||
@ -79,6 +203,10 @@ dependencies = [
|
|||||||
"certifi",
|
"certifi",
|
||||||
"h11<0.15,>=0.13",
|
"h11<0.15,>=0.13",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"},
|
||||||
|
{file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpx"
|
name = "httpx"
|
||||||
@ -92,12 +220,20 @@ dependencies = [
|
|||||||
"idna",
|
"idna",
|
||||||
"sniffio",
|
"sniffio",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "httpx-0.25.1-py3-none-any.whl", hash = "sha256:fec7d6cc5c27c578a391f7e87b9aa7d3d8fbcd034f6399f9f79b45bcc12a866a"},
|
||||||
|
{file = "httpx-0.25.1.tar.gz", hash = "sha256:ffd96d5cf901e63863d9f1b4b6807861dbea4d301613415d9e6e57ead15fc5d0"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.4"
|
version = "3.4"
|
||||||
requires_python = ">=3.5"
|
requires_python = ">=3.5"
|
||||||
summary = "Internationalized Domain Names in Applications (IDNA)"
|
summary = "Internationalized Domain Names in Applications (IDNA)"
|
||||||
|
files = [
|
||||||
|
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
|
||||||
|
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "loguru"
|
name = "loguru"
|
||||||
@ -108,6 +244,10 @@ dependencies = [
|
|||||||
"colorama>=0.3.4; sys_platform == \"win32\"",
|
"colorama>=0.3.4; sys_platform == \"win32\"",
|
||||||
"win32-setctime>=1.0.0; sys_platform == \"win32\"",
|
"win32-setctime>=1.0.0; sys_platform == \"win32\"",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"},
|
||||||
|
{file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "onepush"
|
name = "onepush"
|
||||||
@ -118,24 +258,76 @@ dependencies = [
|
|||||||
"pycryptodome",
|
"pycryptodome",
|
||||||
"requests",
|
"requests",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "onepush-1.3.0-py3-none-any.whl", hash = "sha256:196af2e147a54381b5ffa32565f5f3955a0647328cc283812ce2f87f4bc09f47"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "orjson"
|
name = "orjson"
|
||||||
version = "3.9.10"
|
version = "3.9.10"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
|
summary = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
|
||||||
|
files = [
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"},
|
||||||
|
{file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"},
|
||||||
|
{file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"},
|
||||||
|
{file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"},
|
||||||
|
{file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"},
|
||||||
|
{file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"},
|
||||||
|
{file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycparser"
|
name = "pycparser"
|
||||||
version = "2.21"
|
version = "2.21"
|
||||||
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
summary = "C parser in Python"
|
summary = "C parser in Python"
|
||||||
|
files = [
|
||||||
|
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
|
||||||
|
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycryptodome"
|
name = "pycryptodome"
|
||||||
version = "3.19.0"
|
version = "3.19.0"
|
||||||
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
summary = "Cryptographic library for Python"
|
summary = "Cryptographic library for Python"
|
||||||
|
files = [
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-win32.whl", hash = "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997"},
|
||||||
|
{file = "pycryptodome-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5"},
|
||||||
|
{file = "pycryptodome-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f"},
|
||||||
|
{file = "pycryptodome-3.19.0.tar.gz", hash = "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pydantic"
|
name = "pydantic"
|
||||||
@ -147,6 +339,10 @@ dependencies = [
|
|||||||
"pydantic-core==2.10.1",
|
"pydantic-core==2.10.1",
|
||||||
"typing-extensions>=4.6.1",
|
"typing-extensions>=4.6.1",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"},
|
||||||
|
{file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pydantic-core"
|
name = "pydantic-core"
|
||||||
@ -156,6 +352,75 @@ summary = ""
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"typing-extensions!=4.7.0,>=4.6.0",
|
"typing-extensions!=4.7.0,>=4.6.0",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"},
|
||||||
|
{file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"},
|
||||||
|
{file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"},
|
||||||
|
{file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytz"
|
||||||
|
version = "2023.3.post1"
|
||||||
|
summary = "World timezone definitions, modern and historical"
|
||||||
|
files = [
|
||||||
|
{file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"},
|
||||||
|
{file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pytz"
|
name = "pytz"
|
||||||
@ -167,6 +432,23 @@ name = "pyyaml"
|
|||||||
version = "6.0.1"
|
version = "6.0.1"
|
||||||
requires_python = ">=3.6"
|
requires_python = ">=3.6"
|
||||||
summary = "YAML parser and emitter for Python"
|
summary = "YAML parser and emitter for Python"
|
||||||
|
files = [
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
|
||||||
|
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
|
||||||
|
{file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
|
||||||
|
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "requests"
|
name = "requests"
|
||||||
@ -179,6 +461,20 @@ dependencies = [
|
|||||||
"idna<4,>=2.5",
|
"idna<4,>=2.5",
|
||||||
"urllib3<3,>=1.21.1",
|
"urllib3<3,>=1.21.1",
|
||||||
]
|
]
|
||||||
|
files = [
|
||||||
|
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
|
||||||
|
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "six"
|
||||||
|
version = "1.16.0"
|
||||||
|
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
summary = "Python 2 and 3 compatibility utilities"
|
||||||
|
files = [
|
||||||
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
|
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "six"
|
name = "six"
|
||||||
@ -191,18 +487,53 @@ name = "sniffio"
|
|||||||
version = "1.3.0"
|
version = "1.3.0"
|
||||||
requires_python = ">=3.7"
|
requires_python = ">=3.7"
|
||||||
summary = "Sniff out which async library your code is running under"
|
summary = "Sniff out which async library your code is running under"
|
||||||
|
files = [
|
||||||
|
{file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
|
||||||
|
{file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tenacity"
|
name = "tenacity"
|
||||||
version = "8.2.3"
|
version = "8.2.3"
|
||||||
requires_python = ">=3.7"
|
requires_python = ">=3.7"
|
||||||
summary = "Retry code until it succeeds"
|
summary = "Retry code until it succeeds"
|
||||||
|
files = [
|
||||||
|
{file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
|
||||||
|
{file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "typing-extensions"
|
name = "typing-extensions"
|
||||||
version = "4.8.0"
|
version = "4.8.0"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Backported and Experimental Type Hints for Python 3.8+"
|
summary = "Backported and Experimental Type Hints for Python 3.8+"
|
||||||
|
files = [
|
||||||
|
{file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
|
||||||
|
{file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tzdata"
|
||||||
|
version = "2023.3"
|
||||||
|
requires_python = ">=2"
|
||||||
|
summary = "Provider of IANA time zone data"
|
||||||
|
files = [
|
||||||
|
{file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
|
||||||
|
{file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tzlocal"
|
||||||
|
version = "5.2"
|
||||||
|
requires_python = ">=3.8"
|
||||||
|
summary = "tzinfo object for the local timezone"
|
||||||
|
dependencies = [
|
||||||
|
"tzdata; platform_system == \"Windows\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"},
|
||||||
|
{file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tzdata"
|
name = "tzdata"
|
||||||
@ -224,12 +555,21 @@ name = "urllib3"
|
|||||||
version = "2.0.7"
|
version = "2.0.7"
|
||||||
requires_python = ">=3.7"
|
requires_python = ">=3.7"
|
||||||
summary = "HTTP library with thread-safe connection pooling, file post, and more."
|
summary = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||||
|
files = [
|
||||||
|
{file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
|
||||||
|
{file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "win32-setctime"
|
name = "win32-setctime"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
requires_python = ">=3.5"
|
requires_python = ">=3.5"
|
||||||
summary = "A small Python utility to set file creation time on Windows"
|
summary = "A small Python utility to set file creation time on Windows"
|
||||||
|
<<<<<<< HEAD
|
||||||
|
files = [
|
||||||
|
{file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"},
|
||||||
|
{file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
|
||||||
|
=======
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock_version = "4.2"
|
lock_version = "4.2"
|
||||||
@ -745,4 +1085,5 @@ content_hash = "sha256:7ac73c16a45c551cacc6a58d52a4773e6ec5e5186365f6ef3f5e8e9e6
|
|||||||
"win32-setctime 1.1.0" = [
|
"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/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"},
|
{url = "https://files.pythonhosted.org/packages/6b/dd/f95a13d2b235a28d613ba23ebad55191514550debb968b46aab99f2e3a30/win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
|
||||||
|
>>>>>>> master
|
||||||
]
|
]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = ""
|
name = ""
|
||||||
version = ""
|
version = ""
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
APScheduler==3.10.1
|
apscheduler==3.10.4
|
||||||
cryptography==40.0.2
|
cryptography==41.0.5
|
||||||
httpx==0.25.1
|
httpx==0.25.1
|
||||||
loguru==0.7.0
|
loguru==0.7.2
|
||||||
onepush==1.3.0
|
onepush==1.3.0
|
||||||
orjson==3.9.10
|
orjson==3.9.10
|
||||||
pydantic==1.10.7
|
pydantic==2.5.1
|
||||||
PyYAML==6.0.1
|
PyYAML==6.0.1
|
||||||
qrcode==7.4.2
|
|
||||||
tenacity==8.2.3
|
tenacity==8.2.3
|
||||||
|
@ -15,6 +15,17 @@ from ..request import get, post
|
|||||||
from .sign import BaseSign
|
from .sign import BaseSign
|
||||||
|
|
||||||
|
|
||||||
|
async def get_cookie(url: str) -> Union[Dict[str, str], bool]:
|
||||||
|
"""获取社区 Cookie"""
|
||||||
|
try:
|
||||||
|
response = await get(url, follow_redirects=False)
|
||||||
|
log.debug(response.text)
|
||||||
|
return dict(response.cookies)
|
||||||
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
|
log.exception("社区获取 Cookie 失败")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class Login:
|
class Login:
|
||||||
"""登录类"""
|
"""登录类"""
|
||||||
|
|
||||||
@ -79,7 +90,7 @@ class Login:
|
|||||||
api_data = LoginResultHandler(data)
|
api_data = LoginResultHandler(data)
|
||||||
if api_data.success:
|
if api_data.success:
|
||||||
log.success('小米账号登录成功')
|
log.success('小米账号登录成功')
|
||||||
cookies = await self.get_cookie(api_data.location)
|
cookies = await get_cookie(api_data.location)
|
||||||
self.account.cookies = cookies
|
self.account.cookies = cookies
|
||||||
write_plugin_data()
|
write_plugin_data()
|
||||||
return cookies
|
return cookies
|
||||||
@ -93,13 +104,3 @@ class Login:
|
|||||||
except Exception: # pylint: disable=broad-exception-caught
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
log.exception("登录小米账号出错")
|
log.exception("登录小米账号出错")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def get_cookie(self, url: str) -> Union[Dict[str, str], bool]:
|
|
||||||
"""获取社区 Cookie"""
|
|
||||||
try:
|
|
||||||
response = await get(url, follow_redirects=False)
|
|
||||||
log.debug(response.text)
|
|
||||||
return dict(response.cookies)
|
|
||||||
except Exception: # pylint: disable=broad-exception-caught
|
|
||||||
log.exception("社区获取 Cookie 失败")
|
|
||||||
return False
|
|
||||||
|
@ -34,7 +34,7 @@ class BaseSign:
|
|||||||
self.headers = {
|
self.headers = {
|
||||||
}
|
}
|
||||||
|
|
||||||
async def check_daily_tasks(self, nolog: bool=False) -> Union[List[DailyTasksResult], List[None]]:
|
async def check_daily_tasks(self, nolog: bool = False) -> Union[List[DailyTasksResult], List[None]]:
|
||||||
"""获取每日任务状态"""
|
"""获取每日任务状态"""
|
||||||
try:
|
try:
|
||||||
response = await get('https://api.vip.miui.com/mtop/planet/vip/member/getCheckinPageCakeList',
|
response = await get('https://api.vip.miui.com/mtop/planet/vip/member/getCheckinPageCakeList',
|
||||||
@ -44,19 +44,20 @@ class BaseSign:
|
|||||||
api_data = ApiResultHandler(result)
|
api_data = ApiResultHandler(result)
|
||||||
if api_data.success:
|
if api_data.success:
|
||||||
task_status = []
|
task_status = []
|
||||||
tasks: List[Dict[str, List[Dict[str, Any]]]] = filter(lambda x: x['head']['title'] in ["每日任务", "其他任务"], api_data.data)
|
tasks: List[Dict[str, List[Dict[str, Any]]]] = list(filter(
|
||||||
|
lambda x: x['head']['title'] in ["每日任务", "其他任务"], api_data.data))
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
for daily_task in task['data']:
|
for daily_task in task['data']:
|
||||||
task_name = daily_task['title']
|
task_name = daily_task['title']
|
||||||
task_desc = daily_task.get('desc', '')
|
task_desc = daily_task.get('desc', '')
|
||||||
show_type = True if daily_task['showType'] == 0 else False # pylint: disable=simplifiable-if-expression
|
show_type = True if daily_task['showType'] == 0 else False # pylint: disable=simplifiable-if-expression
|
||||||
task_status.append(DailyTasksResult(name=task_name, showType=show_type, desc=task_desc))
|
task_status.append(DailyTasksResult(name=task_name, showType=show_type, desc=task_desc))
|
||||||
return task_status
|
return task_status
|
||||||
else:
|
else:
|
||||||
if not nolog:
|
if not nolog:
|
||||||
log.error(f"获取每日任务状态失败:{api_data.message}")
|
log.error(f"获取每日任务状态失败:{api_data.message}")
|
||||||
return []
|
return []
|
||||||
except Exception: # pylint: disable=broad-exception-caught
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
if not nolog:
|
if not nolog:
|
||||||
log.exception("获取每日任务异常")
|
log.exception("获取每日任务异常")
|
||||||
return []
|
return []
|
||||||
@ -95,7 +96,7 @@ class BaseSign:
|
|||||||
else:
|
else:
|
||||||
log.error(f"{self.NAME}失败:{api_data.message}")
|
log.error(f"{self.NAME}失败:{api_data.message}")
|
||||||
return False
|
return False
|
||||||
except Exception: # pylint: disable=broad-exception-caught
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
log.exception(f"{self.NAME}出错")
|
log.exception(f"{self.NAME}出错")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -223,6 +224,7 @@ class ThumbUp(BaseSign):
|
|||||||
|
|
||||||
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp'
|
URL_SIGN = 'https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp'
|
||||||
|
|
||||||
|
|
||||||
class CarrotPull(BaseSign):
|
class CarrotPull(BaseSign):
|
||||||
"""
|
"""
|
||||||
参与拔萝卜获得奖励
|
参与拔萝卜获得奖励
|
||||||
@ -233,6 +235,7 @@ class CarrotPull(BaseSign):
|
|||||||
}
|
}
|
||||||
URL_SIGN = 'https://api.vip.miui.com/api/carrot/pull'
|
URL_SIGN = 'https://api.vip.miui.com/api/carrot/pull'
|
||||||
|
|
||||||
|
|
||||||
# 注册签到任务
|
# 注册签到任务
|
||||||
BaseSign.AVAILABLE_SIGNS[CheckIn.NAME] = CheckIn
|
BaseSign.AVAILABLE_SIGNS[CheckIn.NAME] = CheckIn
|
||||||
BaseSign.AVAILABLE_SIGNS[BrowsePost.NAME] = BrowsePost
|
BaseSign.AVAILABLE_SIGNS[BrowsePost.NAME] = BrowsePost
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
'''
|
"""
|
||||||
Date: 2023-11-13 19:55:22
|
Date: 2023-11-13 19:55:22
|
||||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||||
LastEditTime: 2023-11-18 14:30:41
|
LastEditTime: 2023-11-18 14:30:41
|
||||||
'''
|
"""
|
||||||
|
|
||||||
from .request import post
|
from .request import post
|
||||||
from .logger import log
|
from .logger import log
|
||||||
@ -11,10 +11,11 @@ from .data_model import ApiResultHandler, GeetestResult
|
|||||||
|
|
||||||
_conf = ConfigManager.data_obj
|
_conf = ConfigManager.data_obj
|
||||||
|
|
||||||
|
|
||||||
async def get_validate(gt: str, challenge: str) -> GeetestResult: # pylint: disable=invalid-name
|
async def get_validate(gt: str, challenge: str) -> GeetestResult: # pylint: disable=invalid-name
|
||||||
"""获取人机验证结果"""
|
"""获取人机验证结果"""
|
||||||
try:
|
try:
|
||||||
validate = ""
|
validate = None
|
||||||
params = _conf.preference.geetest_params.copy()
|
params = _conf.preference.geetest_params.copy()
|
||||||
for key, value in params.items():
|
for key, value in params.items():
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
@ -34,6 +35,6 @@ async def get_validate(gt: str, challenge: str) -> GeetestResult: # pylint: dis
|
|||||||
challenge = geetest.data["challenge"]
|
challenge = geetest.data["challenge"]
|
||||||
validate = geetest.data["validate"]
|
validate = geetest.data["validate"]
|
||||||
return GeetestResult(challenge=challenge, validate=validate)
|
return GeetestResult(challenge=challenge, validate=validate)
|
||||||
except Exception: # pylint: disable=broad-exception-caught
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
log.exception("获取人机验证结果异常")
|
log.exception("获取人机验证结果异常")
|
||||||
return GeetestResult(challenge="", validate="")
|
return GeetestResult(challenge="", validate="")
|
||||||
|
@ -7,22 +7,25 @@ from typing import Dict, List, Optional, Union
|
|||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from loguru import logger as log
|
from loguru import logger as log
|
||||||
from pydantic import (BaseModel, # pylint: disable=no-name-in-module
|
from pydantic import (field_validator, BaseModel, # pylint: disable=no-name-in-module
|
||||||
ValidationError, validator)
|
ValidationError)
|
||||||
|
|
||||||
ROOT_PATH = Path(__name__).parent.absolute()
|
ROOT_PATH = Path(__name__).parent.absolute()
|
||||||
|
|
||||||
DATA_PATH = ROOT_PATH / "data"
|
DATA_PATH = ROOT_PATH / "data"
|
||||||
'''数据保存目录'''
|
"""数据保存目录"""
|
||||||
|
|
||||||
CONFIG_PATH = DATA_PATH / "config.yaml" if os.getenv("MIUITASK_CONFIG_PATH") is None else Path(os.getenv("MIUITASK_CONFIG_PATH"))
|
CONFIG_PATH = DATA_PATH / "config.yaml" if os.getenv("MIUITASK_CONFIG_PATH") is None else Path(os.getenv("MIUITASK_CONFIG_PATH"))
|
||||||
"""数据文件默认路径"""
|
"""数据文件默认路径"""
|
||||||
|
|
||||||
|
os.makedirs(DATA_PATH, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
def md5_crypto(passwd: str) -> str:
|
def md5_crypto(passwd: str) -> str:
|
||||||
"""MD5加密"""
|
"""MD5加密"""
|
||||||
return md5(passwd.encode('utf8')).hexdigest().upper()
|
return md5(passwd.encode('utf8')).hexdigest().upper()
|
||||||
|
|
||||||
|
|
||||||
def cookies_to_dict(cookies):
|
def cookies_to_dict(cookies):
|
||||||
"""将cookies字符串转换为字典"""
|
"""将cookies字符串转换为字典"""
|
||||||
cookies_dict = {}
|
cookies_dict = {}
|
||||||
@ -31,6 +34,7 @@ def cookies_to_dict(cookies):
|
|||||||
cookies_dict[key] = value
|
cookies_dict[key] = value
|
||||||
return cookies_dict
|
return cookies_dict
|
||||||
|
|
||||||
|
|
||||||
class Account(BaseModel):
|
class Account(BaseModel):
|
||||||
"""账号处理器"""
|
"""账号处理器"""
|
||||||
uid: str = "100000"
|
uid: str = "100000"
|
||||||
@ -57,14 +61,16 @@ class Account(BaseModel):
|
|||||||
CarrotPull: bool = False
|
CarrotPull: bool = False
|
||||||
"""社区拔萝卜,启用功能意味着你愿意自行承担相关风险"""
|
"""社区拔萝卜,启用功能意味着你愿意自行承担相关风险"""
|
||||||
|
|
||||||
@validator("password", allow_reuse=True)
|
@field_validator("password")
|
||||||
def _password(cls, value: Optional[str]): # pylint: disable=no-self-argument
|
@classmethod
|
||||||
|
def _password(cls, value: Optional[str]): # pylint: disable=no-self-argument
|
||||||
if len(value) == 32:
|
if len(value) == 32:
|
||||||
return value
|
return value
|
||||||
return md5_crypto(value)
|
return md5_crypto(value)
|
||||||
|
|
||||||
@validator("cookies", allow_reuse=True)
|
@field_validator("cookies")
|
||||||
def _cookies(cls, value: Union[dict, str]): # pylint: disable=no-self-argument
|
@classmethod
|
||||||
|
def _cookies(cls, value: Union[dict, str]): # pylint: disable=no-self-argument
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
return cookies_to_dict(value)
|
return cookies_to_dict(value)
|
||||||
return value
|
return value
|
||||||
@ -82,6 +88,7 @@ class OnePush(BaseModel):
|
|||||||
}
|
}
|
||||||
"""推送参数"""
|
"""推送参数"""
|
||||||
|
|
||||||
|
|
||||||
class Preference(BaseModel):
|
class Preference(BaseModel):
|
||||||
"""偏好设置"""
|
"""偏好设置"""
|
||||||
geetest_url: str = ""
|
geetest_url: str = ""
|
||||||
@ -146,7 +153,7 @@ class ConfigManager:
|
|||||||
data = yaml.safe_load(file)
|
data = yaml.safe_load(file)
|
||||||
new_model = Config.model_validate(data)
|
new_model = Config.model_validate(data)
|
||||||
for attr in new_model.model_fields:
|
for attr in new_model.model_fields:
|
||||||
#ConfigManager.data_obj.__setattr__(attr, new_model.__getattribute__(attr))
|
# ConfigManager.data_obj.__setattr__(attr, new_model.__getattribute__(attr))
|
||||||
setattr(ConfigManager.data_obj, attr, getattr(new_model, attr))
|
setattr(ConfigManager.data_obj, attr, getattr(new_model, attr))
|
||||||
write_plugin_data(ConfigManager.data_obj) # 同步配置
|
write_plugin_data(ConfigManager.data_obj) # 同步配置
|
||||||
except (ValidationError, JSONDecodeError):
|
except (ValidationError, JSONDecodeError):
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
"""数据处理模型"""
|
"""数据处理模型"""
|
||||||
from typing import (Any, Dict, NamedTuple, Optional)
|
from typing import (Any, Dict, NamedTuple, Optional)
|
||||||
from pydantic import BaseModel #pylint: disable=no-name-in-module
|
from pydantic import BaseModel # pylint: disable=no-name-in-module
|
||||||
|
|
||||||
|
|
||||||
class ApiResultHandler(BaseModel):
|
class ApiResultHandler(BaseModel):
|
||||||
@ -104,6 +104,7 @@ class SignResultHandler(ApiResultHandler):
|
|||||||
self.growth = str(self.growth)
|
self.growth = str(self.growth)
|
||||||
else:
|
else:
|
||||||
self.growth = None
|
self.growth = None
|
||||||
|
|
||||||
# pylint: disable=trailing-whitespace
|
# pylint: disable=trailing-whitespace
|
||||||
def __bool__(self):
|
def __bool__(self):
|
||||||
"""
|
"""
|
||||||
@ -140,6 +141,7 @@ class TokenResultHandler(ApiResultHandler):
|
|||||||
"""是否成功获取TOKEN"""
|
"""是否成功获取TOKEN"""
|
||||||
return self.token != ""
|
return self.token != ""
|
||||||
|
|
||||||
|
|
||||||
class GeetestResult(NamedTuple):
|
class GeetestResult(NamedTuple):
|
||||||
"""人机验证结果数据"""
|
"""人机验证结果数据"""
|
||||||
validate: str
|
validate: str
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
'''
|
"""
|
||||||
Date: 2023-11-12 14:05:06
|
Date: 2023-11-12 14:05:06
|
||||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||||
LastEditTime: 2023-11-18 14:20:44
|
LastEditTime: 2023-11-18 14:20:44
|
||||||
'''
|
"""
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ MESSAGE = ""
|
|||||||
|
|
||||||
def log_filter(record: dict):
|
def log_filter(record: dict):
|
||||||
"""loguru过滤器"""
|
"""loguru过滤器"""
|
||||||
global MESSAGE # pylint: disable=global-statement
|
global MESSAGE # pylint: disable=global-statement
|
||||||
if record["level"].no >= 20:
|
if record["level"].no >= 20:
|
||||||
MESSAGE += f"{record.get('message')}\n"
|
MESSAGE += f"{record.get('message')}\n"
|
||||||
return True
|
return True
|
||||||
@ -26,7 +26,7 @@ def get_message():
|
|||||||
返回:
|
返回:
|
||||||
收集到的消息
|
收集到的消息
|
||||||
"""
|
"""
|
||||||
global MESSAGE # pylint: disable=global-variable-not-assigned
|
global MESSAGE # pylint: disable=global-variable-not-assigned
|
||||||
return MESSAGE
|
return MESSAGE
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
'''
|
"""
|
||||||
Date: 2023-11-12 14:05:06
|
Date: 2023-11-12 14:05:06
|
||||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||||
LastEditTime: 2023-11-18 00:32:53
|
LastEditTime: 2023-11-18 00:32:53
|
||||||
'''
|
"""
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
'''
|
"""
|
||||||
Date: 2023-11-13 20:29:19
|
Date: 2023-11-13 20:29:19
|
||||||
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
LastEditors: Night-stars-1 nujj1042633805@gmail.com
|
||||||
LastEditTime: 2023-11-19 14:39:20
|
LastEditTime: 2023-11-19 14:39:20
|
||||||
'''
|
"""
|
||||||
import platform
|
import platform
|
||||||
from urllib.request import getproxies
|
from urllib.request import getproxies
|
||||||
from utils.logger import log
|
from utils.logger import log
|
||||||
|
@ -45,15 +45,17 @@ headers = {
|
|||||||
'sec-ch-ua-platform': '"Windows"',
|
'sec-ch-ua-platform': '"Windows"',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_random_chars_as_string(count: int) -> str:
|
def get_random_chars_as_string(count: int) -> str:
|
||||||
"""获取随机字符串"""
|
"""获取随机字符串"""
|
||||||
characters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#,%^&*()-=_+~`{}[]|:<>.?/')
|
characters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#,%^&*()-=_+~`{}[]|:<>.?/')
|
||||||
selected_chars = random.sample(characters, count)
|
selected_chars = random.sample(characters, count)
|
||||||
return ''.join(selected_chars)
|
return ''.join(selected_chars)
|
||||||
|
|
||||||
|
|
||||||
def aes_encrypt(key: str, data: str) -> base64:
|
def aes_encrypt(key: str, data: str) -> base64:
|
||||||
"""AES加密"""
|
"""AES加密"""
|
||||||
iv = b'0102030405060708' # pylint: disable=invalid-name
|
iv = b'0102030405060708' # pylint: disable=invalid-name
|
||||||
cipher = Cipher(algorithms.AES(key.encode('utf-8')), modes.CBC(iv), backend=default_backend())
|
cipher = Cipher(algorithms.AES(key.encode('utf-8')), modes.CBC(iv), backend=default_backend())
|
||||||
encryptor = cipher.encryptor()
|
encryptor = cipher.encryptor()
|
||||||
padder = padding.PKCS7(algorithms.AES.block_size).padder()
|
padder = padding.PKCS7(algorithms.AES.block_size).padder()
|
||||||
@ -61,6 +63,7 @@ def aes_encrypt(key: str, data: str) -> base64:
|
|||||||
ciphertext = encryptor.update(padded_data) + encryptor.finalize()
|
ciphertext = encryptor.update(padded_data) + encryptor.finalize()
|
||||||
return base64.b64encode(ciphertext).decode('utf-8')
|
return base64.b64encode(ciphertext).decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
def rsa_encrypt(public_key_pem: str, data: str) -> base64:
|
def rsa_encrypt(public_key_pem: str, data: str) -> base64:
|
||||||
"""RSA加密"""
|
"""RSA加密"""
|
||||||
public_key = serialization.load_pem_public_key(
|
public_key = serialization.load_pem_public_key(
|
||||||
@ -75,8 +78,11 @@ def rsa_encrypt(public_key_pem: str, data: str) -> base64:
|
|||||||
|
|
||||||
return base64.b64encode(ciphertext).decode('utf-8')
|
return base64.b64encode(ciphertext).decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
IncorrectReturn = (KeyError, TypeError, AttributeError, IndexError, ValidationError)
|
IncorrectReturn = (KeyError, TypeError, AttributeError, IndexError, ValidationError)
|
||||||
"""API返回数据无效会触发的异常组合"""
|
"""API返回数据无效会触发的异常组合"""
|
||||||
|
|
||||||
|
|
||||||
def is_incorrect_return(exception: Exception, *addition_exceptions: Type[Exception]) -> bool:
|
def is_incorrect_return(exception: Exception, *addition_exceptions: Type[Exception]) -> bool:
|
||||||
"""
|
"""
|
||||||
判断是否是API返回数据无效的异常
|
判断是否是API返回数据无效的异常
|
||||||
@ -86,27 +92,29 @@ def is_incorrect_return(exception: Exception, *addition_exceptions: Type[Excepti
|
|||||||
exceptions = IncorrectReturn + addition_exceptions
|
exceptions = IncorrectReturn + addition_exceptions
|
||||||
return isinstance(exception, exceptions) or isinstance(exception.__cause__, exceptions)
|
return isinstance(exception, exceptions) or isinstance(exception.__cause__, exceptions)
|
||||||
|
|
||||||
async def get_token_by_captcha(url: str) -> str:
|
|
||||||
|
async def get_token_by_captcha(url: str) -> str | bool:
|
||||||
"""通过人机验证码获取TOKEN"""
|
"""通过人机验证码获取TOKEN"""
|
||||||
try:
|
try:
|
||||||
parsed_url = urlparse(url)
|
parsed_url = urlparse(url)
|
||||||
query_params = dict(parse_qsl(parsed_url.query)) # 解析URL参数
|
query_params = dict(parse_qsl(parsed_url.query)) # 解析URL参数
|
||||||
gt = query_params.get("c") # pylint: disable=invalid-name
|
gt = query_params.get("c") # pylint: disable=invalid-name
|
||||||
challenge = query_params.get("l")
|
challenge = query_params.get("l")
|
||||||
geetest_data = await get_validate(gt, challenge)
|
geetest_data = await get_validate(gt, challenge)
|
||||||
params = {
|
params = {
|
||||||
'k': '3dc42a135a8d45118034d1ab68213073',
|
'k': '3dc42a135a8d45118034d1ab68213073',
|
||||||
'locale': 'zh_CN',
|
'locale': 'zh_CN',
|
||||||
'_t': round(time.time()*1000),
|
'_t': round(time.time() * 1000),
|
||||||
}
|
}
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'e': query_params.get("e"), # 人机验证的e参数,来自URL
|
'e': query_params.get("e"), # 人机验证的e参数,来自URL
|
||||||
'challenge': geetest_data.challenge,
|
'challenge': geetest_data.challenge,
|
||||||
'seccode': f'{geetest_data.validate}|jordan',
|
'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)
|
response = await post('https://verify.sec.xiaomi.com/captcha/v2/gt/dk/verify', params=params, headers=headers,
|
||||||
|
data=data)
|
||||||
log.debug(response.text)
|
log.debug(response.text)
|
||||||
result = response.json()
|
result = response.json()
|
||||||
api_data = TokenResultHandler(result)
|
api_data = TokenResultHandler(result)
|
||||||
@ -118,19 +126,21 @@ async def get_token_by_captcha(url: str) -> str:
|
|||||||
else:
|
else:
|
||||||
log.error("遇到未知错误,无法获取TOKEN")
|
log.error("遇到未知错误,无法获取TOKEN")
|
||||||
return False
|
return False
|
||||||
except Exception: # pylint: disable=broad-exception-caught
|
except Exception: # pylint: disable=broad-exception-caught
|
||||||
log.exception("获取TOKEN异常")
|
log.exception("获取TOKEN异常")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=trailing-whitespace
|
# pylint: disable=trailing-whitespace
|
||||||
async def get_token(uid: str) -> str:
|
async def get_token(uid: str) -> str | bool:
|
||||||
"""获取TOKEN"""
|
"""获取TOKEN"""
|
||||||
try:
|
try:
|
||||||
for attempt in Retrying(stop=stop_after_attempt(3)):
|
for attempt in Retrying(stop=stop_after_attempt(3)):
|
||||||
with attempt:
|
with attempt:
|
||||||
data = {
|
data = {
|
||||||
"type": 0,
|
"type": 0,
|
||||||
"startTs": round(time.time()*1000),
|
"startTs": round(time.time() * 1000),
|
||||||
"endTs": round(time.time()*1000),
|
"endTs": round(time.time() * 1000),
|
||||||
"env": {
|
"env": {
|
||||||
"p1": "",
|
"p1": "",
|
||||||
"p2": "",
|
"p2": "",
|
||||||
@ -198,16 +208,16 @@ async def get_token(uid: str) -> str:
|
|||||||
params = {
|
params = {
|
||||||
'k': '3dc42a135a8d45118034d1ab68213073',
|
'k': '3dc42a135a8d45118034d1ab68213073',
|
||||||
'locale': 'zh_CN',
|
'locale': 'zh_CN',
|
||||||
'_t': round(time.time()*1000),
|
'_t': round(time.time() * 1000),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
's': rsa_encrypt(PUBLIC_KEY_PEM, key),
|
's': rsa_encrypt(PUBLIC_KEY_PEM, key),
|
||||||
'd': aes_encrypt(key, str(data)),
|
'd': aes_encrypt(key, str(data)),
|
||||||
'a': 'GROW_UP_CHECKIN',
|
'a': 'GROW_UP_CHECKIN',
|
||||||
}
|
}
|
||||||
response = await post('https://verify.sec.xiaomi.com/captcha/v2/data', params=params, headers=headers, data=data)
|
response = await post('https://verify.sec.xiaomi.com/captcha/v2/data', params=params, headers=headers,
|
||||||
|
data=data)
|
||||||
log.debug(response.text)
|
log.debug(response.text)
|
||||||
result = response.json()
|
result = response.json()
|
||||||
api_data = TokenResultHandler(result)
|
api_data = TokenResultHandler(result)
|
||||||
@ -216,8 +226,8 @@ async def get_token(uid: str) -> str:
|
|||||||
elif api_data.need_verify:
|
elif api_data.need_verify:
|
||||||
log.error("遇到人机验证码, 尝试调用解决方案")
|
log.error("遇到人机验证码, 尝试调用解决方案")
|
||||||
url = api_data.data.get("url")
|
url = api_data.data.get("url")
|
||||||
if toekn := await get_token_by_captcha(url):
|
if token := await get_token_by_captcha(url):
|
||||||
return toekn
|
return token
|
||||||
else:
|
else:
|
||||||
raise ValueError("人机验证失败")
|
raise ValueError("人机验证失败")
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user