aioqzone 1.9.5.dev6__tar.gz → 1.9.6.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/PKG-INFO +17 -17
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/pyproject.toml +15 -16
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/api/h5/model.py +12 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/api/__init__.py +7 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/api/request.py +13 -1
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/api/response.py +5 -5
- aioqzone-1.9.5.dev6/.github/dependabot.yml +0 -13
- aioqzone-1.9.5.dev6/.github/workflows/auto-pr.yml +0 -37
- aioqzone-1.9.5.dev6/.github/workflows/build.yml +0 -36
- aioqzone-1.9.5.dev6/.github/workflows/codeql-analysis.yml +0 -59
- aioqzone-1.9.5.dev6/.github/workflows/sphinx.yml +0 -72
- aioqzone-1.9.5.dev6/.github/workflows/test.yml +0 -52
- aioqzone-1.9.5.dev6/.gitignore +0 -28
- aioqzone-1.9.5.dev6/.pre-commit-config.yaml +0 -37
- aioqzone-1.9.5.dev6/CONTRIBUTING.md +0 -9
- aioqzone-1.9.5.dev6/LICENSE +0 -661
- aioqzone-1.9.5.dev6/README_en.md +0 -86
- aioqzone-1.9.5.dev6/cliff.toml +0 -59
- aioqzone-1.9.5.dev6/doc/source/_static/penguin-blob.webp +0 -0
- aioqzone-1.9.5.dev6/doc/source/_static/teaencoder.ts +0 -145
- aioqzone-1.9.5.dev6/doc/source/aioqzone/api/h5.rst +0 -5
- aioqzone-1.9.5.dev6/doc/source/aioqzone/api/index.rst +0 -8
- aioqzone-1.9.5.dev6/doc/source/aioqzone/api/login.rst +0 -16
- aioqzone-1.9.5.dev6/doc/source/aioqzone/exception.rst +0 -6
- aioqzone-1.9.5.dev6/doc/source/aioqzone/index.rst +0 -12
- aioqzone-1.9.5.dev6/doc/source/aioqzone/messages.rst +0 -30
- aioqzone-1.9.5.dev6/doc/source/aioqzone/model/api.rst +0 -23
- aioqzone-1.9.5.dev6/doc/source/aioqzone/model/index.rst +0 -8
- aioqzone-1.9.5.dev6/doc/source/aioqzone/model/protocol.rst +0 -26
- aioqzone-1.9.5.dev6/doc/source/aioqzone/reference.rst +0 -29
- aioqzone-1.9.5.dev6/doc/source/conf.py +0 -81
- aioqzone-1.9.5.dev6/doc/source/disclaimers.rst +0 -49
- aioqzone-1.9.5.dev6/doc/source/examples.rst +0 -327
- aioqzone-1.9.5.dev6/doc/source/index.rst +0 -38
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/h5.po +0 -349
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/index.po +0 -22
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/login.po +0 -250
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/web.po +0 -488
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/exception.po +0 -52
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/index.po +0 -22
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/messages.po +0 -226
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/api.po +0 -1033
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/index.po +0 -24
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/protocol.po +0 -232
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/response.po +0 -1023
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/reference.po +0 -78
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/disclaimers.po +0 -171
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/examples.po +0 -232
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/index.po +0 -74
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/base.po +0 -75
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/exception.po +0 -78
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/index.po +0 -61
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/jsjson.po +0 -157
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/index.po +0 -22
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/login.po +0 -257
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/type.po +0 -73
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/capsess.po +0 -32
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/captcha.po +0 -166
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/index.po +0 -108
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/jigsaw.po +0 -204
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/encrypt.po +0 -43
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/index.po +0 -26
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/login.po +0 -101
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/type.po +0 -453
- aioqzone-1.9.5.dev6/doc/source/locale/zh_CN/LC_MESSAGES/reference.po +0 -77
- aioqzone-1.9.5.dev6/doc/source/qqqr/base.rst +0 -7
- aioqzone-1.9.5.dev6/doc/source/qqqr/exception.rst +0 -6
- aioqzone-1.9.5.dev6/doc/source/qqqr/index.rst +0 -46
- aioqzone-1.9.5.dev6/doc/source/qqqr/jsjson.rst +0 -7
- aioqzone-1.9.5.dev6/doc/source/qqqr/qr/index.rst +0 -8
- aioqzone-1.9.5.dev6/doc/source/qqqr/qr/login.rst +0 -14
- aioqzone-1.9.5.dev6/doc/source/qqqr/qr/type.rst +0 -8
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/captcha/capsess.rst +0 -14
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/captcha/captcha.rst +0 -10
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/captcha/index.rst +0 -69
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/encrypt.rst +0 -5
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/index.rst +0 -19
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/login.rst +0 -12
- aioqzone-1.9.5.dev6/doc/source/qqqr/up/type.rst +0 -8
- aioqzone-1.9.5.dev6/test/api/__init__.py +0 -0
- aioqzone-1.9.5.dev6/test/api/conftest.py +0 -55
- aioqzone-1.9.5.dev6/test/api/test_h5.py +0 -134
- aioqzone-1.9.5.dev6/test/api/test_loginman.py +0 -136
- aioqzone-1.9.5.dev6/test/conftest.py +0 -30
- aioqzone-1.9.5.dev6/test/login_logic/__init__.py +0 -0
- aioqzone-1.9.5.dev6/test/login_logic/test_captcha.py +0 -108
- aioqzone-1.9.5.dev6/test/login_logic/test_qr.py +0 -83
- aioqzone-1.9.5.dev6/test/login_logic/test_up.py +0 -102
- aioqzone-1.9.5.dev6/test/utils/test_entity.py +0 -37
- aioqzone-1.9.5.dev6/test/utils/test_json.py +0 -35
- aioqzone-1.9.5.dev6/test/utils/test_time.py +0 -11
- aioqzone-1.9.5.dev6/uv.lock +0 -2032
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/README.md +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/api/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/api/h5/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/api/login/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/api/login/_base.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/exception.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/message.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/api/feed.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/api/profile.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/protocol/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/protocol/config.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/model/protocol/entity.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/utils/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/utils/entity.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/utils/regex.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/utils/retry.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/aioqzone/utils/time.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/base.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/constant.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/exception.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/message.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/py.typed +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/qr/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/qr/type.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/type.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/_model.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/_model.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/capsess.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/click/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/click/_types.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/pil_utils.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/select/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/select/_types.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/slide/__init__.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/captcha/slide/_types.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/encrypt.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/h5.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/up/web.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/utils/encrypt.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/utils/iter.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/utils/jsjson.py +0 -0
- {aioqzone-1.9.5.dev6 → aioqzone-1.9.6.dev2}/src/qqqr/utils/net.py +0 -0
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aioqzone
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.6.dev2
|
|
4
4
|
Summary: A Python wrapper for Qzone login and H5 APIs.
|
|
5
|
-
|
|
6
|
-
Project-URL: Repository, https://github.com/aioqzone/aioqzone
|
|
7
|
-
Project-URL: Documentation, https://aioqzone.github.io/aioqzone
|
|
8
|
-
Project-URL: Bug Tracker, https://github.com/aioqzone/aioqzone/issues
|
|
9
|
-
Project-URL: Discussion, https://t.me/aioqzone_chatroom
|
|
5
|
+
Keywords: qzone-api,autologin,asyncio-spider
|
|
10
6
|
Author: aioqzone
|
|
11
|
-
|
|
12
|
-
License-Expression: AGPL-3.0
|
|
13
|
-
License-File: LICENSE
|
|
14
|
-
Keywords: asyncio-spider,autologin,qzone-api
|
|
7
|
+
License-Expression: AGPL-3.0-or-later
|
|
15
8
|
Classifier: Development Status :: 4 - Beta
|
|
16
9
|
Classifier: Intended Audience :: Developers
|
|
17
10
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
11
|
Classifier: Typing :: Typed
|
|
19
|
-
Requires-
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist: pillow>=10.1.0
|
|
22
|
-
Requires-Dist: pychaosvm~=0.4.3
|
|
12
|
+
Requires-Dist: aiohttp~=3.13
|
|
13
|
+
Requires-Dist: pydantic~=2.12
|
|
23
14
|
Requires-Dist: pydantic-settings>=2.9.0
|
|
24
|
-
Requires-Dist: pydantic>=2.11.4
|
|
25
15
|
Requires-Dist: rsa>=4.9.1
|
|
26
|
-
Requires-Dist: tenacity
|
|
16
|
+
Requires-Dist: tenacity>=8.2.3,<10.0.0
|
|
27
17
|
Requires-Dist: tylisten>=2.2.1
|
|
18
|
+
Requires-Dist: pillow>=11.3.0
|
|
19
|
+
Requires-Dist: pychaosvm~=0.5.4
|
|
20
|
+
Requires-Dist: slide-tc~=0.1.4 ; extra == 'slide-captcha'
|
|
21
|
+
Maintainer: JamzumSum
|
|
22
|
+
Maintainer-email: JamzumSum <22952836+JamzumSum@users.noreply.github.com>
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Project-URL: Bug Tracker, https://github.com/aioqzone/aioqzone/issues
|
|
25
|
+
Project-URL: Discussion, https://t.me/aioqzone_chatroom
|
|
26
|
+
Project-URL: Documentation, https://aioqzone.github.io/aioqzone
|
|
27
|
+
Project-URL: Homepage, https://github.com/aioqzone/aioqzone
|
|
28
|
+
Project-URL: Repository, https://github.com/aioqzone/aioqzone
|
|
28
29
|
Provides-Extra: slide-captcha
|
|
29
|
-
Requires-Dist: slide-tc~=0.1.1; extra == 'slide-captcha'
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
|
|
32
32
|
# aioqzone
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "aioqzone"
|
|
3
|
-
version = "1.9.
|
|
3
|
+
version = "1.9.6.dev2"
|
|
4
4
|
description = "A Python wrapper for Qzone login and H5 APIs."
|
|
5
5
|
authors = [{ name = "aioqzone" }]
|
|
6
6
|
maintainers = [
|
|
7
7
|
{ name = "JamzumSum", email = "22952836+JamzumSum@users.noreply.github.com" },
|
|
8
8
|
]
|
|
9
|
-
license = "AGPL-3.0"
|
|
9
|
+
license = "AGPL-3.0-or-later"
|
|
10
10
|
readme = "README.md"
|
|
11
|
-
requires-python = ">=3.
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
12
|
keywords = ["qzone-api", "autologin", "asyncio-spider"]
|
|
13
13
|
classifiers = [
|
|
14
14
|
"Development Status :: 4 - Beta",
|
|
@@ -18,15 +18,15 @@ classifiers = [
|
|
|
18
18
|
]
|
|
19
19
|
|
|
20
20
|
dependencies = [
|
|
21
|
-
"aiohttp
|
|
22
|
-
"pydantic
|
|
21
|
+
"aiohttp~=3.13",
|
|
22
|
+
"pydantic~=2.12",
|
|
23
23
|
"pydantic-settings>=2.9.0",
|
|
24
24
|
"rsa>=4.9.1",
|
|
25
25
|
"tenacity>=8.2.3,<10.0.0",
|
|
26
26
|
# "exceptiongroup>=1.1.1",
|
|
27
27
|
"tylisten>=2.2.1",
|
|
28
|
-
"pillow>=
|
|
29
|
-
"pychaosvm~=0.4
|
|
28
|
+
"pillow>=11.3.0",
|
|
29
|
+
"pychaosvm~=0.5.4",
|
|
30
30
|
]
|
|
31
31
|
|
|
32
32
|
[project.urls]
|
|
@@ -40,17 +40,17 @@ Documentation = "https://aioqzone.github.io/aioqzone"
|
|
|
40
40
|
test = ["pytest>=8.2.0", "pytest-asyncio>=1.1,<1.3"]
|
|
41
41
|
dev = ["pre-commit", "ruff"]
|
|
42
42
|
doc = [
|
|
43
|
-
"Sphinx>=7.0.1; python_version
|
|
43
|
+
"Sphinx>=7.0.1; python_version=='3.10'",
|
|
44
44
|
"Sphinx>=8.2.0; python_version>='3.11'",
|
|
45
45
|
"autodoc-pydantic>=2.0.1",
|
|
46
|
-
"sphinx-autodoc-typehints
|
|
46
|
+
"sphinx-autodoc-typehints~=2.5",
|
|
47
47
|
"furo",
|
|
48
48
|
"sphinx-intl",
|
|
49
49
|
"sphinx-inline-tabs",
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
[project.optional-dependencies]
|
|
53
|
-
slide-captcha = ["slide-tc~=0.1.
|
|
53
|
+
slide-captcha = ["slide-tc~=0.1.4"]
|
|
54
54
|
|
|
55
55
|
[tool.uv]
|
|
56
56
|
prerelease = "if-necessary-or-explicit"
|
|
@@ -64,12 +64,11 @@ name = "aioqzone-index"
|
|
|
64
64
|
url = "https://aioqzone.github.io/aioqzone-index/simple/"
|
|
65
65
|
|
|
66
66
|
[build-system]
|
|
67
|
-
requires = ["
|
|
68
|
-
build-backend = "
|
|
67
|
+
requires = ["uv_build"]
|
|
68
|
+
build-backend = "uv_build"
|
|
69
69
|
|
|
70
|
-
[tool.
|
|
71
|
-
|
|
72
|
-
packages = ["src/aioqzone", "src/qqqr"]
|
|
70
|
+
[tool.uv.build-backend]
|
|
71
|
+
module-name = ["aioqzone", "qqqr"]
|
|
73
72
|
|
|
74
73
|
[tool.pytest.ini_options]
|
|
75
74
|
pythonpath = "src"
|
|
@@ -87,6 +86,6 @@ ignore = [
|
|
|
87
86
|
]
|
|
88
87
|
|
|
89
88
|
[tool.pyright]
|
|
90
|
-
pythonVersion = "3.
|
|
89
|
+
pythonVersion = "3.10"
|
|
91
90
|
pythonPlatform = "All"
|
|
92
91
|
reportIncompatibleVariableOverride = "information"
|
|
@@ -356,3 +356,15 @@ class QzoneH5API:
|
|
|
356
356
|
params=AvatarParams.model_validate(locals()),
|
|
357
357
|
),
|
|
358
358
|
)
|
|
359
|
+
|
|
360
|
+
async def set_top_feed(self, fid: str, set_top: bool = True) -> None:
|
|
361
|
+
"""Set or unset a feed to top.
|
|
362
|
+
|
|
363
|
+
:param fid: :term:`fid`
|
|
364
|
+
:param set_top: whether to set top, default to `True`
|
|
365
|
+
"""
|
|
366
|
+
await self.call(
|
|
367
|
+
SetTopApi(
|
|
368
|
+
params=SetTopParams.model_validate(locals()),
|
|
369
|
+
)
|
|
370
|
+
)
|
|
@@ -146,3 +146,10 @@ class AvatarApi(QzoneApi[AvatarParams, AvatarResponse]):
|
|
|
146
146
|
http_method: t.ClassVar[TyHttpMethod] = "GET"
|
|
147
147
|
host: t.ClassVar[str] = "https://qlogo2.store.qq.com"
|
|
148
148
|
path: t.ClassVar[str] = "/qzone/{hostuin}/{hostuin}/{size}"
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class SetTopApi(QzoneApi[SetTopParams, SingleReturnResp]):
|
|
152
|
+
response: t.ClassVar = SingleReturnResp
|
|
153
|
+
http_method: t.ClassVar[TyHttpMethod] = "POST"
|
|
154
|
+
host: t.ClassVar[str] = "user.qzone.qq.com"
|
|
155
|
+
path: t.ClassVar[str] = "proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/cgi_settopfeed"
|
|
@@ -5,7 +5,7 @@ from math import floor
|
|
|
5
5
|
from os import PathLike
|
|
6
6
|
from time import time
|
|
7
7
|
|
|
8
|
-
from pydantic import BaseModel, Field, HttpUrl, field_serializer
|
|
8
|
+
from pydantic import BaseModel, Field, HttpUrl, field_serializer
|
|
9
9
|
from typing_extensions import Buffer
|
|
10
10
|
|
|
11
11
|
from aioqzone.utils.time import time_ms
|
|
@@ -31,6 +31,7 @@ __all__ = [
|
|
|
31
31
|
"PhotosPreuploadParams",
|
|
32
32
|
"UgcRight",
|
|
33
33
|
"PhotoData",
|
|
34
|
+
"SetTopParams",
|
|
34
35
|
]
|
|
35
36
|
|
|
36
37
|
|
|
@@ -292,3 +293,14 @@ class PhotosPreuploadParams(QzoneRequestParams):
|
|
|
292
293
|
class AvatarParams(QzoneRequestParams):
|
|
293
294
|
hostuin: int
|
|
294
295
|
size: t.Literal[100, 640] = 100
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
class SetTopParams(QzoneRequestParams):
|
|
299
|
+
fid: str = Field(validation_alias="key")
|
|
300
|
+
set_top: bool = Field(serialization_alias="act")
|
|
301
|
+
|
|
302
|
+
need_change: int = 0
|
|
303
|
+
|
|
304
|
+
@field_serializer("set_top", return_type=str)
|
|
305
|
+
def serialize_set_top(self, set_top: bool) -> str:
|
|
306
|
+
return "set" if set_top else "cancel"
|
|
@@ -144,7 +144,7 @@ class IndexPageResp(FeedPageResp):
|
|
|
144
144
|
if not scripts:
|
|
145
145
|
raise TryAgain("script tag not found")
|
|
146
146
|
|
|
147
|
-
texts: t.List[str] = [s.text for s in scripts]
|
|
147
|
+
texts: t.List[str] = [s.text for s in scripts if s.text]
|
|
148
148
|
script = firstn(texts, lambda s: "shine0callback" in s)
|
|
149
149
|
if not script:
|
|
150
150
|
raise TryAgain("data script not found")
|
|
@@ -188,7 +188,7 @@ class ProfilePagePesp(QzoneResponse):
|
|
|
188
188
|
qzonetoken: str
|
|
189
189
|
|
|
190
190
|
@classmethod
|
|
191
|
-
async def response_to_object(cls, response: ClientResponse):
|
|
191
|
+
async def response_to_object(cls, response: ClientResponse) -> StrDict:
|
|
192
192
|
html = await response.text()
|
|
193
193
|
scripts: t.List[HtmlElement] = document_fromstring(html).xpath(
|
|
194
194
|
'body/script[@type="application/javascript"]'
|
|
@@ -196,7 +196,7 @@ class ProfilePagePesp(QzoneResponse):
|
|
|
196
196
|
if not scripts:
|
|
197
197
|
raise TryAgain("ProfilePageResponse: script tag not found")
|
|
198
198
|
|
|
199
|
-
texts: t.List[str] = [s.text for s in scripts]
|
|
199
|
+
texts: t.List[str] = [s.text for s in scripts if s.text]
|
|
200
200
|
script = firstn(texts, lambda s: "shine0callback" in s)
|
|
201
201
|
if not script:
|
|
202
202
|
raise TryAgain("ProfilePageResponse: script tag not found")
|
|
@@ -255,7 +255,7 @@ class AddCommentLegacyResp(QzoneResponse):
|
|
|
255
255
|
scripts: t.List[HtmlElement] = document_fromstring(html).xpath(
|
|
256
256
|
'body/script[@type="text/javascript"]'
|
|
257
257
|
)
|
|
258
|
-
texts: t.List[str] = [s.text for s in scripts]
|
|
258
|
+
texts: t.List[str] = [s.text for s in scripts if s.text]
|
|
259
259
|
script = firstn(texts, lambda s: "frameElement.callback" in s)
|
|
260
260
|
if not script:
|
|
261
261
|
raise TryAgain("AddCommentLegacyResponse: script tag not found")
|
|
@@ -274,7 +274,7 @@ class DeleteCommentResp(QzoneResponse):
|
|
|
274
274
|
scripts: t.List[HtmlElement] = document_fromstring(html).xpath(
|
|
275
275
|
'body/script[@type="text/javascript"]'
|
|
276
276
|
)
|
|
277
|
-
texts: t.List[str] = [s.text for s in scripts]
|
|
277
|
+
texts: t.List[str] = [s.text for s in scripts if s.text]
|
|
278
278
|
script = firstn(texts, lambda s: "frameElement.callback" in s)
|
|
279
279
|
if not script:
|
|
280
280
|
raise TryAgain("DeleteCommentResponse: script tag not found")
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
name: Auto PR
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- dev
|
|
7
|
-
- dev/**
|
|
8
|
-
|
|
9
|
-
concurrency:
|
|
10
|
-
group: ci-${{ github.ref_name }}
|
|
11
|
-
cancel-in-progress: true
|
|
12
|
-
|
|
13
|
-
env:
|
|
14
|
-
target: beta
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
pr:
|
|
18
|
-
name: Open or Edit PR
|
|
19
|
-
runs-on: ubuntu-latest
|
|
20
|
-
if: "!startsWith(github.event.head_commit.message, '@no-pr')"
|
|
21
|
-
permissions:
|
|
22
|
-
pull-requests: write
|
|
23
|
-
steps:
|
|
24
|
-
- uses: actions/checkout@v5
|
|
25
|
-
with:
|
|
26
|
-
fetch-depth: 0
|
|
27
|
-
|
|
28
|
-
- uses: JamzumSum/actions/pr-changelog@master
|
|
29
|
-
id: git-cliff
|
|
30
|
-
with:
|
|
31
|
-
start: ${{ env.target }}
|
|
32
|
-
|
|
33
|
-
- name: Push Changelog to PR
|
|
34
|
-
uses: JamzumSum/actions/push-pr-body@master
|
|
35
|
-
with:
|
|
36
|
-
base-branch: ${{ env.target }}
|
|
37
|
-
body: ${{ steps.git-cliff.outputs.changelog }}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# This workflow will install Python dependencies, build and publish this repo to PyPI.
|
|
2
|
-
|
|
3
|
-
name: Publish to PyPI
|
|
4
|
-
|
|
5
|
-
on:
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
pull_request:
|
|
8
|
-
types:
|
|
9
|
-
- closed
|
|
10
|
-
branches:
|
|
11
|
-
- "release"
|
|
12
|
-
- "release/**"
|
|
13
|
-
- "beta"
|
|
14
|
-
- "beta/**"
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
build:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
if: |
|
|
20
|
-
github.event_name == 'workflow_dispatch' ||
|
|
21
|
-
contains(github.event.pull_request.labels.*.name, 'release')
|
|
22
|
-
steps:
|
|
23
|
-
#----------------------------------------------
|
|
24
|
-
# check-out repo and set-up python
|
|
25
|
-
#----------------------------------------------
|
|
26
|
-
- uses: actions/checkout@v5
|
|
27
|
-
- uses: astral-sh/setup-uv@v6
|
|
28
|
-
#----------------------------------------------
|
|
29
|
-
# -------- Build and release ---------
|
|
30
|
-
#----------------------------------------------
|
|
31
|
-
- name: Build dist and Publish to PyPI
|
|
32
|
-
env:
|
|
33
|
-
UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
34
|
-
run: |
|
|
35
|
-
uv build --no-sources
|
|
36
|
-
uv publish --username __token__
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# For most projects, this workflow file will not need changing; you simply need
|
|
2
|
-
# to commit it to your repository.
|
|
3
|
-
#
|
|
4
|
-
# You may wish to alter this file to override the set of languages analyzed,
|
|
5
|
-
# or to provide custom queries or build logic.
|
|
6
|
-
#
|
|
7
|
-
# ******** NOTE ********
|
|
8
|
-
# We have attempted to detect the languages in your repository. Please check
|
|
9
|
-
# the `language` matrix defined below to confirm you have the correct set of
|
|
10
|
-
# supported CodeQL languages.
|
|
11
|
-
#
|
|
12
|
-
name: "CodeQL"
|
|
13
|
-
|
|
14
|
-
on:
|
|
15
|
-
pull_request:
|
|
16
|
-
# The branches below must be a subset of the branches above
|
|
17
|
-
branches: [ beta ]
|
|
18
|
-
paths:
|
|
19
|
-
- "*.py"
|
|
20
|
-
schedule:
|
|
21
|
-
- cron: '31 23 * * 0/2'
|
|
22
|
-
|
|
23
|
-
jobs:
|
|
24
|
-
analyze:
|
|
25
|
-
name: Analyze
|
|
26
|
-
runs-on: ubuntu-latest
|
|
27
|
-
permissions:
|
|
28
|
-
actions: read
|
|
29
|
-
contents: read
|
|
30
|
-
security-events: write
|
|
31
|
-
|
|
32
|
-
strategy:
|
|
33
|
-
fail-fast: false
|
|
34
|
-
matrix:
|
|
35
|
-
language: [ 'python' ]
|
|
36
|
-
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
|
37
|
-
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
|
38
|
-
|
|
39
|
-
steps:
|
|
40
|
-
- name: Checkout repository
|
|
41
|
-
uses: actions/checkout@v5
|
|
42
|
-
|
|
43
|
-
# Initializes the CodeQL tools for scanning.
|
|
44
|
-
- name: Initialize CodeQL
|
|
45
|
-
uses: github/codeql-action/init@v3
|
|
46
|
-
with:
|
|
47
|
-
languages: ${{ matrix.language }}
|
|
48
|
-
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
49
|
-
# By default, queries listed here will override any specified in a config file.
|
|
50
|
-
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
51
|
-
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
52
|
-
|
|
53
|
-
- name: Perform CodeQL Analysis
|
|
54
|
-
uses: github/codeql-action/analyze@v3
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
concurrency:
|
|
58
|
-
group: codeql-${{ github.ref_name }}
|
|
59
|
-
cancel-in-progress: true
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
name: Sphinx Build and Deploy
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
pull_request:
|
|
6
|
-
types:
|
|
7
|
-
- review_requested
|
|
8
|
-
- closed
|
|
9
|
-
branches:
|
|
10
|
-
- beta
|
|
11
|
-
paths:
|
|
12
|
-
- doc/**
|
|
13
|
-
- .github/workflows/sphinx.yml
|
|
14
|
-
|
|
15
|
-
concurrency:
|
|
16
|
-
group: pages
|
|
17
|
-
cancel-in-progress: true
|
|
18
|
-
|
|
19
|
-
jobs:
|
|
20
|
-
sphinx-build:
|
|
21
|
-
runs-on: ubuntu-latest
|
|
22
|
-
permissions:
|
|
23
|
-
contents: read
|
|
24
|
-
steps:
|
|
25
|
-
- uses: actions/checkout@v5
|
|
26
|
-
- uses: actions/configure-pages@v5
|
|
27
|
-
- uses: astral-sh/setup-uv@v6
|
|
28
|
-
with:
|
|
29
|
-
activate-environment: true
|
|
30
|
-
|
|
31
|
-
- name: Install Library and Build HTML
|
|
32
|
-
run: |
|
|
33
|
-
echo "::group::Install Library"
|
|
34
|
-
uv sync --no-default-groups --group doc
|
|
35
|
-
echo "::endgroup::"
|
|
36
|
-
|
|
37
|
-
echo "::group::Build HTML"
|
|
38
|
-
uv run sphinx-build doc/source doc/build/html -D release=$(uv version --short)
|
|
39
|
-
echo "::endgroup::"
|
|
40
|
-
|
|
41
|
-
- name: Fix permissions
|
|
42
|
-
run: |
|
|
43
|
-
chmod -c -R +rX "doc/build/html/" | while read line; do
|
|
44
|
-
echo "::warning title=Invalid file permissions automatically fixed::$line"
|
|
45
|
-
done
|
|
46
|
-
|
|
47
|
-
- name: Upload artifact
|
|
48
|
-
if: |
|
|
49
|
-
github.event_name == 'workflow_dispatch' ||
|
|
50
|
-
(github.event_name == 'pull_request' && github.event.action == 'closed')
|
|
51
|
-
uses: actions/upload-pages-artifact@v4
|
|
52
|
-
with:
|
|
53
|
-
path: doc/build/html
|
|
54
|
-
|
|
55
|
-
deploy:
|
|
56
|
-
if: |
|
|
57
|
-
github.event_name == 'workflow_dispatch' ||
|
|
58
|
-
(github.event_name == 'pull_request' && github.event.action == 'closed')
|
|
59
|
-
environment:
|
|
60
|
-
name: github-pages
|
|
61
|
-
url: ${{ steps.deployment.outputs.page_url }}
|
|
62
|
-
permissions:
|
|
63
|
-
pages: write
|
|
64
|
-
id-token: write
|
|
65
|
-
runs-on: ubuntu-latest
|
|
66
|
-
needs: sphinx-build
|
|
67
|
-
outputs:
|
|
68
|
-
page_url: ${{ steps.deployment.outputs.page_url }}
|
|
69
|
-
steps:
|
|
70
|
-
- name: Deploy to GitHub Pages
|
|
71
|
-
id: deployment
|
|
72
|
-
uses: actions/deploy-pages@v4
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# install dependency and current package
|
|
2
|
-
name: Test Poetry Project
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
pull_request:
|
|
6
|
-
types:
|
|
7
|
-
- review_requested
|
|
8
|
-
branches:
|
|
9
|
-
- beta
|
|
10
|
-
- release
|
|
11
|
-
|
|
12
|
-
concurrency:
|
|
13
|
-
group: test-${{ github.ref_name }}
|
|
14
|
-
cancel-in-progress: true
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
install-test:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
strategy:
|
|
20
|
-
matrix:
|
|
21
|
-
python-version: ["3.13", "3.11", "3.10", "3.9"]
|
|
22
|
-
steps:
|
|
23
|
-
#----------------------------------------------
|
|
24
|
-
# check-out repo and set-up python
|
|
25
|
-
#----------------------------------------------
|
|
26
|
-
- uses: actions/checkout@v5
|
|
27
|
-
- uses: astral-sh/setup-uv@v6
|
|
28
|
-
with:
|
|
29
|
-
python-version: ${{ matrix.python-version }}
|
|
30
|
-
activate-environment: true
|
|
31
|
-
enable-cache: true
|
|
32
|
-
|
|
33
|
-
- name: Install and Test
|
|
34
|
-
env:
|
|
35
|
-
TEST_UIN: ${{ secrets.TEST_UIN }}
|
|
36
|
-
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
|
|
37
|
-
run: |
|
|
38
|
-
echo "::group::Install Basic Dependencies"
|
|
39
|
-
uv sync --no-default-groups --group test
|
|
40
|
-
echo "::endgroup::"
|
|
41
|
-
|
|
42
|
-
echo "::group::pytest outputs"
|
|
43
|
-
uv run pytest test --log-cli-level=WARNING
|
|
44
|
-
echo "::endgroup::"
|
|
45
|
-
|
|
46
|
-
- name: Request Changes
|
|
47
|
-
env:
|
|
48
|
-
GH_TOKEN: ${{ secrets.COMMENT_PAT }} # the reviewer PAT
|
|
49
|
-
run: |
|
|
50
|
-
if [[ $GH_TOKEN != "" ]]; then
|
|
51
|
-
gh pr review ${{ github.event.pull_request.number }} -r -b "Some test(s) failed."
|
|
52
|
-
fi
|
aioqzone-1.9.5.dev6/.gitignore
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# local config
|
|
2
|
-
.vscode
|
|
3
|
-
.env
|
|
4
|
-
uv.toml
|
|
5
|
-
package-lock.json
|
|
6
|
-
|
|
7
|
-
# venv
|
|
8
|
-
.venv
|
|
9
|
-
.tox
|
|
10
|
-
/venv
|
|
11
|
-
node_modules
|
|
12
|
-
|
|
13
|
-
# cache and tempfiles
|
|
14
|
-
__pycache__
|
|
15
|
-
*.pyc
|
|
16
|
-
tmp
|
|
17
|
-
/data
|
|
18
|
-
|
|
19
|
-
# build, metadata and distributions
|
|
20
|
-
/dist
|
|
21
|
-
/build
|
|
22
|
-
/doc/source/locale/**/*.mo
|
|
23
|
-
*.egg-info
|
|
24
|
-
|
|
25
|
-
# useless documents
|
|
26
|
-
/archive
|
|
27
|
-
/doc/*
|
|
28
|
-
!/doc/source
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# See https://pre-commit.com for more information
|
|
2
|
-
# See https://pre-commit.com/hooks.html for more hooks
|
|
3
|
-
repos:
|
|
4
|
-
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
-
rev: v5.0.0
|
|
6
|
-
hooks:
|
|
7
|
-
- id: check-case-conflict
|
|
8
|
-
- id: trailing-whitespace
|
|
9
|
-
- id: end-of-file-fixer
|
|
10
|
-
- id: check-yaml
|
|
11
|
-
- id: check-added-large-files
|
|
12
|
-
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
13
|
-
rev: 0.7.2
|
|
14
|
-
hooks:
|
|
15
|
-
- id: uv-lock
|
|
16
|
-
- repo: local
|
|
17
|
-
hooks:
|
|
18
|
-
- id: isort
|
|
19
|
-
name: sort imports
|
|
20
|
-
entry: uv run --active ruff check --select I --fix
|
|
21
|
-
pass_filenames: false
|
|
22
|
-
language: system
|
|
23
|
-
types: [python]
|
|
24
|
-
- id: black
|
|
25
|
-
name: format
|
|
26
|
-
entry: uv run --active ruff format
|
|
27
|
-
pass_filenames: false
|
|
28
|
-
language: system
|
|
29
|
-
types: [python]
|
|
30
|
-
- id: pytest
|
|
31
|
-
name: pytest-check
|
|
32
|
-
entry: uv run --active pytest test
|
|
33
|
-
language: system
|
|
34
|
-
pass_filenames: false
|
|
35
|
-
types: [python, toml]
|
|
36
|
-
default_language_version:
|
|
37
|
-
python: python3
|