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.
Files changed (52) hide show
  1. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/PKG-INFO +8 -8
  2. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/pyproject.toml +8 -8
  3. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/feed.py +12 -5
  4. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/LICENSE +0 -0
  5. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/README.md +0 -0
  6. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/__init__.py +0 -0
  7. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/__init__.py +0 -0
  8. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/h5/__init__.py +0 -0
  9. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/h5/model.py +0 -0
  10. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/login/__init__.py +0 -0
  11. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/api/login/_base.py +0 -0
  12. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/exception.py +0 -0
  13. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/message.py +0 -0
  14. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/__init__.py +0 -0
  15. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/__init__.py +0 -0
  16. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/profile.py +0 -0
  17. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/request.py +0 -0
  18. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/api/response.py +0 -0
  19. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/__init__.py +0 -0
  20. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/config.py +0 -0
  21. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/model/protocol/entity.py +0 -0
  22. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/__init__.py +0 -0
  23. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/entity.py +0 -0
  24. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/regex.py +0 -0
  25. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/retry.py +0 -0
  26. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/aioqzone/utils/time.py +0 -0
  27. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/__init__.py +0 -0
  28. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/base.py +0 -0
  29. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/constant.py +0 -0
  30. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/exception.py +0 -0
  31. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/message.py +0 -0
  32. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/py.typed +0 -0
  33. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/qr/__init__.py +0 -0
  34. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/qr/type.py +0 -0
  35. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/type.py +0 -0
  36. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/__init__.py +0 -0
  37. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/_model.py +0 -0
  38. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/__init__.py +0 -0
  39. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/_model.py +0 -0
  40. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/capsess.py +0 -0
  41. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/pil_utils.py +0 -0
  42. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/select/__init__.py +0 -0
  43. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/select/_types.py +0 -0
  44. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/slide/__init__.py +0 -0
  45. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/captcha/slide/_types.py +0 -0
  46. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/encrypt.py +0 -0
  47. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/h5.py +0 -0
  48. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/up/web.py +0 -0
  49. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/encrypt.py +0 -0
  50. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/iter.py +0 -0
  51. {aioqzone-1.8.5.dev1 → aioqzone-1.8.6.dev1}/src/qqqr/utils/jsjson.py +0 -0
  52. {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.5.dev1
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.8.5,<4.0.0)
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.1,<11.0.0)
26
- Requires-Dist: pychaosvm (>=0.3.4,<0.5.0)
27
- Requires-Dist: pydantic (>=2.0.3,<3.0.0)
28
- Requires-Dist: pydantic-settings (>=2.0.2,<3.0.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,<9.0.0)
32
- Requires-Dist: tylisten (>=2.1.3,<3.0.0)
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.5.dev1"
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.8.5"
32
- pydantic = "^2.0.3"
33
- pydantic-settings = "^2.0.2"
31
+ aiohttp = "^3.9.0"
32
+ pydantic = "^2.5.0"
33
+ pydantic-settings = "^2.2.0"
34
34
  rsa = "^4.8"
35
- tenacity = "^8.2.3"
35
+ tenacity = ">=8.2.3,<10.0.0"
36
36
  exceptiongroup = "^1.1.1"
37
- tylisten = "^2.1.3"
38
- pillow = "^10.0.1"
39
- pychaosvm = { version = ">=0.3.4,<0.5.0", source = "aioqzone-index" }
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 dict(urls=list(v.values()))
109
+ return list(v.values())
107
110
 
108
111
  @property
109
112
  def largest(self) -> PhotoUrl:
110
- return max(self.urls, key=lambda p: p.height * p.width)
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.urls, key=lambda p: p.height * p.width)
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