aioqzone 1.9.3.dev3__tar.gz → 1.9.4.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.
Files changed (138) hide show
  1. aioqzone-1.9.4.dev2/.github/dependabot.yml +13 -0
  2. aioqzone-1.9.4.dev2/.github/workflows/auto-pr.yml +37 -0
  3. aioqzone-1.9.4.dev2/.github/workflows/build.yml +36 -0
  4. aioqzone-1.9.4.dev2/.github/workflows/codeql-analysis.yml +59 -0
  5. aioqzone-1.9.4.dev2/.github/workflows/sphinx.yml +67 -0
  6. aioqzone-1.9.4.dev2/.github/workflows/test.yml +51 -0
  7. aioqzone-1.9.4.dev2/.gitignore +28 -0
  8. aioqzone-1.9.4.dev2/.pre-commit-config.yaml +37 -0
  9. aioqzone-1.9.4.dev2/CONTRIBUTING.md +9 -0
  10. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/PKG-INFO +21 -29
  11. aioqzone-1.9.4.dev2/README_en.md +84 -0
  12. aioqzone-1.9.4.dev2/cliff.toml +59 -0
  13. aioqzone-1.9.4.dev2/doc/source/_static/penguin-blob.webp +0 -0
  14. aioqzone-1.9.4.dev2/doc/source/_static/teaencoder.ts +145 -0
  15. aioqzone-1.9.4.dev2/doc/source/aioqzone/api/h5.rst +5 -0
  16. aioqzone-1.9.4.dev2/doc/source/aioqzone/api/index.rst +8 -0
  17. aioqzone-1.9.4.dev2/doc/source/aioqzone/api/login.rst +16 -0
  18. aioqzone-1.9.4.dev2/doc/source/aioqzone/exception.rst +6 -0
  19. aioqzone-1.9.4.dev2/doc/source/aioqzone/index.rst +12 -0
  20. aioqzone-1.9.4.dev2/doc/source/aioqzone/messages.rst +30 -0
  21. aioqzone-1.9.4.dev2/doc/source/aioqzone/model/api.rst +23 -0
  22. aioqzone-1.9.4.dev2/doc/source/aioqzone/model/index.rst +8 -0
  23. aioqzone-1.9.4.dev2/doc/source/aioqzone/model/protocol.rst +26 -0
  24. aioqzone-1.9.4.dev2/doc/source/aioqzone/reference.rst +29 -0
  25. aioqzone-1.9.4.dev2/doc/source/conf.py +79 -0
  26. aioqzone-1.9.4.dev2/doc/source/disclaimers.rst +49 -0
  27. aioqzone-1.9.4.dev2/doc/source/index.rst +37 -0
  28. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/h5.po +255 -0
  29. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/index.po +22 -0
  30. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/login.po +234 -0
  31. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/api/web.po +488 -0
  32. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/exception.po +52 -0
  33. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/index.po +22 -0
  34. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/messages.po +226 -0
  35. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/api.po +835 -0
  36. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/index.po +24 -0
  37. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/protocol.po +227 -0
  38. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/model/response.po +1023 -0
  39. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/aioqzone/reference.po +78 -0
  40. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/disclaimers.po +171 -0
  41. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/index.po +74 -0
  42. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/base.po +75 -0
  43. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/exception.po +78 -0
  44. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/index.po +61 -0
  45. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/jsjson.po +134 -0
  46. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/index.po +22 -0
  47. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/login.po +257 -0
  48. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/qr/type.po +70 -0
  49. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/capsess.po +32 -0
  50. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/captcha.po +166 -0
  51. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/index.po +108 -0
  52. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/captcha/jigsaw.po +204 -0
  53. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/encrypt.po +43 -0
  54. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/index.po +26 -0
  55. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/login.po +101 -0
  56. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/qqqr/up/type.po +433 -0
  57. aioqzone-1.9.4.dev2/doc/source/locale/zh_CN/LC_MESSAGES/reference.po +77 -0
  58. aioqzone-1.9.4.dev2/doc/source/qqqr/base.rst +7 -0
  59. aioqzone-1.9.4.dev2/doc/source/qqqr/exception.rst +6 -0
  60. aioqzone-1.9.4.dev2/doc/source/qqqr/index.rst +46 -0
  61. aioqzone-1.9.4.dev2/doc/source/qqqr/jsjson.rst +7 -0
  62. aioqzone-1.9.4.dev2/doc/source/qqqr/qr/index.rst +8 -0
  63. aioqzone-1.9.4.dev2/doc/source/qqqr/qr/login.rst +14 -0
  64. aioqzone-1.9.4.dev2/doc/source/qqqr/qr/type.rst +8 -0
  65. aioqzone-1.9.4.dev2/doc/source/qqqr/up/captcha/capsess.rst +14 -0
  66. aioqzone-1.9.4.dev2/doc/source/qqqr/up/captcha/captcha.rst +10 -0
  67. aioqzone-1.9.4.dev2/doc/source/qqqr/up/captcha/index.rst +69 -0
  68. aioqzone-1.9.4.dev2/doc/source/qqqr/up/encrypt.rst +5 -0
  69. aioqzone-1.9.4.dev2/doc/source/qqqr/up/index.rst +19 -0
  70. aioqzone-1.9.4.dev2/doc/source/qqqr/up/login.rst +12 -0
  71. aioqzone-1.9.4.dev2/doc/source/qqqr/up/type.rst +8 -0
  72. aioqzone-1.9.4.dev2/pyproject.toml +85 -0
  73. aioqzone-1.9.4.dev2/test/api/__init__.py +0 -0
  74. aioqzone-1.9.4.dev2/test/api/conftest.py +39 -0
  75. aioqzone-1.9.4.dev2/test/api/test_h5.py +124 -0
  76. aioqzone-1.9.4.dev2/test/api/test_loginman.py +122 -0
  77. aioqzone-1.9.4.dev2/test/conftest.py +30 -0
  78. aioqzone-1.9.4.dev2/test/login_logic/__init__.py +0 -0
  79. aioqzone-1.9.4.dev2/test/login_logic/test_captcha.py +109 -0
  80. aioqzone-1.9.4.dev2/test/login_logic/test_qr.py +84 -0
  81. aioqzone-1.9.4.dev2/test/login_logic/test_up.py +103 -0
  82. aioqzone-1.9.4.dev2/test/utils/test_entity.py +37 -0
  83. aioqzone-1.9.4.dev2/test/utils/test_json.py +35 -0
  84. aioqzone-1.9.4.dev2/test/utils/test_time.py +11 -0
  85. aioqzone-1.9.4.dev2/uv.lock +2005 -0
  86. aioqzone-1.9.3.dev3/pyproject.toml +0 -103
  87. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/LICENSE +0 -0
  88. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/README.md +0 -0
  89. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/__init__.py +0 -0
  90. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/api/__init__.py +0 -0
  91. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/api/h5/__init__.py +0 -0
  92. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/api/h5/model.py +0 -0
  93. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/api/login/__init__.py +0 -0
  94. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/api/login/_base.py +0 -0
  95. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/exception.py +0 -0
  96. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/message.py +0 -0
  97. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/__init__.py +0 -0
  98. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/api/__init__.py +0 -0
  99. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/api/feed.py +0 -0
  100. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/api/profile.py +0 -0
  101. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/api/request.py +0 -0
  102. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/api/response.py +0 -0
  103. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/protocol/__init__.py +0 -0
  104. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/protocol/config.py +0 -0
  105. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/model/protocol/entity.py +0 -0
  106. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/utils/__init__.py +0 -0
  107. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/utils/entity.py +0 -0
  108. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/utils/regex.py +0 -0
  109. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/utils/retry.py +0 -0
  110. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/aioqzone/utils/time.py +0 -0
  111. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/__init__.py +0 -0
  112. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/base.py +0 -0
  113. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/constant.py +0 -0
  114. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/exception.py +0 -0
  115. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/message.py +0 -0
  116. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/py.typed +0 -0
  117. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/qr/__init__.py +0 -0
  118. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/qr/type.py +0 -0
  119. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/type.py +0 -0
  120. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/__init__.py +0 -0
  121. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/_model.py +0 -0
  122. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/__init__.py +0 -0
  123. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/_model.py +0 -0
  124. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/capsess.py +0 -0
  125. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/click/__init__.py +0 -0
  126. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/click/_types.py +0 -0
  127. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/pil_utils.py +0 -0
  128. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/select/__init__.py +0 -0
  129. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/select/_types.py +0 -0
  130. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/slide/__init__.py +0 -0
  131. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/captcha/slide/_types.py +0 -0
  132. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/encrypt.py +0 -0
  133. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/h5.py +0 -0
  134. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/up/web.py +0 -0
  135. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/utils/encrypt.py +0 -0
  136. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/utils/iter.py +0 -0
  137. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/utils/jsjson.py +0 -0
  138. {aioqzone-1.9.3.dev3 → aioqzone-1.9.4.dev2}/src/qqqr/utils/net.py +0 -0
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ updates:
3
+ # Maintain dependencies for GitHub Actions
4
+ - package-ecosystem: github-actions
5
+ directory: "/"
6
+ schedule:
7
+ interval: weekly
8
+ day: saturday
9
+
10
+ - package-ecosystem: pip
11
+ directory: "/"
12
+ schedule:
13
+ interval: daily
@@ -0,0 +1,37 @@
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@v4
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 }}
@@ -0,0 +1,36 @@
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@v4
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
36
+ uv publish --username __token__
@@ -0,0 +1,59 @@
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@v4
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
@@ -0,0 +1,67 @@
1
+ name: Sphinx Build and Deploy
2
+
3
+ on:
4
+ pull_request:
5
+ types:
6
+ - review_requested
7
+ branches:
8
+ - beta
9
+ push:
10
+ branches:
11
+ - beta
12
+ paths:
13
+ - doc/**
14
+ - .github/workflows/sphinx.yml
15
+
16
+ concurrency:
17
+ group: pages
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ sphinx-build:
22
+ runs-on: ubuntu-latest
23
+ permissions:
24
+ contents: read
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ - uses: actions/configure-pages@v5
28
+ - uses: astral-sh/setup-uv@v6
29
+
30
+ - name: Install Library and Build HTML
31
+ run: |
32
+ echo "::group::Install Library"
33
+ uv sync --group doc
34
+ echo "::endgroup::"
35
+
36
+ echo "::group::Build HTML"
37
+ uv run sphinx-build doc/source doc/build/html -D release=$(uv version --short)
38
+ echo "::endgroup::"
39
+
40
+ - name: Fix permissions
41
+ run: |
42
+ chmod -c -R +rX "doc/build/html/" | while read line; do
43
+ echo "::warning title=Invalid file permissions automatically fixed::$line"
44
+ done
45
+
46
+ - name: Upload artifact
47
+ if: github.event_name == 'push'
48
+ uses: actions/upload-pages-artifact@v3
49
+ with:
50
+ path: doc/build/html
51
+
52
+ deploy:
53
+ if: github.event_name == 'push'
54
+ environment:
55
+ name: github-pages
56
+ url: ${{ steps.deployment.outputs.page_url }}
57
+ permissions:
58
+ pages: write
59
+ id-token: write
60
+ runs-on: ubuntu-latest
61
+ needs: sphinx-build
62
+ outputs:
63
+ page_url: ${{ steps.deployment.outputs.page_url }}
64
+ steps:
65
+ - name: Deploy to GitHub Pages
66
+ id: deployment
67
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,51 @@
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@v4
27
+ - uses: astral-sh/setup-uv@v6
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ enable-cache: true
31
+
32
+ - name: Install and Test
33
+ env:
34
+ TEST_UIN: ${{ secrets.TEST_UIN }}
35
+ TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
36
+ run: |
37
+ echo "::group::Install Basic Dependencies"
38
+ uv sync --group test
39
+ echo "::endgroup::"
40
+
41
+ echo "::group::pytest outputs"
42
+ uv run pytest test --log-cli-level=WARNING
43
+ echo "::endgroup::"
44
+
45
+ - name: Request Changes
46
+ env:
47
+ GH_TOKEN: ${{ secrets.COMMENT_PAT }} # the reviewer PAT
48
+ run: |
49
+ if [[ $GH_TOKEN != "" ]]; then
50
+ gh pr review ${{ github.event.pull_request.number }} -r -b "Some test(s) failed."
51
+ fi
@@ -0,0 +1,28 @@
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
@@ -0,0 +1,37 @@
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 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 ruff format
27
+ pass_filenames: false
28
+ language: system
29
+ types: [python]
30
+ - id: pytest
31
+ name: pytest-check
32
+ entry: uv run pytest test
33
+ language: system
34
+ pass_filenames: false
35
+ types: [python, toml]
36
+ default_language_version:
37
+ python: python3
@@ -0,0 +1,9 @@
1
+ # Contributing
2
+
3
+ Welcome to aioqzone community.
4
+
5
+ ## Add Test
6
+
7
+ Our tests are not fully coveraged. New unittests are needed.
8
+
9
+ No special rules for tests. Just create a pull request if you've done your work.
@@ -1,39 +1,32 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: aioqzone
3
- Version: 1.9.3.dev3
3
+ Version: 1.9.4.dev2
4
4
  Summary: A Python wrapper for Qzone login and H5 APIs.
5
- License: AGPL-3.0
6
- Keywords: qzone-api,autologin,asyncio-spider
5
+ Project-URL: Homepage, https://github.com/aioqzone/aioqzone
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
7
10
  Author: aioqzone
8
- Author-email: 22952836+JamzumSum@users.noreply.github.com
9
- Requires-Python: >=3.9,<4.0
11
+ Maintainer-email: JamzumSum <22952836+JamzumSum@users.noreply.github.com>
12
+ License-Expression: AGPL-3.0
13
+ License-File: LICENSE
14
+ Keywords: asyncio-spider,autologin,qzone-api
10
15
  Classifier: Development Status :: 4 - Beta
11
16
  Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.9
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
19
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
18
  Classifier: Typing :: Typed
19
+ Requires-Python: >=3.9
20
+ Requires-Dist: aiohttp>=3.9.0
21
+ Requires-Dist: pillow>=10.1.0
22
+ Requires-Dist: pychaosvm~=0.4.3
23
+ Requires-Dist: pydantic-settings>=2.9.0
24
+ Requires-Dist: pydantic>=2.11.4
25
+ Requires-Dist: rsa>=4.9.1
26
+ Requires-Dist: tenacity<10.0.0,>=8.2.3
27
+ Requires-Dist: tylisten>=2.2.1
21
28
  Provides-Extra: slide-captcha
22
- Requires-Dist: aiohttp (>=3.9.0,<4.0.0)
23
- Requires-Dist: exceptiongroup (>=1.1.1,<2.0.0)
24
- Requires-Dist: pillow (>=10.1.0,<11.0.0)
25
- Requires-Dist: pychaosvm (>=0.4.3,<0.5.0)
26
- Requires-Dist: pydantic (>=2.11.3,<3.0.0)
27
- Requires-Dist: pydantic-settings (>=2.2.0,<3.0.0)
28
- Requires-Dist: rsa (>=4.8,<5.0)
29
- Requires-Dist: slide-tc (>=0.1.1,<0.2.0) ; extra == "slide-captcha"
30
- Requires-Dist: tenacity (>=8.2.3,<10.0.0)
31
- Requires-Dist: tylisten (>=2.1.4,<3.0.0)
32
- Project-URL: Bug Tracker, https://github.com/aioqzone/aioqzone/issues
33
- Project-URL: Documentation, https://aioqzone.github.io/aioqzone
34
- Project-URL: Discussion, https://t.me/aioqzone_chatroom
35
- Project-URL: Homepage, https://github.com/aioqzone/aioqzone
36
- Project-URL: Repository, https://github.com/aioqzone/aioqzone
29
+ Requires-Dist: slide-tc~=0.1.1; extra == 'slide-captcha'
37
30
  Description-Content-Type: text/markdown
38
31
 
39
32
  # aioqzone
@@ -123,4 +116,3 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
123
116
  [pychaosvm]: https://github.com/aioqzone/pychaosvm "A Python envirionment for Tencent ChaosVM."
124
117
  [pypi]: https://pypi.org/project/aioqzone
125
118
  [org]: https://github.com/aioqzone
126
-
@@ -0,0 +1,84 @@
1
+ # aioqzone
2
+
3
+ aioqzone is a python package handling Qzone web login and wrapping some common Qzone Http apis.
4
+
5
+ [![python](https://img.shields.io/pypi/pyversions/aioqzone?logo=python&logoColor=white)][home]
6
+ [![version](https://img.shields.io/pypi/v/aioqzone?logo=python)][pypi]
7
+ [![style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
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
+
10
+ English | [简体中文](README.md)
11
+
12
+ > [!WARNING]
13
+ > aioqzone is under active development. Any functionality and interface may be changed.
14
+
15
+ ## Features
16
+
17
+ ### Qzone Feature
18
+
19
+ - [x] [QR login](src/qqqr/qr/)
20
+ - [x] [password login](src/qqqr/up/) (limited)
21
+ - [x] [solve slide captcha](src/qqqr/up/captcha/slide)
22
+ - [x] [parse select captcha](src/qqqr/up/captcha/select)
23
+ - [ ] [pass network environment verification][pychaosvm]
24
+ - [x] get complete html feeds
25
+ - [x] get feed details
26
+ - [x] like/unlike app
27
+ - [x] publish/update/delete text feeds
28
+ - [x] add comment
29
+
30
+ ### Why using this package?
31
+
32
+ - [x] full ide typing support (typing)
33
+ - [x] api validation (pydantic)
34
+ - [x] async design
35
+ - [x] complete infrastructure to ease your own develop
36
+ - [x] [doc support](https://aioqzone.github.io/aioqzone)
37
+
38
+ __Working On:__
39
+
40
+ - [ ] test coverage
41
+
42
+ ## Description
43
+
44
+ |package |brief description |
45
+ |-----------|-------------------|
46
+ |aioqzone |qzone api |
47
+ |qqqr |qzone login |
48
+
49
+ ## Examples
50
+
51
+ You can look for these repos for examples in practice.
52
+
53
+ ### aioqzone plugins
54
+
55
+ - [aioqzone-feed][aioqzone-feed]: aioqzone plugin providing higher level api for processing feed
56
+
57
+
58
+ ## License
59
+
60
+ ```
61
+ Copyright (C) 2022-2025 aioqzone.
62
+
63
+ This program is free software: you can redistribute it and/or modify
64
+ it under the terms of the GNU Affero General Public License as published
65
+ by the Free Software Foundation, either version 3 of the License, or
66
+ (at your option) any later version.
67
+
68
+ This program is distributed in the hope that it will be useful,
69
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
70
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
71
+ GNU Affero General Public License for more details.
72
+
73
+ You should have received a copy of the GNU Affero General Public License
74
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
75
+ ```
76
+
77
+ - [AGPL-3.0](LICENSE)
78
+ - [Disclaimers](https://aioqzone.github.io/aioqzone/disclaimers.html)
79
+
80
+
81
+ [home]: https://github.com/aioqzone/aioqzone "Python wrapper for Qzone web login and Qzone http api"
82
+ [aioqzone-feed]: https://github.com/aioqzone/aioqzone-feed "aioqzone plugin providing higher level api for processing feed"
83
+ [pychaosvm]: https://github.com/aioqzone/pychaosvm "A Python envirionment for Tencent ChaosVM."
84
+ [pypi]: https://pypi.org/project/aioqzone
@@ -0,0 +1,59 @@
1
+ # configuration file for git-cliff (0.1.0)
2
+
3
+ [changelog]
4
+ # changelog header
5
+ header = """
6
+ # Changelog
7
+
8
+ All notable changes to this project will be documented in this file.\n
9
+ """
10
+ # template for the changelog body
11
+ # https://tera.netlify.app/docs/#introduction
12
+ body = """
13
+ {% if version %}\
14
+ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
15
+ {% else %}\
16
+ ## [unreleased]
17
+ {% endif %}\
18
+ {% for group, commits in commits | group_by(attribute="group") %}
19
+ ### {{ group | upper_first }}
20
+ {% for commit in commits %}
21
+ {% raw -%} - {% endraw %}\
22
+ {%- if commit.breaking -%} 💥 **{% endif -%}\
23
+ {%- if commit.scope -%} ({{ commit.scope }}) {% endif -%}\
24
+ {{ commit.message | upper_first }} ({{ commit.id | truncate(length=7, end="") }})\
25
+ {%- if commit.breaking -%} ** {%- endif -%}\
26
+ {% endfor %}
27
+ {% endfor %}\n
28
+ """
29
+ # remove the leading and trailing whitespaces from the template
30
+ trim = true
31
+ # changelog footer
32
+ footer = """
33
+ <!-- generated by git-cliff -->
34
+ """
35
+
36
+ [git]
37
+ # allow only conventional commits
38
+ # https://www.conventionalcommits.org
39
+ conventional_commits = true
40
+ # regex for parsing and grouping commits
41
+ commit_parsers = [
42
+ { message = "^build", group = "Build"},
43
+ { message = "^ci", group = "CI/CD"},
44
+ { message = "^feat", group = "Features"},
45
+ { message = "^fix", group = "Bug Fixes"},
46
+ { message = "^doc", group = "Documentation"},
47
+ { message = "^fmt", group = "Styling"},
48
+ { message = "^perf", group = "Performance"},
49
+ { message = "^proj", group = "Project"},
50
+ { message = "^chore", group = "Miscellaneous"},
51
+ { message = "^refactor", group = "Refactor"},
52
+ { message = "^style", group = "Styling"},
53
+ { message = "^test", group = "Testing"},
54
+ { body = ".*security", group = "Security"},
55
+ ]
56
+ # filter out the commits that are not matched by commit parsers
57
+ filter_commits = false
58
+ # glob pattern for matching git tags
59
+ tag_pattern = "v[0-9]*"