aioqzone 1.9.6.dev2__tar.gz → 1.9.6.dev4__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 (53) hide show
  1. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/PKG-INFO +1 -1
  2. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/pyproject.toml +5 -10
  3. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/api/h5/model.py +1 -1
  4. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/api/login/__init__.py +16 -0
  5. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/qr/__init__.py +2 -2
  6. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/README.md +0 -0
  7. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/__init__.py +0 -0
  8. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/api/__init__.py +0 -0
  9. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/api/h5/__init__.py +0 -0
  10. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/api/login/_base.py +0 -0
  11. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/exception.py +0 -0
  12. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/message.py +0 -0
  13. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/__init__.py +0 -0
  14. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/api/__init__.py +0 -0
  15. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/api/feed.py +0 -0
  16. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/api/profile.py +0 -0
  17. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/api/request.py +0 -0
  18. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/api/response.py +0 -0
  19. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/protocol/__init__.py +0 -0
  20. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/protocol/config.py +0 -0
  21. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/model/protocol/entity.py +0 -0
  22. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/utils/__init__.py +0 -0
  23. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/utils/entity.py +0 -0
  24. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/utils/regex.py +0 -0
  25. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/utils/retry.py +0 -0
  26. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/aioqzone/utils/time.py +0 -0
  27. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/__init__.py +0 -0
  28. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/base.py +0 -0
  29. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/constant.py +0 -0
  30. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/exception.py +0 -0
  31. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/message.py +0 -0
  32. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/py.typed +0 -0
  33. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/qr/type.py +0 -0
  34. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/type.py +0 -0
  35. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/__init__.py +0 -0
  36. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/_model.py +0 -0
  37. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/__init__.py +0 -0
  38. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/_model.py +0 -0
  39. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/capsess.py +0 -0
  40. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/click/__init__.py +0 -0
  41. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/click/_types.py +0 -0
  42. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/pil_utils.py +0 -0
  43. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/select/__init__.py +0 -0
  44. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/select/_types.py +0 -0
  45. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/slide/__init__.py +0 -0
  46. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/captcha/slide/_types.py +0 -0
  47. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/encrypt.py +0 -0
  48. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/h5.py +0 -0
  49. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/up/web.py +0 -0
  50. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/utils/encrypt.py +0 -0
  51. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/utils/iter.py +0 -0
  52. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/utils/jsjson.py +0 -0
  53. {aioqzone-1.9.6.dev2 → aioqzone-1.9.6.dev4}/src/qqqr/utils/net.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aioqzone
3
- Version: 1.9.6.dev2
3
+ Version: 1.9.6.dev4
4
4
  Summary: A Python wrapper for Qzone login and H5 APIs.
5
5
  Keywords: qzone-api,autologin,asyncio-spider
6
6
  Author: aioqzone
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aioqzone"
3
- version = "1.9.6.dev2"
3
+ version = "1.9.6.dev4"
4
4
  description = "A Python wrapper for Qzone login and H5 APIs."
5
5
  authors = [{ name = "aioqzone" }]
6
6
  maintainers = [
@@ -40,10 +40,10 @@ 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=='3.10'",
44
- "Sphinx>=8.2.0; python_version>='3.11'",
45
- "autodoc-pydantic>=2.0.1",
46
- "sphinx-autodoc-typehints~=2.5",
43
+ "Sphinx>=8.1.3; python_version=='3.10'",
44
+ "Sphinx~=9.0; python_version>='3.11'",
45
+ "autodoc-pydantic>=2.2.0",
46
+ "sphinx-autodoc-typehints~=3.0",
47
47
  "furo",
48
48
  "sphinx-intl",
49
49
  "sphinx-inline-tabs",
@@ -84,8 +84,3 @@ ignore = [
84
84
  "F403", # 'from module import *' used; unable to detect undefined names
85
85
  "F405", # name may be undefined, or defined from star imports
86
86
  ]
87
-
88
- [tool.pyright]
89
- pythonVersion = "3.10"
90
- pythonPlatform = "All"
91
- reportIncompatibleVariableOverride = "information"
@@ -86,7 +86,7 @@ class QzoneH5API:
86
86
  try:
87
87
  return api.response.from_response_object(obj)
88
88
  except ValidationError:
89
- log.debug(f"Error when validating {obj}", api)
89
+ log.debug(f"Error when validating {obj}, {api=}")
90
90
  raise
91
91
  else:
92
92
  raise AssertionError
@@ -183,6 +183,22 @@ class QrLoginManager(Loginable):
183
183
  log.fatal("二维码登录异常", exc_info=True)
184
184
  raise UnexpectedLoginError from e
185
185
 
186
+ if self.uin:
187
+ return cookie
188
+
189
+ # uin in qrconfig might be 0, we could get uin after login
190
+ for k, v in cookie.items():
191
+ if not k.endswith("uin"):
192
+ continue
193
+ v = v.removeprefix("o0")
194
+ if not v.isdigit():
195
+ continue
196
+ try:
197
+ self.uin = int(v)
198
+ except ValueError:
199
+ continue
200
+ if self.uin:
201
+ break
186
202
  return cookie
187
203
 
188
204
  def h5(self, enable=True, clear_cookie=True):
@@ -108,7 +108,7 @@ class QrLogin(LoginBase[QrSession], _QrHookMixin):
108
108
  async with self.client.get(RECENT_UIN_URL, params=params) as response:
109
109
  dev_mid_sig = response.cookies.get("dev_mid_sig")
110
110
  m = re.search(r"ptui_fetch_dev_uin_CB\((.*)\)", r := await response.text())
111
- log.debug("pt_fetch_dev_uin response:", r)
111
+ log.debug(f"pt_fetch_dev_uin response: {r}")
112
112
 
113
113
  if m:
114
114
  r = FetchDevUinResp.model_validate_json(m.group(1))
@@ -143,7 +143,7 @@ class QrLogin(LoginBase[QrSession], _QrHookMixin):
143
143
  )
144
144
  m = re.search(r"ptui_qrcode_CB\((.*)\)", r := await r.text())
145
145
 
146
- log.debug("ptqrshow(qr_push) response:", r)
146
+ log.debug(f"ptqrshow(qr_push) response: {r}")
147
147
  assert m
148
148
  resp = PushQrResp.model_validate_json(m.group(1))
149
149
  if qrsig and resp.code == 0:
File without changes