python-gitea 0.7.0__tar.gz → 0.9.0__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 (308) hide show
  1. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/codeql.yml +3 -3
  2. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/support_floor_update.yml +1 -1
  3. {python_gitea-0.7.0 → python_gitea-0.9.0}/.pre-commit-config.yaml +2 -2
  4. {python_gitea-0.7.0 → python_gitea-0.9.0}/PKG-INFO +82 -24
  5. {python_gitea-0.7.0 → python_gitea-0.9.0}/README.md +81 -23
  6. python_gitea-0.9.0/docs/contributing.md +1 -0
  7. python_gitea-0.9.0/docs/dev/architecture.md +145 -0
  8. python_gitea-0.9.0/docs/dev/troubleshooting.md +409 -0
  9. python_gitea-0.9.0/docs/gen_ref_pages.py +85 -0
  10. python_gitea-0.9.0/docs/index.md +1 -0
  11. python_gitea-0.9.0/docs/security.md +1 -0
  12. python_gitea-0.9.0/docs/user-guide/cli.md +519 -0
  13. python_gitea-0.9.0/docs/user-guide/configuration.md +125 -0
  14. {python_gitea-0.7.0/docs/user_guide → python_gitea-0.9.0/docs/user-guide}/installation.md +14 -37
  15. python_gitea-0.9.0/docs/user-guide/python-api.md +196 -0
  16. python_gitea-0.9.0/docs/user-guide/quickstart.md +99 -0
  17. {python_gitea-0.7.0 → python_gitea-0.9.0}/mkdocs.yml +40 -8
  18. {python_gitea-0.7.0 → python_gitea-0.9.0}/pyproject.toml +3 -3
  19. python_gitea-0.9.0/src/gitea/cli/comment/__init__.py +1 -0
  20. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/comment/add.py +15 -7
  21. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/comment/delete.py +9 -4
  22. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/comment/edit.py +9 -4
  23. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/comment/list.py +15 -7
  24. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/config/add.py +12 -0
  25. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/config/delete.py +17 -2
  26. python_gitea-0.9.0/src/gitea/cli/config/list.py +54 -0
  27. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/config/update.py +13 -0
  28. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/create.py +9 -4
  29. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/add.py +32 -12
  30. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/list.py +15 -7
  31. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/remove.py +32 -12
  32. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/edit.py +15 -7
  33. python_gitea-0.9.0/src/gitea/cli/issue/get.py +109 -0
  34. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/list.py +9 -4
  35. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/main.py +4 -0
  36. python_gitea-0.9.0/src/gitea/cli/label/__init__.py +1 -0
  37. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/label/create.py +9 -4
  38. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/label/delete.py +9 -4
  39. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/label/list.py +9 -4
  40. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/label/update.py +9 -4
  41. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/main.py +44 -1
  42. python_gitea-0.9.0/src/gitea/cli/milestone/__init__.py +1 -0
  43. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/create.py +9 -4
  44. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/list.py +9 -4
  45. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/notification/list.py +1 -1
  46. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/notification/read.py +1 -1
  47. python_gitea-0.9.0/src/gitea/cli/output.py +70 -0
  48. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/create.py +6 -3
  49. python_gitea-0.7.0/src/gitea/cli/project/issue/add.py → python_gitea-0.9.0/src/gitea/cli/project/column/issues.py +24 -12
  50. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/list.py +6 -3
  51. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/create.py +6 -3
  52. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/delete.py +6 -3
  53. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/edit.py +6 -3
  54. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/get.py +6 -3
  55. python_gitea-0.9.0/src/gitea/cli/project/issue/add.py +110 -0
  56. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/move.py +38 -10
  57. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/remove.py +37 -9
  58. python_gitea-0.9.0/src/gitea/cli/project/issues.py +108 -0
  59. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/list.py +6 -3
  60. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/main.py +4 -0
  61. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/list.py +9 -4
  62. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/user/get.py +1 -1
  63. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/user/update_settings.py +1 -1
  64. python_gitea-0.9.0/src/gitea/cli/utils/api.py +96 -0
  65. python_gitea-0.9.0/src/gitea/cli/utils/errors.py +56 -0
  66. python_gitea-0.9.0/src/gitea/cli/utils/issue.py +253 -0
  67. python_gitea-0.9.0/src/gitea/cli/utils/options.py +110 -0
  68. python_gitea-0.9.0/src/gitea/cli/watch/__init__.py +1 -0
  69. python_gitea-0.9.0/src/gitea/cli/watch/list.py +419 -0
  70. python_gitea-0.9.0/src/gitea/cli/watch/main.py +21 -0
  71. python_gitea-0.9.0/src/gitea/issue/__init__.py +9 -0
  72. python_gitea-0.9.0/src/gitea/issue/project_column.py +336 -0
  73. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/project/async_project.py +74 -74
  74. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/project/base.py +58 -38
  75. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/project/project.py +74 -74
  76. python_gitea-0.9.0/src/gitea/utils/pagination.py +100 -0
  77. python_gitea-0.9.0/src/gitea/watch/__init__.py +54 -0
  78. python_gitea-0.9.0/src/gitea/watch/changes.py +336 -0
  79. python_gitea-0.9.0/src/gitea/watch/state.py +468 -0
  80. python_gitea-0.9.0/tests/board.py +122 -0
  81. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_add.py +1 -1
  82. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_list.py +1 -1
  83. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_add.py +125 -1
  84. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_delete.py +106 -1
  85. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_list.py +63 -0
  86. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_update.py +146 -1
  87. python_gitea-0.9.0/tests/cli/envelope.py +49 -0
  88. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/dependency/test_cli_issue_dependency.py +5 -5
  89. python_gitea-0.9.0/tests/cli/issue/test_cli_issue_comment.py +55 -0
  90. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_edit.py +1 -1
  91. python_gitea-0.9.0/tests/cli/issue/test_cli_issue_get.py +206 -0
  92. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/notification/test_cli_notification.py +89 -0
  93. python_gitea-0.9.0/tests/cli/project/test_cli_project.py +796 -0
  94. python_gitea-0.9.0/tests/cli/project/test_cli_project_column_issues.py +347 -0
  95. python_gitea-0.9.0/tests/cli/rendering.py +39 -0
  96. python_gitea-0.9.0/tests/cli/test_cli_main.py +919 -0
  97. python_gitea-0.9.0/tests/cli/test_cli_output.py +101 -0
  98. python_gitea-0.9.0/tests/cli/transport.py +105 -0
  99. python_gitea-0.9.0/tests/cli/utils/test_cli_utils_api.py +182 -0
  100. python_gitea-0.9.0/tests/cli/utils/test_cli_utils_errors.py +47 -0
  101. python_gitea-0.9.0/tests/cli/utils/test_cli_utils_issue.py +410 -0
  102. python_gitea-0.9.0/tests/cli/utils/test_cli_utils_options.py +113 -0
  103. python_gitea-0.9.0/tests/cli/watch/__init__.py +1 -0
  104. python_gitea-0.9.0/tests/cli/watch/test_cli_watch_list.py +1174 -0
  105. python_gitea-0.9.0/tests/issue/test_issue_async_project_column.py +231 -0
  106. python_gitea-0.9.0/tests/issue/test_issue_project_column.py +334 -0
  107. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/project/test_project_base.py +62 -0
  108. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/project/test_project_project.py +25 -0
  109. python_gitea-0.9.0/tests/utils/test_utils_pagination.py +139 -0
  110. python_gitea-0.9.0/tests/watch/__init__.py +1 -0
  111. python_gitea-0.9.0/tests/watch/test_watch_changes.py +414 -0
  112. python_gitea-0.9.0/tests/watch/test_watch_state.py +697 -0
  113. {python_gitea-0.7.0 → python_gitea-0.9.0}/uv.lock +234 -164
  114. python_gitea-0.7.0/docs/dev/troubleshooting.md +0 -302
  115. python_gitea-0.7.0/docs/gen_ref_pages.py +0 -95
  116. python_gitea-0.7.0/docs/index.md +0 -12
  117. python_gitea-0.7.0/src/gitea/cli/config/list.py +0 -40
  118. python_gitea-0.7.0/src/gitea/cli/issue/get.py +0 -76
  119. python_gitea-0.7.0/src/gitea/cli/utils/api.py +0 -32
  120. python_gitea-0.7.0/src/gitea/issue/__init__.py +0 -8
  121. python_gitea-0.7.0/tests/cli/issue/test_cli_issue_get.py +0 -39
  122. python_gitea-0.7.0/tests/cli/project/test_cli_project.py +0 -373
  123. python_gitea-0.7.0/tests/cli/test_cli_main.py +0 -99
  124. python_gitea-0.7.0/tests/cli/utils/test_cli_utils_api.py +0 -46
  125. {python_gitea-0.7.0 → python_gitea-0.9.0}/.coderabbit.yaml +0 -0
  126. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  127. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  128. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  129. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/pull_request_template.md +0 -0
  130. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/ci.yml +0 -0
  131. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/documentation.yml +0 -0
  132. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/draft_release.yml +0 -0
  133. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/publish.yml +0 -0
  134. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/publish_testpypi.yml +0 -0
  135. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/release.yml +0 -0
  136. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/scheduled_release.yml +0 -0
  137. {python_gitea-0.7.0 → python_gitea-0.9.0}/.github/workflows/semantic_pull_request.yml +0 -0
  138. {python_gitea-0.7.0 → python_gitea-0.9.0}/.gitignore +0 -0
  139. {python_gitea-0.7.0 → python_gitea-0.9.0}/.markdownlint.yaml +0 -0
  140. {python_gitea-0.7.0 → python_gitea-0.9.0}/.prettierrc +0 -0
  141. {python_gitea-0.7.0 → python_gitea-0.9.0}/.pypirc +0 -0
  142. {python_gitea-0.7.0 → python_gitea-0.9.0}/.typos.toml +0 -0
  143. {python_gitea-0.7.0 → python_gitea-0.9.0}/CITATION.cff +0 -0
  144. {python_gitea-0.7.0 → python_gitea-0.9.0}/CODE_OF_CONDUCT.md +0 -0
  145. {python_gitea-0.7.0 → python_gitea-0.9.0}/CONTRIBUTING.md +0 -0
  146. {python_gitea-0.7.0 → python_gitea-0.9.0}/LICENSE +0 -0
  147. {python_gitea-0.7.0 → python_gitea-0.9.0}/SECURITY.md +0 -0
  148. {python_gitea-0.7.0 → python_gitea-0.9.0}/SUPPORT.md +0 -0
  149. {python_gitea-0.7.0 → python_gitea-0.9.0}/cliff.toml +0 -0
  150. {python_gitea-0.7.0 → python_gitea-0.9.0}/docs/javascripts/mathjax.js +0 -0
  151. {python_gitea-0.7.0 → python_gitea-0.9.0}/docs/style/api.css +0 -0
  152. {python_gitea-0.7.0 → python_gitea-0.9.0}/renovate.json +0 -0
  153. {python_gitea-0.7.0 → python_gitea-0.9.0}/scripts/release_version.py +0 -0
  154. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/__init__.py +0 -0
  155. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/__main__.py +0 -0
  156. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/__init__.py +0 -0
  157. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/comment/main.py +0 -0
  158. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/config/__init__.py +0 -0
  159. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/config/main.py +0 -0
  160. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/__init__.py +0 -0
  161. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/__init__.py +0 -0
  162. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/main.py +0 -0
  163. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/label/main.py +0 -0
  164. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/main.py +0 -0
  165. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/notification/__init__.py +0 -0
  166. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/notification/main.py +0 -0
  167. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/__init__.py +0 -0
  168. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/__init__.py +0 -0
  169. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/__init__.py +0 -0
  170. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/__init__.py +0 -0
  171. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/main.py +0 -0
  172. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/user/__init__.py +0 -0
  173. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/user/main.py +0 -0
  174. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/utils/__init__.py +0 -0
  175. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/utils/auth.py +0 -0
  176. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/cli/utils/convert.py +0 -0
  177. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/client/__init__.py +0 -0
  178. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/client/async_gitea.py +0 -0
  179. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/client/base.py +0 -0
  180. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/client/gitea.py +0 -0
  181. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/comment/__init__.py +0 -0
  182. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/comment/async_comment.py +0 -0
  183. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/comment/base.py +0 -0
  184. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/comment/comment.py +0 -0
  185. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/config/__init__.py +0 -0
  186. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/config/manager.py +0 -0
  187. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/config/model.py +0 -0
  188. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/issue/async_issue.py +0 -0
  189. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/issue/base.py +0 -0
  190. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/issue/issue.py +0 -0
  191. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/label/__init__.py +0 -0
  192. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/label/async_label.py +0 -0
  193. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/label/base.py +0 -0
  194. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/label/label.py +0 -0
  195. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/milestone/__init__.py +0 -0
  196. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/milestone/async_milestone.py +0 -0
  197. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/milestone/base.py +0 -0
  198. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/milestone/milestone.py +0 -0
  199. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/notification/__init__.py +0 -0
  200. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/notification/async_notification.py +0 -0
  201. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/notification/base.py +0 -0
  202. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/notification/notification.py +0 -0
  203. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/project/__init__.py +0 -0
  204. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/pull_request/__init__.py +0 -0
  205. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/pull_request/async_pull_request.py +0 -0
  206. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/pull_request/base.py +0 -0
  207. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/pull_request/pull_request.py +0 -0
  208. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/repository/__init__.py +0 -0
  209. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/repository/async_repository.py +0 -0
  210. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/repository/base.py +0 -0
  211. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/repository/repository.py +0 -0
  212. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/resource/__init__.py +0 -0
  213. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/resource/async_resource.py +0 -0
  214. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/resource/resource.py +0 -0
  215. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/user/__init__.py +0 -0
  216. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/user/async_user.py +0 -0
  217. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/user/base.py +0 -0
  218. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/user/user.py +0 -0
  219. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/utils/__init__.py +0 -0
  220. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/utils/log.py +0 -0
  221. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/utils/response.py +0 -0
  222. {python_gitea-0.7.0 → python_gitea-0.9.0}/src/gitea/version.py +0 -0
  223. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/__init__.py +0 -0
  224. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/__init__.py +0 -0
  225. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/__init__.py +0 -0
  226. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_delete.py +0 -0
  227. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_edit.py +0 -0
  228. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_main.py +0 -0
  229. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/__init__.py +0 -0
  230. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_main.py +0 -0
  231. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/__init__.py +0 -0
  232. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/dependency/__init__.py +0 -0
  233. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_create.py +0 -0
  234. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_list.py +0 -0
  235. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_main.py +0 -0
  236. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/__init__.py +0 -0
  237. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_create.py +0 -0
  238. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_delete.py +0 -0
  239. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_list.py +0 -0
  240. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_main.py +0 -0
  241. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_update.py +0 -0
  242. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/milestone/__init__.py +0 -0
  243. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_create.py +0 -0
  244. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_list.py +0 -0
  245. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_main.py +0 -0
  246. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/notification/__init__.py +0 -0
  247. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/project/__init__.py +0 -0
  248. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/pull_request/__init__.py +0 -0
  249. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/pull_request/test_cli_pull_request_list.py +0 -0
  250. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/pull_request/test_cli_pull_request_main.py +0 -0
  251. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/user/__init__.py +0 -0
  252. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/user/test_cli_user_get.py +0 -0
  253. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/user/test_cli_user_update_settings.py +0 -0
  254. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/utils/__init__.py +0 -0
  255. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/utils/test_cli_utils_auth.py +0 -0
  256. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/cli/utils/test_cli_utils_convert.py +0 -0
  257. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/client/__init__.py +0 -0
  258. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/client/test_client_async_gitea.py +0 -0
  259. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/client/test_client_base.py +0 -0
  260. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/client/test_client_gitea.py +0 -0
  261. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/comment/__init__.py +0 -0
  262. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/comment/test_comment_async_comment.py +0 -0
  263. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/comment/test_comment_base.py +0 -0
  264. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/comment/test_comment_comment.py +0 -0
  265. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/config/__init__.py +0 -0
  266. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/config/test_config_manager.py +0 -0
  267. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/config/test_config_model.py +0 -0
  268. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/conftest.py +0 -0
  269. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/issue/__init__.py +0 -0
  270. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/issue/test_issue_async_issue.py +0 -0
  271. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/issue/test_issue_base.py +0 -0
  272. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/issue/test_issue_dependencies.py +0 -0
  273. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/issue/test_issue_issue.py +0 -0
  274. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/label/__init__.py +0 -0
  275. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/label/test_label_async_label.py +0 -0
  276. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/label/test_label_base.py +0 -0
  277. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/label/test_label_label.py +0 -0
  278. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/milestone/__init__.py +0 -0
  279. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_async_milestone.py +0 -0
  280. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_base.py +0 -0
  281. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_milestone.py +0 -0
  282. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/notification/__init__.py +0 -0
  283. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/notification/test_notification_base.py +0 -0
  284. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/notification/test_notification_notification.py +0 -0
  285. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/project/__init__.py +0 -0
  286. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/pull_request/__init__.py +0 -0
  287. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_async_pull_request.py +0 -0
  288. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_base.py +0 -0
  289. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_pull_request.py +0 -0
  290. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/repository/__init__.py +0 -0
  291. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/repository/test_repository_async_repository.py +0 -0
  292. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/repository/test_repository_base.py +0 -0
  293. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/repository/test_repository_repository.py +0 -0
  294. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/resource/__init__.py +0 -0
  295. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/resource/test_resource_async_resource.py +0 -0
  296. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/resource/test_resource_resource.py +0 -0
  297. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/smoke_test.py +0 -0
  298. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/test_import.py +0 -0
  299. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/test_main.py +0 -0
  300. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/test_release_version.py +0 -0
  301. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/test_version.py +0 -0
  302. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/user/__init__.py +0 -0
  303. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/user/test_user_async_user.py +0 -0
  304. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/user/test_user_base.py +0 -0
  305. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/user/test_user_user.py +0 -0
  306. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/utils/__init__.py +0 -0
  307. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/utils/test_utils_log.py +0 -0
  308. {python_gitea-0.7.0 → python_gitea-0.9.0}/tests/utils/test_utils_response.py +0 -0
@@ -22,13 +22,13 @@ jobs:
22
22
  uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
23
23
 
24
24
  - name: Initialize CodeQL
25
- uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
25
+ uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
26
26
  with:
27
27
  languages: python
28
28
  queries: security-and-quality
29
29
 
30
30
  - name: Autobuild
31
- uses: github/codeql-action/autobuild@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
31
+ uses: github/codeql-action/autobuild@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
32
32
 
33
33
  - name: Perform CodeQL Analysis
34
- uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
34
+ uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
@@ -22,7 +22,7 @@ jobs:
22
22
 
23
23
  - name: Apply support policy (spec0, from pyproject tool table)
24
24
  id: policy
25
- uses: isaac-cf-wong/dependency-support-policy-action@8cfabba7ba994cda4699cdbd0fbc7ede04dac145 # v0.2.3
25
+ uses: isaac-cf-wong/dependency-support-policy-action@7cce60e19b902747b4267c4f8e53820e3f3656ea # v0.2.4
26
26
  with:
27
27
  mode: update
28
28
 
@@ -16,7 +16,7 @@ repos:
16
16
  - id: check-json
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.16.2
19
+ rev: v0.16.3
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: [--fix, --config=pyproject.toml]
@@ -52,7 +52,7 @@ repos:
52
52
  - id: actionlint
53
53
 
54
54
  - repo: https://github.com/astral-sh/uv-pre-commit
55
- rev: 0.12.3
55
+ rev: 0.12.5
56
56
  hooks:
57
57
  # Update the uv lockfile
58
58
  - id: uv-lock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-gitea
3
- Version: 0.7.0
3
+ Version: 0.9.0
4
4
  Summary: A Python package for interacting with the Gitea API, offering a simple interface to access repositories, users, organizations, issues, and more for automation and data management.
5
5
  Project-URL: Documentation, https://isaac-cf-wong.github.io/python-gitea
6
6
  Project-URL: Source, https://github.com/isaac-cf-wong/python-gitea
@@ -33,29 +33,71 @@ Description-Content-Type: text/markdown
33
33
  [![codecov](https://codecov.io/gh/isaac-cf-wong/python-gitea/graph/badge.svg?token=COF8341N60)](https://codecov.io/gh/isaac-cf-wong/python-gitea)
34
34
  [![PyPI Version](https://img.shields.io/pypi/v/python-gitea)](https://pypi.org/project/python-gitea/)
35
35
  [![Python Versions](https://img.shields.io/pypi/pyversions/python-gitea)](https://pypi.org/project/python-gitea/)
36
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
36
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE)
37
37
  [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
38
38
  [![DOI](https://zenodo.org/badge/1129170965.svg)](https://doi.org/10.5281/zenodo.18211496)
39
39
 
40
- **Note:** This project is still in progress. The promised features are not fully
41
- ready yet, and APIs are subject to change.
42
-
43
- A Python package for interacting with the Gitea API. This package provides a
44
- simple and intuitive interface to access Gitea repositories, users,
45
- organizations, issues, and more, enabling seamless integration with Gitea
46
- instances for automation, data retrieval, and management tasks.
40
+ A Python package for interacting with the Gitea API. It provides a simple,
41
+ intuitive interface to access Gitea repositories, users, organizations, issues,
42
+ and more, enabling seamless integration with Gitea instances for automation,
43
+ data retrieval, and management tasks.
47
44
 
48
45
  ## Features
49
46
 
50
- Full API Coverage: Access to repositories, users, organizations, issues, pull
51
- requests, and more.
47
+ - **Full API Coverage**: Repositories, users, organizations, issues, pull
48
+ requests, comments, labels, milestones, notifications, and projects.
49
+ - **Easy Authentication**: Token-based authentication, with multiple saved
50
+ accounts and a default-account fallback.
51
+ - **Asynchronous Support**: Built with `async`/`await` for non-blocking
52
+ operations alongside the synchronous client.
53
+ - **Type Hints**: Full type annotations for better IDE support and code
54
+ reliability.
55
+ - **Command-Line Interface**: Interact with the Gitea API directly from the
56
+ terminal for quick, scriptable operations without writing code.
57
+ - **Comprehensive Documentation**: Detailed guides and a generated API
58
+ reference.
59
+
60
+ ## Quick Start
61
+
62
+ ### 1. Install
63
+
64
+ ```bash
65
+ uv venv --python 3.13
66
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
67
+ uv pip install python-gitea
68
+ ```
69
+
70
+ ### 2. Configure an account
71
+
72
+ ```bash
73
+ gitea-cli config add --name my_account --token YOUR_API_TOKEN --base-url https://gitea.example.com
74
+ ```
75
+
76
+ ### 3. Use the CLI
77
+
78
+ ```bash
79
+ # List issues of a repository
80
+ gitea-cli issue list --owner my-org --repository my-repo
52
81
 
53
- - Easy Authentication: Support for token-based authentication.
54
- - Asynchronous Support: Built with async/await for non-blocking operations.
55
- - Type Hints: Full type annotations for better IDE support and code reliability.
56
- - Comprehensive Documentation: Detailed guides and API reference.
57
- - Command-Line Interface: Interact with the Gitea API directly from the terminal
58
- for quick, scriptable operations without writing code.
82
+ # Get a user
83
+ gitea-cli user get --username my-org
84
+ ```
85
+
86
+ ### 4. Use the Python API
87
+
88
+ ```python
89
+ from gitea.client.gitea import Gitea
90
+
91
+ with Gitea(token="YOUR_API_TOKEN", base_url="https://gitea.example.com") as client:
92
+ issues, _ = client.issue.list_issues(owner="my-org", repository="my-repo")
93
+ ```
94
+
95
+ For details, see the
96
+ [Quick Start](https://isaac-cf-wong.github.io/python-gitea/user-guide/quickstart/),
97
+ [Configuration](https://isaac-cf-wong.github.io/python-gitea/user-guide/configuration/),
98
+ and
99
+ [Python API](https://isaac-cf-wong.github.io/python-gitea/user-guide/python-api/)
100
+ guides in the documentation.
59
101
 
60
102
  ## Installation
61
103
 
@@ -125,14 +167,10 @@ cd python-gitea
125
167
  # Create a virtual environment (recommended with uv)
126
168
  uv venv --python 3.12
127
169
  source .venv/bin/activate # On Windows: .venv\Scripts\activate
128
- uv pip install ".[dev]"
129
-
130
- # Install the commitlint dependencies
131
- npm install
170
+ uv sync --group dev
132
171
 
133
172
  # Install pre-commit hooks
134
- pre-commit install
135
- pre-commit install --hook-type commit-msg
173
+ uv run prek install
136
174
  ```
137
175
 
138
176
  ### Verify Installation
@@ -147,9 +185,29 @@ gitea-cli --help
147
185
  python -c "import gitea; print(gitea.__version__)"
148
186
  ```
149
187
 
188
+ ## Documentation
189
+
190
+ Full documentation is available at
191
+ [https://isaac-cf-wong.github.io/python-gitea](https://isaac-cf-wong.github.io/python-gitea).
192
+
193
+ ## Contributing
194
+
195
+ Contributions are welcome! Please read the
196
+ [Contributing Guide](https://isaac-cf-wong.github.io/python-gitea/contributing/)
197
+ before opening a pull request.
198
+
199
+ ## Testing
200
+
201
+ Run the test suite:
202
+
203
+ ```bash
204
+ uv run pytest
205
+ ```
206
+
150
207
  ## License
151
208
 
152
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
209
+ This project is licensed under the MIT License - see the
210
+ [LICENSE](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE) file
153
211
  for details.
154
212
 
155
213
  ## Support
@@ -6,29 +6,71 @@
6
6
  [![codecov](https://codecov.io/gh/isaac-cf-wong/python-gitea/graph/badge.svg?token=COF8341N60)](https://codecov.io/gh/isaac-cf-wong/python-gitea)
7
7
  [![PyPI Version](https://img.shields.io/pypi/v/python-gitea)](https://pypi.org/project/python-gitea/)
8
8
  [![Python Versions](https://img.shields.io/pypi/pyversions/python-gitea)](https://pypi.org/project/python-gitea/)
9
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE)
10
10
  [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
11
11
  [![DOI](https://zenodo.org/badge/1129170965.svg)](https://doi.org/10.5281/zenodo.18211496)
12
12
 
13
- **Note:** This project is still in progress. The promised features are not fully
14
- ready yet, and APIs are subject to change.
15
-
16
- A Python package for interacting with the Gitea API. This package provides a
17
- simple and intuitive interface to access Gitea repositories, users,
18
- organizations, issues, and more, enabling seamless integration with Gitea
19
- instances for automation, data retrieval, and management tasks.
13
+ A Python package for interacting with the Gitea API. It provides a simple,
14
+ intuitive interface to access Gitea repositories, users, organizations, issues,
15
+ and more, enabling seamless integration with Gitea instances for automation,
16
+ data retrieval, and management tasks.
20
17
 
21
18
  ## Features
22
19
 
23
- Full API Coverage: Access to repositories, users, organizations, issues, pull
24
- requests, and more.
20
+ - **Full API Coverage**: Repositories, users, organizations, issues, pull
21
+ requests, comments, labels, milestones, notifications, and projects.
22
+ - **Easy Authentication**: Token-based authentication, with multiple saved
23
+ accounts and a default-account fallback.
24
+ - **Asynchronous Support**: Built with `async`/`await` for non-blocking
25
+ operations alongside the synchronous client.
26
+ - **Type Hints**: Full type annotations for better IDE support and code
27
+ reliability.
28
+ - **Command-Line Interface**: Interact with the Gitea API directly from the
29
+ terminal for quick, scriptable operations without writing code.
30
+ - **Comprehensive Documentation**: Detailed guides and a generated API
31
+ reference.
32
+
33
+ ## Quick Start
34
+
35
+ ### 1. Install
36
+
37
+ ```bash
38
+ uv venv --python 3.13
39
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
40
+ uv pip install python-gitea
41
+ ```
42
+
43
+ ### 2. Configure an account
44
+
45
+ ```bash
46
+ gitea-cli config add --name my_account --token YOUR_API_TOKEN --base-url https://gitea.example.com
47
+ ```
48
+
49
+ ### 3. Use the CLI
50
+
51
+ ```bash
52
+ # List issues of a repository
53
+ gitea-cli issue list --owner my-org --repository my-repo
25
54
 
26
- - Easy Authentication: Support for token-based authentication.
27
- - Asynchronous Support: Built with async/await for non-blocking operations.
28
- - Type Hints: Full type annotations for better IDE support and code reliability.
29
- - Comprehensive Documentation: Detailed guides and API reference.
30
- - Command-Line Interface: Interact with the Gitea API directly from the terminal
31
- for quick, scriptable operations without writing code.
55
+ # Get a user
56
+ gitea-cli user get --username my-org
57
+ ```
58
+
59
+ ### 4. Use the Python API
60
+
61
+ ```python
62
+ from gitea.client.gitea import Gitea
63
+
64
+ with Gitea(token="YOUR_API_TOKEN", base_url="https://gitea.example.com") as client:
65
+ issues, _ = client.issue.list_issues(owner="my-org", repository="my-repo")
66
+ ```
67
+
68
+ For details, see the
69
+ [Quick Start](https://isaac-cf-wong.github.io/python-gitea/user-guide/quickstart/),
70
+ [Configuration](https://isaac-cf-wong.github.io/python-gitea/user-guide/configuration/),
71
+ and
72
+ [Python API](https://isaac-cf-wong.github.io/python-gitea/user-guide/python-api/)
73
+ guides in the documentation.
32
74
 
33
75
  ## Installation
34
76
 
@@ -98,14 +140,10 @@ cd python-gitea
98
140
  # Create a virtual environment (recommended with uv)
99
141
  uv venv --python 3.12
100
142
  source .venv/bin/activate # On Windows: .venv\Scripts\activate
101
- uv pip install ".[dev]"
102
-
103
- # Install the commitlint dependencies
104
- npm install
143
+ uv sync --group dev
105
144
 
106
145
  # Install pre-commit hooks
107
- pre-commit install
108
- pre-commit install --hook-type commit-msg
146
+ uv run prek install
109
147
  ```
110
148
 
111
149
  ### Verify Installation
@@ -120,9 +158,29 @@ gitea-cli --help
120
158
  python -c "import gitea; print(gitea.__version__)"
121
159
  ```
122
160
 
161
+ ## Documentation
162
+
163
+ Full documentation is available at
164
+ [https://isaac-cf-wong.github.io/python-gitea](https://isaac-cf-wong.github.io/python-gitea).
165
+
166
+ ## Contributing
167
+
168
+ Contributions are welcome! Please read the
169
+ [Contributing Guide](https://isaac-cf-wong.github.io/python-gitea/contributing/)
170
+ before opening a pull request.
171
+
172
+ ## Testing
173
+
174
+ Run the test suite:
175
+
176
+ ```bash
177
+ uv run pytest
178
+ ```
179
+
123
180
  ## License
124
181
 
125
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
182
+ This project is licensed under the MIT License - see the
183
+ [LICENSE](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE) file
126
184
  for details.
127
185
 
128
186
  ## Support
@@ -0,0 +1 @@
1
+ --8<-- "CONTRIBUTING.md"
@@ -0,0 +1,145 @@
1
+ # Architecture
2
+
3
+ This document describes the high-level architecture and design of
4
+ `python-gitea`: how the package is laid out, how the client and CLI relate, and
5
+ the design principles behind them.
6
+
7
+ ## Overview
8
+
9
+ `python-gitea` is a thin, typed wrapper around the
10
+ [Gitea REST API](https://docs.gitea.com/api/1.0). It provides two user-facing
11
+ surfaces that share the same domain model:
12
+
13
+ - **Python client** - synchronous (`Gitea`) and asynchronous (`AsyncGitea`)
14
+ clients with one resource object per Gitea domain.
15
+ - **CLI** - `gitea-cli`, a Typer application with one command group per domain.
16
+
17
+ Both surfaces authenticate to Gitea with a personal access token and base URL.
18
+ The CLI resolves configured accounts through `cli/utils/auth.py`
19
+ ([Configuration](../user-guide/configuration.md)), while Python callers pass
20
+ their credentials directly to the `Gitea` or `AsyncGitea` constructor.
21
+
22
+ ## Package Layout
23
+
24
+ ```text
25
+ src/gitea/
26
+ ├── __init__.py # Top-level package (exports __version__)
27
+ ├── __main__.py # python -m gitea
28
+ ├── version.py # Version information
29
+ ├── client/ # Client classes
30
+ │ ├── base.py # Client base class (token, base_url, URL building)
31
+ │ ├── gitea.py # Synchronous Gitea client
32
+ │ └── async_gitea.py # Asynchronous AsyncGitea client (aiohttp)
33
+ ├── config/ # Configuration layer
34
+ │ ├── model.py # Pydantic models (AccountConfig, Config)
35
+ │ └── manager.py # ConfigManager (load/save/CRUD accounts)
36
+ ├── resource/ # Resource base class
37
+ │ └── resource.py # Shared request helpers for resources
38
+ ├── issue/ # Issue resource (sync + async)
39
+ ├── pull_request/ # Pull request resource (sync + async)
40
+ ├── repository/ # Repository resource (sync + async)
41
+ ├── user/ # User resource (sync + async)
42
+ ├── comment/ # Comment resource (sync + async)
43
+ ├── label/ # Label resource (sync + async)
44
+ ├── milestone/ # Milestone resource (sync + async)
45
+ ├── notification/ # Notification resource (sync + async)
46
+ ├── project/ # Project resource (sync + async)
47
+ ├── cli/ # Typer CLI application
48
+ │ ├── main.py # gitea-cli entry point, command registration
49
+ │ ├── config/ # config commands
50
+ │ ├── issue/ # issue + issue dependency commands
51
+ │ ├── pull_request/ # pull-request commands
52
+ │ ├── comment/ # comment commands
53
+ │ ├── label/ # label commands
54
+ │ ├── milestone/ # milestone commands
55
+ │ ├── notification/ # notification commands
56
+ │ ├── project/ # project, column, and project-issue commands
57
+ │ ├── user/ # user commands
58
+ │ └── utils/ # auth resolution, API helpers, conversions
59
+ └── utils/ # Logging, pagination, and response helpers
60
+ ├── log.py # Logger setup
61
+ ├── pagination.py # Paginated-listing walkers
62
+ └── response.py # Response processing helpers
63
+ ```
64
+
65
+ ## Client Layer
66
+
67
+ The client layer is the programmatic interface. Both clients inherit from
68
+ `Client`, which stores the token and base URL and builds API URLs.
69
+
70
+ - `gitea.client.gitea.Gitea` uses `requests` and must be used as a context
71
+ manager so its HTTP session is closed.
72
+ - `gitea.client.async_gitea.AsyncGitea` uses `aiohttp` and must be used as an
73
+ async context manager.
74
+
75
+ Each client exposes one attribute per resource:
76
+
77
+ ```python
78
+ with Gitea(token="...", base_url="...") as client:
79
+ client.issue # Issue
80
+ client.pull_request # PullRequest
81
+ client.repository # Repository
82
+ client.user # User
83
+ client.comment # Comment
84
+ client.label # Label
85
+ client.milestone # Milestone
86
+ client.notification # Notification
87
+ client.project # Project
88
+ ```
89
+
90
+ ## Resource Layer
91
+
92
+ Each resource module contains a synchronous class (e.g. `gitea.issue.Issue`) and
93
+ an asynchronous class (e.g. `gitea.issue.AsyncIssue`) with the same method
94
+ names. Methods map one-to-one onto Gitea REST endpoints and return either:
95
+
96
+ - a `(data, status)` tuple for list/get operations, where `data` is the decoded
97
+ JSON payload and `status` carries metadata such as the HTTP status code, or
98
+ - the raw HTTP response for mutating operations.
99
+
100
+ Work that spans several endpoints lives beside the resource rather than inside
101
+ it, so the resource methods stay one-to-one with the API. For example,
102
+ `gitea.issue.project_column` resolves the board column an issue's card sits in,
103
+ which Gitea only reveals through the project's column listings.
104
+
105
+ ## CLI Layer
106
+
107
+ The CLI is a single Typer application registered in `cli/main.py`. Each resource
108
+ has a command group (e.g. `gitea-cli issue`, `gitea-cli project`), and nested
109
+ groups exist where the domain nests (e.g. `project column`, `issue dependency`).
110
+
111
+ CLI commands reuse the client through thin helper functions in `cli/utils/`
112
+ (`auth.py` resolves authentication, `api.py` and `convert.py` handle requests
113
+ and option conversion), so the CLI and the Python API stay in sync with the same
114
+ endpoint definitions.
115
+
116
+ ## Configuration Layer
117
+
118
+ The `config/` module stores named accounts in a YAML file:
119
+
120
+ - `model.py` defines the Pydantic models `AccountConfig` and `Config`.
121
+ - `manager.py` provides `ConfigManager` for loading, saving, and CRUD on
122
+ accounts, including the default-account concept.
123
+
124
+ The CLI resolves authentication through `cli/utils/auth.py`, which implements
125
+ the precedence rules documented in
126
+ [Configuration](../user-guide/configuration.md). Python callers instead pass
127
+ credentials directly to the client constructor; they can use `ConfigManager` to
128
+ load stored accounts programmatically.
129
+
130
+ ## Design Principles
131
+
132
+ 1. **Thin wrappers, no business logic.** The package mirrors the Gitea API
133
+ surface instead of abstracting it, keeping behavior predictable.
134
+ 2. **Synchronous and asynchronous parity.** Sync and async classes expose the
135
+ same methods, so switching between them only changes the client and awaits.
136
+ 3. **One source of endpoint definitions.** CLI and client share the request
137
+ layer, avoiding drift between the two surfaces.
138
+ 4. **Type hints and validation everywhere.** Pydantic models for config, full
139
+ type annotations on all public methods, and validated option types on the
140
+ CLI.
141
+
142
+ ## See Also
143
+
144
+ - [Contributing](../contributing.md)
145
+ - [API Reference](../reference/index.md)