aioqzone 1.8.5.dev1__tar.gz → 1.9.0.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.9.0.dev1}/PKG-INFO +12 -12
  2. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/README.md +2 -2
  3. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/pyproject.toml +11 -11
  4. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/api/feed.py +12 -5
  5. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/type.py +1 -1
  6. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/LICENSE +0 -0
  7. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/__init__.py +0 -0
  8. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/api/__init__.py +0 -0
  9. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/api/h5/__init__.py +0 -0
  10. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/api/h5/model.py +0 -0
  11. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/api/login/__init__.py +0 -0
  12. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/api/login/_base.py +0 -0
  13. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/exception.py +0 -0
  14. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/message.py +0 -0
  15. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/__init__.py +0 -0
  16. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/api/__init__.py +0 -0
  17. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/api/profile.py +0 -0
  18. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/api/request.py +0 -0
  19. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/api/response.py +0 -0
  20. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/protocol/__init__.py +0 -0
  21. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/protocol/config.py +0 -0
  22. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/model/protocol/entity.py +0 -0
  23. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/utils/__init__.py +0 -0
  24. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/utils/entity.py +0 -0
  25. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/utils/regex.py +0 -0
  26. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/utils/retry.py +0 -0
  27. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/aioqzone/utils/time.py +0 -0
  28. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/__init__.py +0 -0
  29. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/base.py +0 -0
  30. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/constant.py +0 -0
  31. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/exception.py +0 -0
  32. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/message.py +0 -0
  33. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/py.typed +0 -0
  34. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/qr/__init__.py +0 -0
  35. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/qr/type.py +0 -0
  36. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/__init__.py +0 -0
  37. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/_model.py +0 -0
  38. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/__init__.py +0 -0
  39. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/_model.py +0 -0
  40. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/capsess.py +0 -0
  41. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/pil_utils.py +0 -0
  42. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/select/__init__.py +0 -0
  43. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/select/_types.py +0 -0
  44. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/slide/__init__.py +0 -0
  45. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/captcha/slide/_types.py +0 -0
  46. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/encrypt.py +0 -0
  47. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/h5.py +0 -0
  48. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/up/web.py +0 -0
  49. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/utils/encrypt.py +0 -0
  50. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/utils/iter.py +0 -0
  51. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/utils/jsjson.py +0 -0
  52. {aioqzone-1.8.5.dev1 → aioqzone-1.9.0.dev1}/src/qqqr/utils/net.py +0 -0
@@ -1,35 +1,35 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aioqzone
3
- Version: 1.8.5.dev1
3
+ Version: 1.9.0.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
7
7
  Keywords: qzone-api,autologin,asyncio-spider
8
8
  Author: aioqzone
9
9
  Author-email: zzzzss990315@gmail.com
10
- Requires-Python: >=3.8,<4.0
10
+ Requires-Python: >=3.9,<4.0
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
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.1,<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
@@ -43,7 +43,7 @@ aioqzone封装了一些Qzone接口。
43
43
  [![python](https://img.shields.io/pypi/pyversions/aioqzone?logo=python&logoColor=white)][home]
44
44
  [![version](https://img.shields.io/pypi/v/aioqzone?logo=python)][pypi]
45
45
  [![style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
46
- [![discuss](https://img.shields.io/badge/dynamic/xml?style=social&logo=telegram&label=Discuss&query=%2F%2Fdiv%5B%40class%3D%22tgme_page_extra%22%5D&url=https%3A%2F%2Ft.me%2Faioqzone_chatroom)](https://t.me/aioqzone_chatroom)
46
+ [![discuss](https://img.shields.io/endpoint?label=Discuss&style=social&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Faioqzone_chatroom)](https://t.me/aioqzone_chatroom)
47
47
 
48
48
  [English](README_en.md) | 简体中文
49
49
 
@@ -98,7 +98,7 @@ __在做了:__
98
98
  ## 许可证
99
99
 
100
100
  ```
101
- Copyright (C) 2022-2023 aioqzone.
101
+ Copyright (C) 2022-2024 aioqzone.
102
102
 
103
103
  This program is free software: you can redistribute it and/or modify
104
104
  it under the terms of the GNU Affero General Public License as published
@@ -5,7 +5,7 @@ aioqzone封装了一些Qzone接口。
5
5
  [![python](https://img.shields.io/pypi/pyversions/aioqzone?logo=python&logoColor=white)][home]
6
6
  [![version](https://img.shields.io/pypi/v/aioqzone?logo=python)][pypi]
7
7
  [![style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
8
- [![discuss](https://img.shields.io/badge/dynamic/xml?style=social&logo=telegram&label=Discuss&query=%2F%2Fdiv%5B%40class%3D%22tgme_page_extra%22%5D&url=https%3A%2F%2Ft.me%2Faioqzone_chatroom)](https://t.me/aioqzone_chatroom)
8
+ [![discuss](https://img.shields.io/endpoint?label=Discuss&style=social&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Faioqzone_chatroom)](https://t.me/aioqzone_chatroom)
9
9
 
10
10
  [English](README_en.md) | 简体中文
11
11
 
@@ -60,7 +60,7 @@ __在做了:__
60
60
  ## 许可证
61
61
 
62
62
  ```
63
- Copyright (C) 2022-2023 aioqzone.
63
+ Copyright (C) 2022-2024 aioqzone.
64
64
 
65
65
  This program is free software: you can redistribute it and/or modify
66
66
  it under the terms of the GNU Affero General Public License as published
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aioqzone"
3
- version = "1.8.5.dev1"
3
+ version = "1.9.0.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"
@@ -27,16 +27,16 @@ exclude = ["*.js"]
27
27
  "Discussion" = "https://t.me/aioqzone_chatroom"
28
28
 
29
29
  [tool.poetry.dependencies]
30
- python = "^3.8"
31
- aiohttp = "^3.8.5"
32
- pydantic = "^2.0.3"
33
- pydantic-settings = "^2.0.2"
30
+ python = "^3.9"
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.1", source = "aioqzone-index" }
40
40
  slide-tc = {version = "~0.1.1", optional = true, source = "aioqzone-index" }
41
41
 
42
42
  [tool.poetry.extras]
@@ -94,8 +94,8 @@ line_length = 99
94
94
 
95
95
  [tool.black]
96
96
  line-length = 99
97
- target-version = ['py38']
97
+ target-version = ['py39']
98
98
 
99
99
  [tool.pyright]
100
- pythonVersion = "3.8"
100
+ pythonVersion = "3.9"
101
101
  pythonPlatform = "All"
@@ -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):
@@ -3,7 +3,7 @@ from dataclasses import dataclass
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
6
- if sys.version_info >= (3, 9):
6
+ if sys.version_info >= (3, 10):
7
7
  frozen_args = dict(frozen=True, slots=True)
8
8
  else:
9
9
  frozen_args = dict(frozen=True)
File without changes