aioqzone 1.8.5.dev1__tar.gz → 1.8.6.dev1__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.8.5.dev1 → aioqzone-1.8.6.dev1}/PKG-INFO +8 -8
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/pyproject.toml +8 -8
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/feed.py +12 -5
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/LICENSE +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/README.md +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/h5/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/h5/model.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/login/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/login/_base.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/exception.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/message.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/profile.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/request.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/response.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/config.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/entity.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/entity.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/regex.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/retry.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/time.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/base.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/constant.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/exception.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/message.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/py.typed +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/qr/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/qr/type.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/type.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/_model.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/_model.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/capsess.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/pil_utils.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/select/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/select/_types.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/slide/__init__.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/slide/_types.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/encrypt.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/h5.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/web.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/encrypt.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/iter.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/jsjson.py +0 -0
- {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/net.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aioqzone
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.6.dev1
|
|
4
4
|
Summary: A Python wrapper for Qzone login and H5 APIs.
|
|
5
5
|
Home-page: https://github.com/aioqzone/aioqzone
|
|
6
6
|
License: AGPL-3.0
|
|
@@ -20,16 +20,16 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
20
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Provides-Extra: slide-captcha
|
|
23
|
-
Requires-Dist: aiohttp (>=3.
|
|
23
|
+
Requires-Dist: aiohttp (>=3.9.0,<4.0.0)
|
|
24
24
|
Requires-Dist: exceptiongroup (>=1.1.1,<2.0.0)
|
|
25
|
-
Requires-Dist: pillow (>=10.0
|
|
26
|
-
Requires-Dist: pychaosvm (>=0.
|
|
27
|
-
Requires-Dist: pydantic (>=2.0
|
|
28
|
-
Requires-Dist: pydantic-settings (>=2.0
|
|
25
|
+
Requires-Dist: pillow (>=10.1.0,<11.0.0)
|
|
26
|
+
Requires-Dist: pychaosvm (>=0.4.0,<0.5.0)
|
|
27
|
+
Requires-Dist: pydantic (>=2.5.0,<3.0.0)
|
|
28
|
+
Requires-Dist: pydantic-settings (>=2.2.0,<3.0.0)
|
|
29
29
|
Requires-Dist: rsa (>=4.8,<5.0)
|
|
30
30
|
Requires-Dist: slide-tc (>=0.1.1,<0.2.0) ; extra == "slide-captcha"
|
|
31
|
-
Requires-Dist: tenacity (>=8.2.3,<
|
|
32
|
-
Requires-Dist: tylisten (>=2.1.
|
|
31
|
+
Requires-Dist: tenacity (>=8.2.3,<10.0.0)
|
|
32
|
+
Requires-Dist: tylisten (>=2.1.4,<3.0.0)
|
|
33
33
|
Project-URL: Bug Tracker, https://github.com/aioqzone/aioqzone/issues
|
|
34
34
|
Project-URL: Documentation, https://aioqzone.github.io/aioqzone
|
|
35
35
|
Project-URL: Discussion, https://t.me/aioqzone_chatroom
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "aioqzone"
|
|
3
|
-
version = "1.8.
|
|
3
|
+
version = "1.8.6.dev1"
|
|
4
4
|
description = "A Python wrapper for Qzone login and H5 APIs."
|
|
5
5
|
authors = ["aioqzone <zzzzss990315@gmail.com>"]
|
|
6
6
|
license = "AGPL-3.0"
|
|
@@ -28,15 +28,15 @@ exclude = ["*.js"]
|
|
|
28
28
|
|
|
29
29
|
[tool.poetry.dependencies]
|
|
30
30
|
python = "^3.8"
|
|
31
|
-
aiohttp = "^3.
|
|
32
|
-
pydantic = "^2.0
|
|
33
|
-
pydantic-settings = "^2.0
|
|
31
|
+
aiohttp = "^3.9.0"
|
|
32
|
+
pydantic = "^2.5.0"
|
|
33
|
+
pydantic-settings = "^2.2.0"
|
|
34
34
|
rsa = "^4.8"
|
|
35
|
-
tenacity = "
|
|
35
|
+
tenacity = ">=8.2.3,<10.0.0"
|
|
36
36
|
exceptiongroup = "^1.1.1"
|
|
37
|
-
tylisten = "^2.1.
|
|
38
|
-
pillow = "^10.0
|
|
39
|
-
pychaosvm = { version = "
|
|
37
|
+
tylisten = "^2.1.4"
|
|
38
|
+
pillow = "^10.1.0"
|
|
39
|
+
pychaosvm = { version = "~0.4.0", source = "aioqzone-index" }
|
|
40
40
|
slide-tc = {version = "~0.1.1", optional = true, source = "aioqzone-index" }
|
|
41
41
|
|
|
42
42
|
[tool.poetry.extras]
|
|
@@ -8,6 +8,7 @@ from pydantic import (
|
|
|
8
8
|
BaseModel,
|
|
9
9
|
Field,
|
|
10
10
|
HttpUrl,
|
|
11
|
+
RootModel,
|
|
11
12
|
field_validator,
|
|
12
13
|
model_validator,
|
|
13
14
|
)
|
|
@@ -97,21 +98,27 @@ class PhotoUrl(BaseModel):
|
|
|
97
98
|
and (o.height == self.height)
|
|
98
99
|
)
|
|
99
100
|
|
|
101
|
+
@property
|
|
102
|
+
def area(self):
|
|
103
|
+
return self.height * self.width
|
|
100
104
|
|
|
101
|
-
class PhotoUrls(BaseModel):
|
|
102
|
-
urls: t.Set[PhotoUrl]
|
|
103
105
|
|
|
106
|
+
class PhotoUrls(RootModel[t.Set[PhotoUrl]]):
|
|
104
107
|
@model_validator(mode="before")
|
|
105
108
|
def unpack_urls(cls, v: dict):
|
|
106
|
-
return
|
|
109
|
+
return list(v.values())
|
|
107
110
|
|
|
108
111
|
@property
|
|
109
112
|
def largest(self) -> PhotoUrl:
|
|
110
|
-
return max(self.
|
|
113
|
+
return max(self.root, key=lambda p: p.area)
|
|
111
114
|
|
|
112
115
|
@property
|
|
113
116
|
def smallest(self) -> PhotoUrl:
|
|
114
|
-
return min(self.
|
|
117
|
+
return min(self.root, key=lambda p: p.area)
|
|
118
|
+
|
|
119
|
+
@property
|
|
120
|
+
def urls(self):
|
|
121
|
+
return self.root
|
|
115
122
|
|
|
116
123
|
|
|
117
124
|
class FeedVideo(BaseModel):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|