python-gitea 0.12.2__tar.gz → 0.13.1__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.
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/codeql.yml +3 -3
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/scheduled_release.yml +1 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/support_floor_update.yml +1 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.pre-commit-config.yaml +4 -4
- {python_gitea-0.12.2 → python_gitea-0.13.1}/PKG-INFO +1 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/user-guide/cli.md +46 -13
- {python_gitea-0.12.2 → python_gitea-0.13.1}/pyproject.toml +2 -2
- python_gitea-0.13.1/src/gitea/cli/issue/get.py +241 -0
- python_gitea-0.13.1/src/gitea/cli/issue/ids.py +85 -0
- python_gitea-0.13.1/src/gitea/cli/issue/list.py +247 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/column/issues.py +27 -3
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/column/list.py +11 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/issues.py +9 -1
- python_gitea-0.13.1/src/gitea/cli/utils/projection.py +61 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/issue/project_column.py +123 -19
- python_gitea-0.13.1/tests/cli/issue/test_cli_issue_columns.py +214 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_get.py +135 -6
- python_gitea-0.13.1/tests/cli/issue/test_cli_issue_multi_read.py +435 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/project/test_cli_project_column_issues.py +217 -4
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/test_cli_contract.py +11 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/test_cli_main.py +19 -3
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_project_column.py +98 -1
- {python_gitea-0.12.2 → python_gitea-0.13.1}/uv.lock +505 -424
- python_gitea-0.12.2/src/gitea/cli/issue/get.py +0 -98
- python_gitea-0.12.2/src/gitea/cli/issue/list.py +0 -153
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.coderabbit.yaml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/pull_request_template.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/ci.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/documentation.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/draft_release.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/publish.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/publish_testpypi.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/release.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.github/workflows/semantic_pull_request.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.gitignore +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.markdownlint.yaml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.prettierrc +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.pypirc +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/.typos.toml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/CITATION.cff +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/CODE_OF_CONDUCT.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/CONTRIBUTING.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/LICENSE +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/README.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/SECURITY.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/SUPPORT.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/cliff.toml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/contributing.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/dev/architecture.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/dev/troubleshooting.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/gen_ref_pages.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/index.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/javascripts/mathjax.js +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/security.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/style/api.css +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/user-guide/configuration.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/user-guide/installation.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/user-guide/python-api.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/docs/user-guide/quickstart.md +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/mkdocs.yml +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/renovate.json +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/scripts/release_version.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/__main__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/_lazy.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/actions.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/artifact.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_actions.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_artifact.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_run_management.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_runner.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_secret.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/async_variable.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/run_management.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/runner.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/scope.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/secret.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/actions/variable.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/artifact/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/artifact/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/artifact/download.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/artifact/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/artifact/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/job/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/job/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/job/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/job/logs.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/job/rerun.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/approve.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/cancel.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/force_cancel.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/jobs.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/run/rerun.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/registration_token.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/state.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/runner/update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/secret/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/secret/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/secret/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/secret/set.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/variable/update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/workflow/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/workflow/dispatch.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/workflow/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/actions/workflow/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/edit.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/comment/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/config/update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/close.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/dependency/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/dependency/add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/dependency/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/dependency/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/dependency/remove.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/edit.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/clear.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/common.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/remove.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/label/set.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/issue/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/label/update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/milestone/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/milestone/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/milestone/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/milestone/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/notification/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/notification/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/notification/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/notification/read.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/organization/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/organization/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/organization/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/output.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/column/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/column/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/edit.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/issue/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/issue/add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/issue/move.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/issue/remove.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/project/show.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/pull_request/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/pull_request/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/pull_request/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/repository/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/repository/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/repository/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/user/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/user/get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/user/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/user/update_settings.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/api.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/auth.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/convert.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/errors.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/utils/options.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/watch/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/watch/advance.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/watch/list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/watch/main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/cli/watch/scopes.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/client/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/client/async_gitea.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/client/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/client/gitea.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/comment/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/comment/async_comment.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/comment/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/comment/comment.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/config/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/config/manager.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/config/model.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/issue/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/issue/async_issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/issue/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/issue/issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/label/async_label.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/label/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/label/label.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/milestone/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/milestone/async_milestone.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/milestone/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/milestone/milestone.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/notification/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/notification/async_notification.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/notification/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/notification/notification.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/organization/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/organization/async_organization.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/organization/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/organization/organization.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/project/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/project/async_project.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/project/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/project/project.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/pull_request/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/pull_request/async_pull_request.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/pull_request/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/pull_request/pull_request.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/repository/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/repository/async_repository.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/repository/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/repository/repository.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/resource/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/resource/async_resource.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/resource/protocol.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/resource/resource.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/user/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/user/async_user.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/user/base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/user/user.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/utils/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/utils/fields.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/utils/log.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/utils/pagination.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/utils/response.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/version.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/watch/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/watch/changes.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/src/gitea/watch/state.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/actions/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/actions/test_actions_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/actions/test_actions_imports.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/actions/test_actions_requests.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/actions/test_actions_scope.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/board.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/invoking.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_artifact.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_job_get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_job_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_job_logs.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_run_get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_run_jobs.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_run_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_run_management.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_runner.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_secret.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_variable.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_workflow_dispatch.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_workflow_get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/actions/test_cli_actions_workflow_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/test_cli_comment_add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/test_cli_comment_delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/test_cli_comment_edit.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/test_cli_comment_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/comment/test_cli_comment_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/test_cli_config_add.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/test_cli_config_delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/test_cli_config_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/test_cli_config_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/config/test_cli_config_update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/envelope.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/dependency/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/dependency/test_cli_issue_dependency.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/label/test_cli_issue_label.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_close.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_comment.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_edit.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/issue/test_cli_issue_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/test_cli_label_create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/test_cli_label_delete.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/test_cli_label_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/test_cli_label_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/label/test_cli_label_update.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/milestone/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/milestone/test_cli_milestone_create.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/milestone/test_cli_milestone_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/milestone/test_cli_milestone_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/notification/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/notification/test_cli_notification.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/organization/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/organization/test_cli_organization_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/organization/test_cli_organization_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/project/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/project/test_cli_project.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/project/test_cli_project_show.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/pull_request/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/pull_request/test_cli_pull_request_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/pull_request/test_cli_pull_request_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/rendering.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/repository/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/repository/test_cli_repository_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/repository/test_cli_repository_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/test_cli_output.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/tree.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/user/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/user/test_cli_user_get.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/user/test_cli_user_update_settings.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_api.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_auth.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_convert.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_errors.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/utils/test_cli_utils_options.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/watch/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/watch/support.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/watch/test_cli_watch_advance.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/watch/test_cli_watch_list.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/cli/watch/test_cli_watch_scopes.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/client/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/client/test_client_async_gitea.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/client/test_client_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/client/test_client_gitea.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/comment/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/comment/test_comment_async_comment.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/comment/test_comment_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/comment/test_comment_comment.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/config/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/config/test_config_manager.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/config/test_config_model.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/conftest.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_async_issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_async_project_column.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_dependencies.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_issue.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/issue/test_issue_labels.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/label/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/label/test_label_async_label.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/label/test_label_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/label/test_label_label.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/milestone/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/milestone/test_milestone_async_milestone.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/milestone/test_milestone_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/milestone/test_milestone_milestone.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/notification/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/notification/test_notification_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/notification/test_notification_notification.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/organization/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/organization/test_organization_async_organization.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/organization/test_organization_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/organization/test_organization_organization.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/project/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/project/test_project_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/project/test_project_project.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/project/test_project_requests.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/pull_request/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/pull_request/test_pull_request_async_pull_request.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/pull_request/test_pull_request_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/pull_request/test_pull_request_pull_request.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/repository/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/repository/test_repository_async_repository.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/repository/test_repository_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/repository/test_repository_repository.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/resource/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/resource/test_resource_async_resource.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/resource/test_resource_resource.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/smoke_test.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/test_import.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/test_lazy_reexports.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/test_main.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/test_release_version.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/test_version.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/transport.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/user/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/user/test_user_async_user.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/user/test_user_base.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/user/test_user_user.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/utils/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/utils/test_utils_fields.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/utils/test_utils_log.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/utils/test_utils_pagination.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/utils/test_utils_response.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/watch/__init__.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/watch/test_watch_changes.py +0 -0
- {python_gitea-0.12.2 → python_gitea-0.13.1}/tests/watch/test_watch_state.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@
|
|
25
|
+
uses: github/codeql-action/init@24c54180a607b1449ed407dd24f251e4e9147c8d # 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@
|
|
31
|
+
uses: github/codeql-action/autobuild@24c54180a607b1449ed407dd24f251e4e9147c8d # v4
|
|
32
32
|
|
|
33
33
|
- name: Perform CodeQL Analysis
|
|
34
|
-
uses: github/codeql-action/analyze@
|
|
34
|
+
uses: github/codeql-action/analyze@24c54180a607b1449ed407dd24f251e4e9147c8d # v4
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
|
|
32
32
|
- name: Check for new commits
|
|
33
33
|
id: check_commits
|
|
34
|
-
uses: isaac-cf-wong/detect-git-changes-action@
|
|
34
|
+
uses: isaac-cf-wong/detect-git-changes-action@9863c3c0ba155ed10b54072f711ae8807aedbc87 # v0.0.22
|
|
35
35
|
with:
|
|
36
36
|
use-latest-tag: true
|
|
37
37
|
|
|
@@ -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@
|
|
25
|
+
uses: isaac-cf-wong/dependency-support-policy-action@f83b1c576c82b2a7dde5d3c38c222d68b76bb9cf # v0.2.12
|
|
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.
|
|
19
|
+
rev: v0.17.0
|
|
20
20
|
hooks:
|
|
21
21
|
- id: ruff
|
|
22
22
|
args: [--fix, --config=pyproject.toml]
|
|
@@ -28,13 +28,13 @@ repos:
|
|
|
28
28
|
- id: taplo-format
|
|
29
29
|
|
|
30
30
|
- repo: https://github.com/crate-ci/typos
|
|
31
|
-
rev: v1.
|
|
31
|
+
rev: v1.51.1
|
|
32
32
|
hooks:
|
|
33
33
|
- id: typos
|
|
34
34
|
args: []
|
|
35
35
|
|
|
36
36
|
- repo: https://github.com/rbubley/mirrors-prettier
|
|
37
|
-
rev: v3.9.
|
|
37
|
+
rev: v3.9.10
|
|
38
38
|
hooks:
|
|
39
39
|
- id: prettier
|
|
40
40
|
|
|
@@ -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.
|
|
55
|
+
rev: 0.13.0
|
|
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.
|
|
3
|
+
Version: 0.13.1
|
|
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
|
|
@@ -74,10 +74,10 @@ non-zero, so nothing is printed on stdout for a failed command. Log output also
|
|
|
74
74
|
goes to stderr in both formats, so stdout stays parsable.
|
|
75
75
|
|
|
76
76
|
One failure is deliberately not an error: the board lookup that fills in the
|
|
77
|
-
`column_id` of `issue get
|
|
78
|
-
a warning to stderr and reports that
|
|
79
|
-
issue the command was asked for has
|
|
80
|
-
failing over an enrichment of it.
|
|
77
|
+
`column_id` of `issue get`, unless `--no-columns` turns it off. A refused,
|
|
78
|
+
timed-out or otherwise failed lookup logs a warning to stderr and reports that
|
|
79
|
+
project's column as `null`, because the issue the command was asked for has
|
|
80
|
+
already been retrieved and is not worth failing over an enrichment of it.
|
|
81
81
|
|
|
82
82
|
Tokens are never included in the output of `config` commands in either format.
|
|
83
83
|
|
|
@@ -91,9 +91,9 @@ which command fetched it.
|
|
|
91
91
|
|
|
92
92
|
A field the API cannot send is added only where it carries something the API has
|
|
93
93
|
no way of saying, and is documented with the command that adds it: `column_id`
|
|
94
|
-
on the project entries of `issue get
|
|
95
|
-
columns of `project show`, are the ones
|
|
96
|
-
name for a field already in the payload.
|
|
94
|
+
on the project entries of `issue get` (omitted under `--no-columns`), and
|
|
95
|
+
`issue_count` and `issue_ids` on the columns of `project show`, are the ones
|
|
96
|
+
today. Such a field is never a second name for a field already in the payload.
|
|
97
97
|
|
|
98
98
|
Two consequences worth knowing:
|
|
99
99
|
|
|
@@ -442,17 +442,31 @@ otherwise look like.
|
|
|
442
442
|
`--due-date`, `--closed`
|
|
443
443
|
- `gitea-cli issue list --owner <owner> --repository <repo>`
|
|
444
444
|
- Optional: `--state`, `--labels`, `--search-string`, `--created-by`,
|
|
445
|
-
`--assigned-by`, `--since`, `--before`, `--page`, `--limit`
|
|
445
|
+
`--assigned-by`, `--since`, `--before`, `--page`, `--limit`, `--issue-ids`
|
|
446
|
+
- `--issue-ids 12,7,40` lists only those issues, in that order. Gitea's
|
|
447
|
+
listing has no such filter, so its pages are walked until every one of
|
|
448
|
+
them has been seen; the other filters still apply, so
|
|
449
|
+
`--state open --issue-ids ...` answers "which of these are open" in one
|
|
450
|
+
call. `metadata.not_listed` names each requested issue the listing did not
|
|
451
|
+
hold - one the filters exclude, or one that does not exist. `--page`
|
|
452
|
+
cannot be combined with it; `--limit` still sets the page size.
|
|
446
453
|
- `gitea-cli issue get --owner <owner> --repository <repo> --issue-id <number>`
|
|
454
|
+
- `--issue-id` can be repeated, and `--issue-id-file <path>` reads more
|
|
455
|
+
numbers - separated by commas, whitespace or newlines - from a file, or
|
|
456
|
+
from stdin when the path is `-`. With one `--issue-id` and no file, `data`
|
|
457
|
+
is the issue, as it always was; otherwise it is a list of the issues in
|
|
458
|
+
the order requested, each once. An issue that does not exist fails the
|
|
459
|
+
run, which prints nothing on stdout and names every missing issue.
|
|
447
460
|
- The `comments` field is the number of comments on the issue, not the
|
|
448
461
|
comments themselves; use `gitea-cli issue comment list` to read the
|
|
449
462
|
bodies. The field keeps the API's name, as
|
|
450
463
|
[the field-name convention](#field-names) requires: this command used to
|
|
451
464
|
rename it to `comment_count` and was alone in doing so.
|
|
452
|
-
-
|
|
453
|
-
card sits in, or `null` when the issue
|
|
454
|
-
does not report it on the issue itself,
|
|
455
|
-
project's board, which costs a few extra
|
|
465
|
+
- Unless `--no-columns` is passed, each entry of `projects` carries a
|
|
466
|
+
`column_id`: the column the issue's card sits in, or `null` when the issue
|
|
467
|
+
has no card on that project. Gitea does not report it on the issue itself,
|
|
468
|
+
so it is resolved from each project's board, which costs a few extra
|
|
469
|
+
requests per project.
|
|
456
470
|
- Resolution is best-effort. It reflects the board as it was during the
|
|
457
471
|
walk, not at one instant: a card moved while the columns are being read
|
|
458
472
|
may be reported under either column or as `null`. A lookup that is
|
|
@@ -461,6 +475,13 @@ otherwise look like.
|
|
|
461
475
|
so `null` means "no card here" and "could not tell" alike. The columns of
|
|
462
476
|
a user-owned (individual) project cannot be listed at all, so its
|
|
463
477
|
`column_id` is always `null`.
|
|
478
|
+
- `--no-columns` turns that resolution off. Every project entry is then
|
|
479
|
+
emitted as the API sent it, without a `column_id`, and no board is read:
|
|
480
|
+
the run costs one request per issue however many projects the issues are
|
|
481
|
+
on. `--columns`, the default, resolves the columns. Reach for
|
|
482
|
+
`--no-columns` when the issue's own fields are what is wanted - `state`,
|
|
483
|
+
`labels`, `title` - since it is the board walk that a read of a set of
|
|
484
|
+
issues pays most for.
|
|
464
485
|
- `gitea-cli issue edit --owner <owner> --repository <repo> --issue-id <number>`
|
|
465
486
|
- Optional: `--title`, `--body`, `--state`, `--assignees`, `--milestone`,
|
|
466
487
|
`--due-date`
|
|
@@ -579,9 +600,15 @@ gitea-cli project list --owner my-org --repository my-repo # that repository's
|
|
|
579
600
|
- `gitea-cli project column create --owner <owner> [--repository <repo>] --project-id <id> --title <title>`
|
|
580
601
|
- Optional: `--color`
|
|
581
602
|
- `gitea-cli project column list --owner <owner> [--repository <repo>] --project-id <id>`
|
|
603
|
+
- Optional: `--fields`
|
|
582
604
|
- `gitea-cli project column issues --owner <owner> [--repository <repo>] --project-id <id> --column-id <id>`
|
|
583
|
-
- Optional: `--page`, `--limit`
|
|
605
|
+
- Optional: `--page`, `--limit`, `--fields`
|
|
606
|
+
- `data` is `{"column": {"id": ..., "title": ...}, "issues": [...]}`: the
|
|
607
|
+
column is echoed by the ID and title the API reports for `--column-id`, so
|
|
608
|
+
a read of another column of the same project says which column it read.
|
|
609
|
+
Earlier releases emitted the list of issues alone as `data`.
|
|
584
610
|
- `gitea-cli project issues --owner <owner> [--repository <repo>] --project-id <id>`
|
|
611
|
+
- Optional: `--fields`
|
|
585
612
|
- `gitea-cli project issue add --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
|
|
586
613
|
- Optional: `--issue-repository`
|
|
587
614
|
- `gitea-cli project issue move --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
|
|
@@ -596,6 +623,12 @@ gitea-cli project list --owner my-org --repository my-repo # that repository's
|
|
|
596
623
|
card is in, and is found on the board when it is omitted; an issue with no
|
|
597
624
|
card there is reported as having none.
|
|
598
625
|
|
|
626
|
+
`--fields id,number,title,state` cuts every record of the listing - each column
|
|
627
|
+
for `column list`, each issue for `column issues` and `project issues` - down to
|
|
628
|
+
the named fields, in that order. The echoed column is never cut. A field a
|
|
629
|
+
record does not carry is emitted as `null`, so a misspelled field shows up as
|
|
630
|
+
nulls rather than disappearing.
|
|
631
|
+
|
|
599
632
|
The project endpoints identify an issue by its global ID, which is not the
|
|
600
633
|
number shown in the web UI: `my-org/my-repo#15` may well be global ID `1854`.
|
|
601
634
|
The three `project issue` commands therefore take `--issue-id` as the number
|
|
@@ -29,13 +29,13 @@ dependencies = [
|
|
|
29
29
|
|
|
30
30
|
[dependency-groups]
|
|
31
31
|
dev = [
|
|
32
|
-
"ruff>=0.
|
|
32
|
+
"ruff>=0.17.0",
|
|
33
33
|
# The mutation runner, in the environment `uv run` resolves, so that
|
|
34
34
|
# `uv run mutmut run` reaches the same interpreter as `uv run pytest` and finds
|
|
35
35
|
# the pytest plugins the suite's own options need. Run from a tool environment
|
|
36
36
|
# of its own it cannot read `--cov`, and the run dies at collection.
|
|
37
37
|
"mutmut>=3.8.0",
|
|
38
|
-
"prek>=0.5.
|
|
38
|
+
"prek>=0.5.5",
|
|
39
39
|
"pytest-github-actions-annotate-failures>=0.4.2",
|
|
40
40
|
"pytest-cov>=7.1.0",
|
|
41
41
|
"pytest-mock>=3.16.0",
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"""Get issues command.
|
|
2
|
+
|
|
3
|
+
The issue is emitted with the field names the API sends, as `gitea.utils.fields`
|
|
4
|
+
requires. `comments` is one worth knowing about: it is the *number* of comments
|
|
5
|
+
on the issue and not their bodies, which `gitea-cli issue comment list` is for.
|
|
6
|
+
An earlier version of this command renamed it to `comment_count` to say so, and
|
|
7
|
+
was the only command emitting an issue that did - the same count arrived under
|
|
8
|
+
two names depending on which command fetched the issue, which was the worse
|
|
9
|
+
surprise of the two.
|
|
10
|
+
|
|
11
|
+
Several issues can be read in one run: `--issue-id` may be repeated, and
|
|
12
|
+
`--issue-id-file` reads a list of numbers from a file or from stdin, so a set of
|
|
13
|
+
hundreds need not fit on a command line. The shape of `data` follows from how
|
|
14
|
+
the command was invoked, never from what the API answered: one `--issue-id` and
|
|
15
|
+
no file gives the issue itself, as it always has; anything else gives a list of
|
|
16
|
+
issues in the order they were asked for, each once. An issue that does not exist
|
|
17
|
+
fails the run, after every requested issue has been tried, with an error naming
|
|
18
|
+
each missing one, so a single typo in a long list is not reported one run at a
|
|
19
|
+
time.
|
|
20
|
+
|
|
21
|
+
Every project an issue is on is emitted with the column its card sits in there,
|
|
22
|
+
resolved from that project's board: the issue payload names the projects without
|
|
23
|
+
saying where on them the card sits, so the column costs a walk of the board's
|
|
24
|
+
columns and their issue listings, a few requests per project. `--no-columns`
|
|
25
|
+
turns that walk off. Every project entry is then emitted as the API sent it,
|
|
26
|
+
without a `column_id`, and the run reads no board at all - one request per issue,
|
|
27
|
+
whatever boards the issues are on. It is the form to use when the issue's own
|
|
28
|
+
fields are what is wanted - `state`, `labels`, `title` - since it is the board
|
|
29
|
+
walk that a read of a set of issues pays most for.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
from collections.abc import Callable
|
|
35
|
+
from typing import Annotated, Any
|
|
36
|
+
|
|
37
|
+
import typer
|
|
38
|
+
|
|
39
|
+
from gitea.cli.issue.ids import ISSUE_ID_FILE_HELP
|
|
40
|
+
from gitea.cli.utils.options import DEPRECATED_INDEX_HELP, REPOSITORY_REQUIRED_HELP
|
|
41
|
+
|
|
42
|
+
_NOT_FOUND = 404
|
|
43
|
+
|
|
44
|
+
ISSUE_IDS_HELP = "Issue number shown in the web UI. Repeat the option to read several issues."
|
|
45
|
+
ISSUE_COLUMNS_HELP = (
|
|
46
|
+
"Resolve the project column of each issue's card. Pass --no-columns to leave every project entry "
|
|
47
|
+
"as the API sent it and read no board, which is what a read of the issue's own fields wants."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_command(
|
|
52
|
+
ctx: typer.Context,
|
|
53
|
+
owner: Annotated[str, typer.Option("--owner", help="Owner of the repository.")],
|
|
54
|
+
repository: Annotated[str | None, typer.Option("--repository", help=REPOSITORY_REQUIRED_HELP)] = None,
|
|
55
|
+
issue_ids: Annotated[list[int] | None, typer.Option("--issue-id", help=ISSUE_IDS_HELP)] = None,
|
|
56
|
+
issue_id_file: Annotated[str | None, typer.Option("--issue-id-file", help=ISSUE_ID_FILE_HELP)] = None,
|
|
57
|
+
resolve_columns: Annotated[bool, typer.Option("--columns/--no-columns", help=ISSUE_COLUMNS_HELP)] = True,
|
|
58
|
+
index: Annotated[int | None, typer.Option("--index", help=DEPRECATED_INDEX_HELP, hidden=True)] = None,
|
|
59
|
+
account_name: Annotated[
|
|
60
|
+
str | None,
|
|
61
|
+
typer.Option(
|
|
62
|
+
"--account-name",
|
|
63
|
+
help="Name of the account to use for authentication.",
|
|
64
|
+
),
|
|
65
|
+
] = None,
|
|
66
|
+
token: Annotated[
|
|
67
|
+
str | None,
|
|
68
|
+
typer.Option(
|
|
69
|
+
"--token",
|
|
70
|
+
help="Token for authentication. If not provided, the token from the specified account will be used.",
|
|
71
|
+
),
|
|
72
|
+
] = None,
|
|
73
|
+
base_url: Annotated[
|
|
74
|
+
str | None,
|
|
75
|
+
typer.Option(
|
|
76
|
+
"--base-url",
|
|
77
|
+
help="Base URL of the Gitea platform. If not provided, the base URL from the specified account will be used.",
|
|
78
|
+
),
|
|
79
|
+
] = None,
|
|
80
|
+
) -> None:
|
|
81
|
+
"""Get one or more issues in a repository.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
ctx: The Typer context.
|
|
85
|
+
owner: The owner of the repository.
|
|
86
|
+
repository: The name of the repository, which this command requires.
|
|
87
|
+
issue_ids: The issue numbers shown in the web UI.
|
|
88
|
+
issue_id_file: A file listing more issue numbers, or `-` to read them from stdin.
|
|
89
|
+
resolve_columns: Whether to resolve the column each issue's card sits in.
|
|
90
|
+
index: The deprecated name of `--issue-id`, which names one issue.
|
|
91
|
+
account_name: Name of the account to use for authentication.
|
|
92
|
+
token: Token for authentication. If not provided, the token from the specified account will be used.
|
|
93
|
+
base_url: Base URL of the Gitea platform. If not provided, the base URL from the specified account will be used.
|
|
94
|
+
|
|
95
|
+
"""
|
|
96
|
+
from gitea.cli.utils.api import execute_api_command # noqa: PLC0415
|
|
97
|
+
from gitea.cli.utils.auth import get_auth_params # noqa: PLC0415
|
|
98
|
+
from gitea.cli.utils.options import require_repository # noqa: PLC0415
|
|
99
|
+
from gitea.client.gitea import Gitea # noqa: PLC0415
|
|
100
|
+
from gitea.issue.project_column import ColumnListings, resolve_project_column_ids # noqa: PLC0415
|
|
101
|
+
|
|
102
|
+
command = "gitea-cli issue get"
|
|
103
|
+
token, base_url = get_auth_params(
|
|
104
|
+
config_path=ctx.obj.get("config_path"),
|
|
105
|
+
account_name=account_name,
|
|
106
|
+
token=token,
|
|
107
|
+
base_url=base_url,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def api_call() -> tuple[dict[str, Any] | list[dict[str, Any]], dict[str, Any]]:
|
|
111
|
+
"""Get the issues' information.
|
|
112
|
+
|
|
113
|
+
The column of each project an issue is on is resolved from the project's
|
|
114
|
+
board, because the issue payload names the projects without saying where
|
|
115
|
+
on them the issue's card sits. The issues of one run share the listings
|
|
116
|
+
of their boards' columns, so a board is listed once however many of the
|
|
117
|
+
issues are on it. `--no-columns` asks for no such resolution: the issues
|
|
118
|
+
are emitted as the API sent them and no board is read, which is what a
|
|
119
|
+
read of the issues' own fields wants.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
A tuple containing the issue data, or a list of it, and metadata.
|
|
123
|
+
|
|
124
|
+
"""
|
|
125
|
+
target_repository = require_repository(repository, command=command)
|
|
126
|
+
targets, single = _requested_issues(issue_ids, issue_id_file, index, command=command)
|
|
127
|
+
|
|
128
|
+
with Gitea(token=token, base_url=base_url) as client:
|
|
129
|
+
columns = ColumnListings()
|
|
130
|
+
|
|
131
|
+
def get_one(number: int) -> tuple[dict[str, Any], dict[str, Any]]:
|
|
132
|
+
data, metadata = client.issue.get_issue(owner=owner, repository=target_repository, index=number)
|
|
133
|
+
if not resolve_columns:
|
|
134
|
+
return data, metadata
|
|
135
|
+
data = resolve_project_column_ids(
|
|
136
|
+
client=client, owner=owner, repository=target_repository, issue=data, columns=columns
|
|
137
|
+
)
|
|
138
|
+
return data, metadata
|
|
139
|
+
|
|
140
|
+
if single:
|
|
141
|
+
return get_one(targets[0])
|
|
142
|
+
return _get_each(targets, get_one, owner=owner, repository=target_repository, command=command)
|
|
143
|
+
|
|
144
|
+
execute_api_command(api_call=api_call, base_url=base_url, command_name=command)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _requested_issues(
|
|
148
|
+
issue_ids: list[int] | None, issue_id_file: str | None, index: int | None, *, command: str
|
|
149
|
+
) -> tuple[list[int], bool]:
|
|
150
|
+
"""Read which issues the command reads, and whether it was asked for exactly one.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
issue_ids: The values passed as --issue-id, or None when it was omitted.
|
|
154
|
+
issue_id_file: The value passed as --issue-id-file, or None when it was omitted.
|
|
155
|
+
index: The value passed as the deprecated --index, or None when it was omitted.
|
|
156
|
+
command: The command being run, named as the user invoked it.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
The issue numbers, in the order given with those of the file last, each
|
|
160
|
+
once; and True when one --issue-id (or --index) and no file named them,
|
|
161
|
+
which is the invocation that reports the issue itself rather than a list.
|
|
162
|
+
|
|
163
|
+
Raises:
|
|
164
|
+
CommandError: If no issue was given, or --index was combined with
|
|
165
|
+
several issues.
|
|
166
|
+
|
|
167
|
+
"""
|
|
168
|
+
from gitea.cli.issue.ids import read_issue_id_file # noqa: PLC0415
|
|
169
|
+
from gitea.cli.utils.errors import CommandError # noqa: PLC0415
|
|
170
|
+
from gitea.cli.utils.options import resolve_issue_id # noqa: PLC0415
|
|
171
|
+
|
|
172
|
+
given = list(issue_ids or [])
|
|
173
|
+
if index is not None:
|
|
174
|
+
if len(given) > 1 or issue_id_file is not None:
|
|
175
|
+
raise CommandError(
|
|
176
|
+
f"'{command}': --index names one issue and cannot be combined with several. "
|
|
177
|
+
f"It is the deprecated name of --issue-id: pass --issue-id once per issue instead."
|
|
178
|
+
)
|
|
179
|
+
given = [resolve_issue_id(issue_id=given[0] if given else None, index=index, command=command)]
|
|
180
|
+
|
|
181
|
+
if issue_id_file is None:
|
|
182
|
+
if not given:
|
|
183
|
+
raise CommandError(
|
|
184
|
+
f"'{command}' needs an issue: pass --issue-id NUMBER, once per issue, or --issue-id-file PATH."
|
|
185
|
+
)
|
|
186
|
+
return list(dict.fromkeys(given)), len(given) == 1
|
|
187
|
+
|
|
188
|
+
given += read_issue_id_file(issue_id_file, command=command)
|
|
189
|
+
return list(dict.fromkeys(given)), False
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def _get_each(
|
|
193
|
+
numbers: list[int],
|
|
194
|
+
get_one: Callable[[int], tuple[dict[str, Any], dict[str, Any]]],
|
|
195
|
+
*,
|
|
196
|
+
owner: str,
|
|
197
|
+
repository: str,
|
|
198
|
+
command: str,
|
|
199
|
+
) -> tuple[list[dict[str, Any]], dict[str, Any]]:
|
|
200
|
+
"""Read each issue in turn, and report every one that does not exist together.
|
|
201
|
+
|
|
202
|
+
Args:
|
|
203
|
+
numbers: The issues to read.
|
|
204
|
+
get_one: Callable reading one issue and returning its data and metadata.
|
|
205
|
+
owner: The owner of the repository.
|
|
206
|
+
repository: The name of the repository.
|
|
207
|
+
command: The command being run, named as the user invoked it.
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
A tuple containing the issues, in the order asked for, and the metadata
|
|
211
|
+
of the last response.
|
|
212
|
+
|
|
213
|
+
Raises:
|
|
214
|
+
CommandError: If any of the issues does not exist. Any other failure is
|
|
215
|
+
raised as it was, on the issue that met it.
|
|
216
|
+
|
|
217
|
+
"""
|
|
218
|
+
from requests import HTTPError # noqa: PLC0415
|
|
219
|
+
|
|
220
|
+
from gitea.cli.utils.errors import CommandError # noqa: PLC0415
|
|
221
|
+
|
|
222
|
+
issues: list[dict[str, Any]] = []
|
|
223
|
+
missing: list[int] = []
|
|
224
|
+
metadata: dict[str, Any] = {}
|
|
225
|
+
for number in numbers:
|
|
226
|
+
try:
|
|
227
|
+
data, metadata = get_one(number)
|
|
228
|
+
except HTTPError as e:
|
|
229
|
+
response = getattr(e, "response", None)
|
|
230
|
+
if response is None or response.status_code != _NOT_FOUND:
|
|
231
|
+
raise
|
|
232
|
+
missing.append(number)
|
|
233
|
+
continue
|
|
234
|
+
issues.append(data)
|
|
235
|
+
|
|
236
|
+
if missing:
|
|
237
|
+
raise CommandError(
|
|
238
|
+
f"'{command}': no issue {', '.join(str(number) for number in missing)} in {owner}/{repository}; "
|
|
239
|
+
f"the other {len(issues)} of the {len(numbers)} requested exist. Nothing was printed."
|
|
240
|
+
)
|
|
241
|
+
return issues, {"status_code": metadata["status_code"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Reading a set of issue numbers given as text: a comma list, a file, or stdin.
|
|
2
|
+
|
|
3
|
+
`issue get` reads several issues at once and `issue list` can be narrowed to a
|
|
4
|
+
known set, so both need the numbers as a set rather than one option value per
|
|
5
|
+
issue. The numbers are separated by commas, whitespace or newlines, in any mix,
|
|
6
|
+
so a list written by hand, one printed by `jq -r '.[]'`, and one pasted from a
|
|
7
|
+
comma-separated cell all read the same. A value that is not a positive whole
|
|
8
|
+
number is an error naming it, rather than a number quietly dropped.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import re
|
|
14
|
+
import sys
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
from gitea.cli.utils.errors import CommandError
|
|
18
|
+
|
|
19
|
+
# The value of `--issue-id-file` that asks for the numbers to be read from stdin.
|
|
20
|
+
FROM_STDIN = "-"
|
|
21
|
+
|
|
22
|
+
ISSUE_ID_FILE_HELP = (
|
|
23
|
+
"File listing issue numbers, separated by commas, whitespace or newlines. Pass '-' to read them from stdin."
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
_SEPARATORS = re.compile(r"[\s,]+")
|
|
27
|
+
_ISSUE_NUMBER = re.compile(r"[0-9]+")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def parse_issue_numbers(text: str, *, source: str, command: str) -> list[int]:
|
|
31
|
+
"""Read the issue numbers in a piece of text.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
text: The numbers, separated by commas, whitespace or newlines.
|
|
35
|
+
source: Where the text came from, for the error, e.g. "--issue-ids".
|
|
36
|
+
command: The command being run, named as the user invoked it.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
The numbers, in the order given, repeats included.
|
|
40
|
+
|
|
41
|
+
Raises:
|
|
42
|
+
CommandError: If a value is not a positive whole number.
|
|
43
|
+
|
|
44
|
+
"""
|
|
45
|
+
tokens = [token for token in _SEPARATORS.split(text) if token]
|
|
46
|
+
invalid = [token for token in tokens if not _ISSUE_NUMBER.fullmatch(token) or int(token) == 0]
|
|
47
|
+
if invalid:
|
|
48
|
+
raise CommandError(
|
|
49
|
+
f"'{command}': {source} holds {', '.join(repr(token) for token in invalid)}, "
|
|
50
|
+
f"which {'is not an issue number' if len(invalid) == 1 else 'are not issue numbers'}. "
|
|
51
|
+
f"Issue numbers are the positive whole numbers shown in the web UI."
|
|
52
|
+
)
|
|
53
|
+
return [int(token) for token in tokens]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def read_issue_id_file(path: str, *, command: str) -> list[int]:
|
|
57
|
+
"""Read the issue numbers listed in a file, or on stdin.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
path: The value passed as --issue-id-file, or `-` to read stdin.
|
|
61
|
+
command: The command being run, named as the user invoked it.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
The numbers, in the order listed, repeats included.
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
CommandError: If the file cannot be read, lists no number, or lists a
|
|
68
|
+
value that is not one. A file listing nothing is an error rather than
|
|
69
|
+
an empty result, since that is what a pipeline that failed upstream
|
|
70
|
+
looks like.
|
|
71
|
+
|
|
72
|
+
"""
|
|
73
|
+
source = "stdin" if path == FROM_STDIN else path
|
|
74
|
+
if path == FROM_STDIN:
|
|
75
|
+
text = sys.stdin.read()
|
|
76
|
+
else:
|
|
77
|
+
try:
|
|
78
|
+
text = Path(path).read_text(encoding="utf-8")
|
|
79
|
+
except OSError as e:
|
|
80
|
+
raise CommandError(f"'{command}' could not read --issue-id-file {path}: {e.strerror or e}.") from e
|
|
81
|
+
|
|
82
|
+
numbers = parse_issue_numbers(text, source=f"--issue-id-file {source}", command=command)
|
|
83
|
+
if not numbers:
|
|
84
|
+
raise CommandError(f"'{command}': --issue-id-file {source} lists no issue number.")
|
|
85
|
+
return numbers
|