From b2d8f70222be3eada0d1b388f893e343f1382016 Mon Sep 17 00:00:00 2001 From: Surya Prashanth Date: Sun, 1 Jun 2025 13:05:23 +0530 Subject: [PATCH] feat: add sdk generated using openapi-generator-cli --- .github/workflows/python.yml | 38 + .gitignore | 104 +- .gitlab-ci.yml | 31 + .openapi-generator-ignore | 23 + .openapi-generator/FILES | 187 + .openapi-generator/VERSION | 1 + .swagger-codegen/VERSION | 1 + .travis.yml | 17 + README.md | 398 +- docs/AddCycleIssuesRequest.md | 28 + docs/AssetsApi.md | 1498 +++ docs/CreateCycleRequest.md | 31 + docs/CreateIntakeIssueRequest.md | 28 + docs/CreateIntakeIssueRequestIssue.md | 28 + docs/CreateIntakeIssueRequestIssueIssue.md | 30 + docs/CreateIssueCommentRequest.md | 28 + docs/CreateIssueLinkRequest.md | 30 + docs/CreateLabelRequest.md | 30 + docs/CreateModuleRequest.md | 34 + docs/CreateProjectRequest.md | 37 + docs/CreateStateRequest.md | 32 + docs/Cycle.md | 58 + docs/CycleIssue.md | 38 + docs/CycleLite.md | 49 + docs/CyclesApi.md | 1109 ++ docs/GeneralApi.md | 178 + docs/GenericAssetUpload.md | 34 + docs/GetIssueAttachment2Request.md | 32 + docs/GetWorkspaceMembers200ResponseInner.md | 35 + docs/IntakeApi.md | 435 + docs/IntakeIssue.md | 47 + docs/Issue.md | 56 + docs/IssueActivity.md | 45 + docs/IssueAttachment.md | 51 + docs/IssueComment.md | 44 + docs/IssueExpand.md | 59 + docs/IssueLink.md | 39 + docs/Label.md | 42 + docs/LabelLite.md | 30 + docs/LabelsApi.md | 463 + docs/MembersApi.md | 174 + docs/Module.md | 56 + docs/ModuleIssue.md | 38 + docs/ModuleLite.md | 50 + docs/ModulesApi.md | 941 ++ docs/PatchedAssetUpdate.md | 29 + docs/PatchedGenericAssetUpdate.md | 29 + docs/PatchedIssue.md | 56 + docs/PatchedProject.md | 69 + docs/Project.md | 69 + docs/ProjectsApi.md | 595 + docs/SearchIssues200Response.md | 28 + docs/SearchIssues200ResponseIssuesInner.md | 33 + docs/State.md | 45 + docs/StateLite.md | 31 + docs/StatesApi.md | 432 + docs/TransferCycleIssues200Response.md | 28 + docs/TransferCycleIssues400Response.md | 28 + docs/UpdateCycleRequest.md | 31 + docs/UpdateLabelRequest.md | 30 + docs/UserAssetUpload.md | 32 + docs/UserLite.md | 34 + docs/UsersApi.md | 84 + docs/WorkItemsApi.md | 1936 +++ examples/basic_usage.py | 91 - git_push.sh | 57 + openapitools.json | 7 + plane/__init__.py | 87 + plane/api/__init__.py | 15 + plane/api/assets_api.py | 2665 ++++ plane/api/cycles_api.py | 2115 +++ plane/api/general_api.py | 375 + plane/api/intake_api.py | 845 ++ plane/api/labels_api.py | 946 ++ plane/api/members_api.py | 341 + plane/api/modules_api.py | 1787 +++ plane/api/projects_api.py | 1110 ++ plane/api/states_api.py | 841 ++ plane/api/users_api.py | 174 + plane/api/work_items_api.py | 3827 ++++++ plane/api_client.py | 766 ++ plane/api_response.py | 25 + plane/configuration.py | 463 + plane/exceptions.py | 166 + plane/models/__init__.py | 60 + plane/models/add_cycle_issues_request.py | 71 + plane/models/create_cycle_request.py | 92 + plane/models/create_intake_issue_request.py | 75 + .../create_intake_issue_request_issue.py | 75 + ...create_intake_issue_request_issue_issue.py | 90 + plane/models/create_issue_comment_request.py | 71 + plane/models/create_issue_link_request.py | 75 + plane/models/create_label_request.py | 75 + plane/models/create_module_request.py | 113 + plane/models/create_project_request.py | 104 + plane/models/create_state_request.py | 94 + plane/models/cycle.py | 214 + plane/models/cycle_issue.py | 113 + plane/models/cycle_lite.py | 181 + plane/models/generic_asset_upload.py | 81 + plane/models/get_issue_attachment2_request.py | 79 + ...get_workspace_members200_response_inner.py | 97 + plane/models/intake_issue.py | 183 + plane/models/issue.py | 224 + plane/models/issue_activity.py | 158 + plane/models/issue_attachment.py | 204 + plane/models/issue_comment.py | 157 + plane/models/issue_expand.py | 264 + plane/models/issue_link.py | 126 + plane/models/label.py | 142 + plane/models/label_lite.py | 76 + plane/models/module.py | 216 + plane/models/module_issue.py | 115 + plane/models/module_lite.py | 194 + plane/models/patched_asset_update.py | 76 + plane/models/patched_generic_asset_update.py | 71 + plane/models/patched_issue.py | 224 + plane/models/patched_project.py | 264 + plane/models/project.py | 264 + plane/models/search_issues200_response.py | 79 + .../search_issues200_response_issues_inner.py | 81 + plane/models/state.py | 158 + plane/models/state_lite.py | 88 + .../transfer_cycle_issues200_response.py | 71 + .../transfer_cycle_issues400_response.py | 71 + plane/models/update_cycle_request.py | 92 + plane/models/update_label_request.py | 75 + plane/models/user_asset_upload.py | 94 + plane/models/user_lite.py | 95 + plane/py.typed | 0 plane/rest.py | 329 + pyproject.toml | 140 +- requirements.txt | 5 + schema.yml | 11151 ++++++++++++++++ setup.cfg | 2 + setup.py | 49 + src/plane/__init__.py | 26 - src/plane/client.py | 193 - src/plane/config.py | 44 - src/plane/exceptions.py | 73 - src/plane/models/__init__.py | 12 - src/plane/models/base.py | 43 - src/plane/models/project.py | 100 - src/plane/models/workspace.py | 26 - src/plane/resources/__init__.py | 11 - src/plane/resources/base.py | 79 - src/plane/resources/projects.py | 69 - src/plane/resources/workspaces.py | 70 - test-requirements.txt | 3 + test/__init__.py | 0 test/test_add_cycle_issues_request.py | 54 + test/test_assets_api.py | 157 + test/test_create_cycle_request.py | 56 + test/test_create_intake_issue_request.py | 56 + .../test_create_intake_issue_request_issue.py | 55 + ...create_intake_issue_request_issue_issue.py | 54 + test/test_create_issue_comment_request.py | 53 + test/test_create_issue_link_request.py | 57 + test/test_create_label_request.py | 57 + test/test_create_module_request.py | 60 + test/test_create_project_request.py | 61 + test/test_create_state_request.py | 56 + test/test_cycle.py | 101 + test/test_cycle_issue.py | 71 + test/test_cycle_lite.py | 80 + test/test_cycles_api.py | 122 + test/test_general_api.py | 45 + test/test_generic_asset_upload.py | 59 + test/test_get_issue_attachment2_request.py | 56 + ...get_workspace_members200_response_inner.py | 64 + test/test_intake_api.py | 66 + test/test_intake_issue.py | 174 + test/test_issue.py | 92 + test/test_issue_activity.py | 76 + test/test_issue_attachment.py | 83 + test/test_issue_comment.py | 79 + test/test_issue_expand.py | 227 + test/test_issue_link.py | 72 + test/test_label.py | 75 + test/test_label_lite.py | 56 + test/test_labels_api.py | 66 + test/test_members_api.py | 45 + test/test_module.py | 97 + test/test_module_issue.py | 73 + test/test_module_lite.py | 86 + test/test_modules_api.py | 108 + test/test_patched_asset_update.py | 52 + test/test_patched_generic_asset_update.py | 52 + test/test_patched_issue.py | 84 + test/test_patched_project.py | 93 + test/test_project.py | 111 + test/test_projects_api.py | 80 + test/test_search_issues200_response.py | 60 + ..._search_issues200_response_issues_inner.py | 57 + test/test_state.py | 79 + test/test_state_lite.py | 59 + test/test_states_api.py | 66 + .../test_transfer_cycle_issues200_response.py | 52 + .../test_transfer_cycle_issues400_response.py | 52 + test/test_update_cycle_request.py | 55 + test/test_update_label_request.py | 54 + test/test_user_asset_upload.py | 58 + test/test_user_lite.py | 63 + test/test_users_api.py | 38 + test/test_work_items_api.py | 178 + tests/client.py | 60 - tests/conf_test.py | 57 - tests/workspace.py | 141 - tox.ini | 9 + 209 files changed, 48075 insertions(+), 1490 deletions(-) create mode 100644 .github/workflows/python.yml create mode 100644 .gitlab-ci.yml create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION create mode 100644 .swagger-codegen/VERSION create mode 100644 .travis.yml create mode 100644 docs/AddCycleIssuesRequest.md create mode 100644 docs/AssetsApi.md create mode 100644 docs/CreateCycleRequest.md create mode 100644 docs/CreateIntakeIssueRequest.md create mode 100644 docs/CreateIntakeIssueRequestIssue.md create mode 100644 docs/CreateIntakeIssueRequestIssueIssue.md create mode 100644 docs/CreateIssueCommentRequest.md create mode 100644 docs/CreateIssueLinkRequest.md create mode 100644 docs/CreateLabelRequest.md create mode 100644 docs/CreateModuleRequest.md create mode 100644 docs/CreateProjectRequest.md create mode 100644 docs/CreateStateRequest.md create mode 100644 docs/Cycle.md create mode 100644 docs/CycleIssue.md create mode 100644 docs/CycleLite.md create mode 100644 docs/CyclesApi.md create mode 100644 docs/GeneralApi.md create mode 100644 docs/GenericAssetUpload.md create mode 100644 docs/GetIssueAttachment2Request.md create mode 100644 docs/GetWorkspaceMembers200ResponseInner.md create mode 100644 docs/IntakeApi.md create mode 100644 docs/IntakeIssue.md create mode 100644 docs/Issue.md create mode 100644 docs/IssueActivity.md create mode 100644 docs/IssueAttachment.md create mode 100644 docs/IssueComment.md create mode 100644 docs/IssueExpand.md create mode 100644 docs/IssueLink.md create mode 100644 docs/Label.md create mode 100644 docs/LabelLite.md create mode 100644 docs/LabelsApi.md create mode 100644 docs/MembersApi.md create mode 100644 docs/Module.md create mode 100644 docs/ModuleIssue.md create mode 100644 docs/ModuleLite.md create mode 100644 docs/ModulesApi.md create mode 100644 docs/PatchedAssetUpdate.md create mode 100644 docs/PatchedGenericAssetUpdate.md create mode 100644 docs/PatchedIssue.md create mode 100644 docs/PatchedProject.md create mode 100644 docs/Project.md create mode 100644 docs/ProjectsApi.md create mode 100644 docs/SearchIssues200Response.md create mode 100644 docs/SearchIssues200ResponseIssuesInner.md create mode 100644 docs/State.md create mode 100644 docs/StateLite.md create mode 100644 docs/StatesApi.md create mode 100644 docs/TransferCycleIssues200Response.md create mode 100644 docs/TransferCycleIssues400Response.md create mode 100644 docs/UpdateCycleRequest.md create mode 100644 docs/UpdateLabelRequest.md create mode 100644 docs/UserAssetUpload.md create mode 100644 docs/UserLite.md create mode 100644 docs/UsersApi.md create mode 100644 docs/WorkItemsApi.md delete mode 100644 examples/basic_usage.py create mode 100644 git_push.sh create mode 100644 openapitools.json create mode 100644 plane/__init__.py create mode 100644 plane/api/__init__.py create mode 100644 plane/api/assets_api.py create mode 100644 plane/api/cycles_api.py create mode 100644 plane/api/general_api.py create mode 100644 plane/api/intake_api.py create mode 100644 plane/api/labels_api.py create mode 100644 plane/api/members_api.py create mode 100644 plane/api/modules_api.py create mode 100644 plane/api/projects_api.py create mode 100644 plane/api/states_api.py create mode 100644 plane/api/users_api.py create mode 100644 plane/api/work_items_api.py create mode 100644 plane/api_client.py create mode 100644 plane/api_response.py create mode 100644 plane/configuration.py create mode 100644 plane/exceptions.py create mode 100644 plane/models/__init__.py create mode 100644 plane/models/add_cycle_issues_request.py create mode 100644 plane/models/create_cycle_request.py create mode 100644 plane/models/create_intake_issue_request.py create mode 100644 plane/models/create_intake_issue_request_issue.py create mode 100644 plane/models/create_intake_issue_request_issue_issue.py create mode 100644 plane/models/create_issue_comment_request.py create mode 100644 plane/models/create_issue_link_request.py create mode 100644 plane/models/create_label_request.py create mode 100644 plane/models/create_module_request.py create mode 100644 plane/models/create_project_request.py create mode 100644 plane/models/create_state_request.py create mode 100644 plane/models/cycle.py create mode 100644 plane/models/cycle_issue.py create mode 100644 plane/models/cycle_lite.py create mode 100644 plane/models/generic_asset_upload.py create mode 100644 plane/models/get_issue_attachment2_request.py create mode 100644 plane/models/get_workspace_members200_response_inner.py create mode 100644 plane/models/intake_issue.py create mode 100644 plane/models/issue.py create mode 100644 plane/models/issue_activity.py create mode 100644 plane/models/issue_attachment.py create mode 100644 plane/models/issue_comment.py create mode 100644 plane/models/issue_expand.py create mode 100644 plane/models/issue_link.py create mode 100644 plane/models/label.py create mode 100644 plane/models/label_lite.py create mode 100644 plane/models/module.py create mode 100644 plane/models/module_issue.py create mode 100644 plane/models/module_lite.py create mode 100644 plane/models/patched_asset_update.py create mode 100644 plane/models/patched_generic_asset_update.py create mode 100644 plane/models/patched_issue.py create mode 100644 plane/models/patched_project.py create mode 100644 plane/models/project.py create mode 100644 plane/models/search_issues200_response.py create mode 100644 plane/models/search_issues200_response_issues_inner.py create mode 100644 plane/models/state.py create mode 100644 plane/models/state_lite.py create mode 100644 plane/models/transfer_cycle_issues200_response.py create mode 100644 plane/models/transfer_cycle_issues400_response.py create mode 100644 plane/models/update_cycle_request.py create mode 100644 plane/models/update_label_request.py create mode 100644 plane/models/user_asset_upload.py create mode 100644 plane/models/user_lite.py create mode 100644 plane/py.typed create mode 100644 plane/rest.py create mode 100644 requirements.txt create mode 100644 schema.yml create mode 100644 setup.cfg create mode 100644 setup.py delete mode 100644 src/plane/__init__.py delete mode 100644 src/plane/client.py delete mode 100644 src/plane/config.py delete mode 100644 src/plane/exceptions.py delete mode 100644 src/plane/models/__init__.py delete mode 100644 src/plane/models/base.py delete mode 100644 src/plane/models/project.py delete mode 100644 src/plane/models/workspace.py delete mode 100644 src/plane/resources/__init__.py delete mode 100644 src/plane/resources/base.py delete mode 100644 src/plane/resources/projects.py delete mode 100644 src/plane/resources/workspaces.py create mode 100644 test-requirements.txt create mode 100644 test/__init__.py create mode 100644 test/test_add_cycle_issues_request.py create mode 100644 test/test_assets_api.py create mode 100644 test/test_create_cycle_request.py create mode 100644 test/test_create_intake_issue_request.py create mode 100644 test/test_create_intake_issue_request_issue.py create mode 100644 test/test_create_intake_issue_request_issue_issue.py create mode 100644 test/test_create_issue_comment_request.py create mode 100644 test/test_create_issue_link_request.py create mode 100644 test/test_create_label_request.py create mode 100644 test/test_create_module_request.py create mode 100644 test/test_create_project_request.py create mode 100644 test/test_create_state_request.py create mode 100644 test/test_cycle.py create mode 100644 test/test_cycle_issue.py create mode 100644 test/test_cycle_lite.py create mode 100644 test/test_cycles_api.py create mode 100644 test/test_general_api.py create mode 100644 test/test_generic_asset_upload.py create mode 100644 test/test_get_issue_attachment2_request.py create mode 100644 test/test_get_workspace_members200_response_inner.py create mode 100644 test/test_intake_api.py create mode 100644 test/test_intake_issue.py create mode 100644 test/test_issue.py create mode 100644 test/test_issue_activity.py create mode 100644 test/test_issue_attachment.py create mode 100644 test/test_issue_comment.py create mode 100644 test/test_issue_expand.py create mode 100644 test/test_issue_link.py create mode 100644 test/test_label.py create mode 100644 test/test_label_lite.py create mode 100644 test/test_labels_api.py create mode 100644 test/test_members_api.py create mode 100644 test/test_module.py create mode 100644 test/test_module_issue.py create mode 100644 test/test_module_lite.py create mode 100644 test/test_modules_api.py create mode 100644 test/test_patched_asset_update.py create mode 100644 test/test_patched_generic_asset_update.py create mode 100644 test/test_patched_issue.py create mode 100644 test/test_patched_project.py create mode 100644 test/test_project.py create mode 100644 test/test_projects_api.py create mode 100644 test/test_search_issues200_response.py create mode 100644 test/test_search_issues200_response_issues_inner.py create mode 100644 test/test_state.py create mode 100644 test/test_state_lite.py create mode 100644 test/test_states_api.py create mode 100644 test/test_transfer_cycle_issues200_response.py create mode 100644 test/test_transfer_cycle_issues400_response.py create mode 100644 test/test_update_cycle_request.py create mode 100644 test/test_update_label_request.py create mode 100644 test/test_user_asset_upload.py create mode 100644 test/test_user_lite.py create mode 100644 test/test_users_api.py create mode 100644 test/test_work_items_api.py delete mode 100644 tests/client.py delete mode 100644 tests/conf_test.py delete mode 100644 tests/workspace.py create mode 100644 tox.ini diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 0000000..1db8724 --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,38 @@ +# NOTE: This file is auto generated by OpenAPI Generator. +# URL: https://openapi-generator.tech +# +# ref: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python + +name: plane Python package + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + if [ -f test-requirements.txt ]; then pip install -r test-requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + pytest diff --git a/.gitignore b/.gitignore index 68261e3..43995bd 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ __pycache__/ # Distribution / packaging .Python +env/ build/ develop-eggs/ dist/ @@ -19,14 +20,13 @@ lib64/ parts/ sdist/ var/ -wheels/ -share/python-wheels/ *.egg-info/ .installed.cfg *.egg -MANIFEST # PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec @@ -37,17 +37,17 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ -.nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml -*.cover -*.py,cover +*,cover .hypothesis/ -.pytest_cache/ -cover/ +venv/ +.venv/ +.python-version +.pytest_cache # Translations *.mo @@ -55,98 +55,12 @@ cover/ # Django stuff: *.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy # Sphinx documentation docs/_build/ # PyBuilder -.pybuilder/ target/ -# Jupyter Notebook +#Ipython Notebook .ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -Pipfile.lock - -# poetry -poetry.lock - -# pdm -.pdm.toml - -# PEP 582 -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# IDE -.vscode/ -.idea/ -*.swp -*.swo -*~ - -# OS -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..194c4e6 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,31 @@ +# NOTE: This file is auto generated by OpenAPI Generator. +# URL: https://openapi-generator.tech +# +# ref: https://docs.gitlab.com/ee/ci/README.html +# ref: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Python.gitlab-ci.yml + +stages: + - test + +.pytest: + stage: test + script: + - pip install -r requirements.txt + - pip install -r test-requirements.txt + - pytest --cov=plane + +pytest-3.7: + extends: .pytest + image: python:3.7-alpine +pytest-3.8: + extends: .pytest + image: python:3.8-alpine +pytest-3.9: + extends: .pytest + image: python:3.9-alpine +pytest-3.10: + extends: .pytest + image: python:3.10-alpine +pytest-3.11: + extends: .pytest + image: python:3.11-alpine diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 0000000..ee91ac2 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,187 @@ +.github/workflows/python.yml +.gitignore +.gitlab-ci.yml +.travis.yml +README.md +docs/AddCycleIssuesRequest.md +docs/AssetsApi.md +docs/CreateCycleRequest.md +docs/CreateIntakeIssueRequest.md +docs/CreateIntakeIssueRequestIssue.md +docs/CreateIntakeIssueRequestIssueIssue.md +docs/CreateIssueCommentRequest.md +docs/CreateIssueLinkRequest.md +docs/CreateLabelRequest.md +docs/CreateModuleRequest.md +docs/CreateProjectRequest.md +docs/CreateStateRequest.md +docs/Cycle.md +docs/CycleIssue.md +docs/CycleLite.md +docs/CyclesApi.md +docs/GeneralApi.md +docs/GenericAssetUpload.md +docs/GetIssueAttachment2Request.md +docs/GetWorkspaceMembers200ResponseInner.md +docs/IntakeApi.md +docs/IntakeIssue.md +docs/Issue.md +docs/IssueActivity.md +docs/IssueAttachment.md +docs/IssueComment.md +docs/IssueExpand.md +docs/IssueLink.md +docs/Label.md +docs/LabelLite.md +docs/LabelsApi.md +docs/MembersApi.md +docs/Module.md +docs/ModuleIssue.md +docs/ModuleLite.md +docs/ModulesApi.md +docs/PatchedAssetUpdate.md +docs/PatchedGenericAssetUpdate.md +docs/PatchedIssue.md +docs/PatchedProject.md +docs/Project.md +docs/ProjectsApi.md +docs/SearchIssues200Response.md +docs/SearchIssues200ResponseIssuesInner.md +docs/State.md +docs/StateLite.md +docs/StatesApi.md +docs/TransferCycleIssues200Response.md +docs/TransferCycleIssues400Response.md +docs/UpdateCycleRequest.md +docs/UpdateLabelRequest.md +docs/UserAssetUpload.md +docs/UserLite.md +docs/UsersApi.md +docs/WorkItemsApi.md +git_push.sh +plane/__init__.py +plane/api/__init__.py +plane/api/assets_api.py +plane/api/cycles_api.py +plane/api/general_api.py +plane/api/intake_api.py +plane/api/labels_api.py +plane/api/members_api.py +plane/api/modules_api.py +plane/api/projects_api.py +plane/api/states_api.py +plane/api/users_api.py +plane/api/work_items_api.py +plane/api_client.py +plane/api_response.py +plane/configuration.py +plane/exceptions.py +plane/models/__init__.py +plane/models/add_cycle_issues_request.py +plane/models/create_cycle_request.py +plane/models/create_intake_issue_request.py +plane/models/create_intake_issue_request_issue.py +plane/models/create_intake_issue_request_issue_issue.py +plane/models/create_issue_comment_request.py +plane/models/create_issue_link_request.py +plane/models/create_label_request.py +plane/models/create_module_request.py +plane/models/create_project_request.py +plane/models/create_state_request.py +plane/models/cycle.py +plane/models/cycle_issue.py +plane/models/cycle_lite.py +plane/models/generic_asset_upload.py +plane/models/get_issue_attachment2_request.py +plane/models/get_workspace_members200_response_inner.py +plane/models/intake_issue.py +plane/models/issue.py +plane/models/issue_activity.py +plane/models/issue_attachment.py +plane/models/issue_comment.py +plane/models/issue_expand.py +plane/models/issue_link.py +plane/models/label.py +plane/models/label_lite.py +plane/models/module.py +plane/models/module_issue.py +plane/models/module_lite.py +plane/models/patched_asset_update.py +plane/models/patched_generic_asset_update.py +plane/models/patched_issue.py +plane/models/patched_project.py +plane/models/project.py +plane/models/search_issues200_response.py +plane/models/search_issues200_response_issues_inner.py +plane/models/state.py +plane/models/state_lite.py +plane/models/transfer_cycle_issues200_response.py +plane/models/transfer_cycle_issues400_response.py +plane/models/update_cycle_request.py +plane/models/update_label_request.py +plane/models/user_asset_upload.py +plane/models/user_lite.py +plane/py.typed +plane/rest.py +pyproject.toml +requirements.txt +setup.cfg +setup.py +test-requirements.txt +test/__init__.py +test/test_add_cycle_issues_request.py +test/test_assets_api.py +test/test_create_cycle_request.py +test/test_create_intake_issue_request.py +test/test_create_intake_issue_request_issue.py +test/test_create_intake_issue_request_issue_issue.py +test/test_create_issue_comment_request.py +test/test_create_issue_link_request.py +test/test_create_label_request.py +test/test_create_module_request.py +test/test_create_project_request.py +test/test_create_state_request.py +test/test_cycle.py +test/test_cycle_issue.py +test/test_cycle_lite.py +test/test_cycles_api.py +test/test_general_api.py +test/test_generic_asset_upload.py +test/test_get_issue_attachment2_request.py +test/test_get_workspace_members200_response_inner.py +test/test_intake_api.py +test/test_intake_issue.py +test/test_issue.py +test/test_issue_activity.py +test/test_issue_attachment.py +test/test_issue_comment.py +test/test_issue_expand.py +test/test_issue_link.py +test/test_label.py +test/test_label_lite.py +test/test_labels_api.py +test/test_members_api.py +test/test_module.py +test/test_module_issue.py +test/test_module_lite.py +test/test_modules_api.py +test/test_patched_asset_update.py +test/test_patched_generic_asset_update.py +test/test_patched_issue.py +test/test_patched_project.py +test/test_project.py +test/test_projects_api.py +test/test_search_issues200_response.py +test/test_search_issues200_response_issues_inner.py +test/test_state.py +test/test_state_lite.py +test/test_states_api.py +test/test_transfer_cycle_issues200_response.py +test/test_transfer_cycle_issues400_response.py +test/test_update_cycle_request.py +test/test_update_label_request.py +test/test_user_asset_upload.py +test/test_user_lite.py +test/test_users_api.py +test/test_work_items_api.py +tox.ini diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 0000000..eb1dc6a --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.13.0 diff --git a/.swagger-codegen/VERSION b/.swagger-codegen/VERSION new file mode 100644 index 0000000..f1eb5bc --- /dev/null +++ b/.swagger-codegen/VERSION @@ -0,0 +1 @@ +3.0.68 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9b71e96 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,17 @@ +# ref: https://docs.travis-ci.com/user/languages/python +language: python +python: + - "3.7" + - "3.8" + - "3.9" + - "3.10" + - "3.11" + # uncomment the following if needed + #- "3.11-dev" # 3.11 development branch + #- "nightly" # nightly build +# command to install dependencies +install: + - "pip install -r requirements.txt" + - "pip install -r test-requirements.txt" +# command to run tests +script: pytest --cov=plane diff --git a/README.md b/README.md index 8568eba..60fed89 100644 --- a/README.md +++ b/README.md @@ -1,223 +1,255 @@ -# My API SDK +# plane +Plane External API -A comprehensive Python SDK for My API with both synchronous and asynchronous support. +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -## Features +- API version: 1.0.0 +- Package version: 1.0.0 +- Generator version: 7.13.0 +- Build package: org.openapitools.codegen.languages.PythonPydanticV1ClientCodegen -- **Async/Sync Support**: Use either async/await or synchronous methods -- **Type Safety**: Full type hints and Pydantic models -- **Error Handling**: Comprehensive exception handling with specific error types -- **Retry Logic**: Built-in retry mechanisms for resilient API calls -- **Rate Limiting**: Automatic handling of rate limit responses -- **Pagination**: Easy-to-use pagination support -- **Configuration**: Flexible configuration via environment variables or direct setup +## Requirements. -## Installation +Python 3.7+ -```bash -pip install my-api-sdk -``` - -## Quick Start +## Installation & Usage +### pip install -### Async Usage +If the python package is hosted on a repository, you can install directly using: -```python -import asyncio -from my_api_sdk import Client, Config - -async def main(): - config = Config(api_key="your-api-key") - - async with Client(config) as client: - # List users - result = await client.users.list() - users = result["users"] - - # Get a specific user - user = await client.users.get("user-id") - print(f"User: {user.full_name}") - -asyncio.run(main()) +```sh +pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git ``` +(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`) -### Sync Usage - +Then import the package: ```python -from my_api_sdk import SyncClient, Config - -config = Config(api_key="your-api-key") - -with SyncClient(config) as client: - # List users - result = client.users.list() - users = result["users"] - - # Get a specific user - user = client.users.get("user-id") - print(f"User: {user.full_name}") +import plane ``` -### Environment Variables +### Setuptools -Set these environment variables to configure the SDK: +Install via [Setuptools](http://pypi.python.org/pypi/setuptools). -```bash -export MY_API_KEY="your-api-key" -export MY_API_BASE_URL="https://api.example.com/v1" # optional -export MY_API_TIMEOUT="30" # optional -export MY_API_MAX_RETRIES="3" # optional +```sh +python setup.py install --user ``` +(or `sudo python setup.py install` to install the package for all users) -Then initialize without explicit config: - +Then import the package: ```python -from my_api_sdk import Client - -# Uses environment variables -client = Client() +import plane ``` -## Configuration - -The SDK can be configured using the `Config` class: +### Tests -```python -from my_api_sdk import Config - -config = Config( - api_key="your-api-key", - base_url="https://api.example.com/v1", - timeout=30, - max_retries=3, - retry_delay=1.0, - user_agent="my-app/1.0.0" -) -``` +Execute `pytest` to run the tests. -## Error Handling +## Getting Started -The SDK provides specific exception types for different error conditions: +Please follow the [installation procedure](#installation--usage) and then run the following: ```python -from my_api_sdk import Client -from my_api_sdk.exceptions import ( - AuthenticationError, - RateLimitError, - NotFoundError, - ValidationError, - ServerError -) - -async with Client() as client: - try: - user = await client.users.get("invalid-id") - except NotFoundError: - print("User not found") - except AuthenticationError: - print("Invalid API key") - except RateLimitError as e: - print(f"Rate limited. Retry after {e.retry_after} seconds") - except ValidationError as e: - print(f"Validation error: {e.message}") - except ServerError: - print("Server error occurred") -``` -## Models +import time +import plane +from plane.rest import ApiException +from pprint import pprint -The SDK uses Pydantic models for type safety and validation: - -```python -from my_api_sdk.models.user import User, UserCreate, UserUpdate - -# Create a new user -user_data = UserCreate( - email="user@example.com", - firstName="John", - lastName="Doe", - password="securepassword" +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" ) -user = await client.users.create(user_data) +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. -# Update user -update_data = UserUpdate(firstName="Jane") -updated_user = await client.users.update(user.id, update_data) - -# Access user properties -print(f"Full name: {user.full_name}") -print(f"Email: {user.email}") -print(f"Created: {user.created_at}") -``` +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] -## Pagination +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' -List methods return paginated results: - -```python -result = await client.users.list(page=1, per_page=20, search="john") - -users = result["users"] # List of User objects -pagination = result["pagination"] # PaginatedResponse object - -print(f"Page {pagination.page} of {pagination.total_pages}") -print(f"Total users: {pagination.total}") -print(f"Has next page: {pagination.has_next}") - -# Iterate through all pages -page = 1 -while True: - result = await client.users.list(page=page) - users = result["users"] - - if not users: - break - - for user in users: - print(f"User: {user.full_name}") - - if not result["pagination"].has_next: - break - - page += 1 -``` -## Development +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + slug = 'my-workspace' # str | Workspace slug identifier + generic_asset_upload = plane.GenericAssetUpload() # GenericAssetUpload | -### Setup - -```bash -git clone https://github.com/yourusername/my-api-sdk.git -cd my-api-sdk -pip install -e ".[dev]" -``` - -### Testing + try: + # Create Assets + api_instance.create_generic_asset_upload(slug, generic_asset_upload) + except ApiException as e: + print("Exception when calling AssetsApi->create_generic_asset_upload: %s\n" % e) -```bash -pytest -pytest --cov=src/my_api_sdk # With coverage ``` -### Code Quality - -```bash -black src/ tests/ -isort src/ tests/ -flake8 src/ tests/ -mypy src/ -``` +## Documentation for API Endpoints + +All URIs are relative to */api/v1* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AssetsApi* | [**create_generic_asset_upload**](docs/AssetsApi.md#create_generic_asset_upload) | **POST** /workspaces/{slug}/assets/ | Create Assets +*AssetsApi* | [**create_generic_asset_upload2**](docs/AssetsApi.md#create_generic_asset_upload2) | **POST** /workspaces/{slug}/assets/{asset_id}/ | Create Assets +*AssetsApi* | [**create_user_asset_upload**](docs/AssetsApi.md#create_user_asset_upload) | **POST** /assets/user-assets/ | Create User Assets +*AssetsApi* | [**create_user_asset_upload2**](docs/AssetsApi.md#create_user_asset_upload2) | **POST** /assets/user-assets/{asset_id}/ | Create User Assets +*AssetsApi* | [**create_user_server_asset_upload**](docs/AssetsApi.md#create_user_server_asset_upload) | **POST** /assets/user-assets/server/ | Create Server +*AssetsApi* | [**create_user_server_asset_upload2**](docs/AssetsApi.md#create_user_server_asset_upload2) | **POST** /assets/user-assets/{asset_id}/server/ | Create Server +*AssetsApi* | [**delete_user_asset**](docs/AssetsApi.md#delete_user_asset) | **DELETE** /assets/user-assets/ | Delete User Assets +*AssetsApi* | [**delete_user_asset2**](docs/AssetsApi.md#delete_user_asset2) | **DELETE** /assets/user-assets/{asset_id}/ | Delete User Assets +*AssetsApi* | [**delete_user_server_asset**](docs/AssetsApi.md#delete_user_server_asset) | **DELETE** /assets/user-assets/server/ | Delete Server +*AssetsApi* | [**delete_user_server_asset2**](docs/AssetsApi.md#delete_user_server_asset2) | **DELETE** /assets/user-assets/{asset_id}/server/ | Delete Server +*AssetsApi* | [**get_generic_asset**](docs/AssetsApi.md#get_generic_asset) | **GET** /workspaces/{slug}/assets/ | Retrieve Assets +*AssetsApi* | [**get_generic_asset2**](docs/AssetsApi.md#get_generic_asset2) | **GET** /workspaces/{slug}/assets/{asset_id}/ | Retrieve Assets +*AssetsApi* | [**update_generic_asset**](docs/AssetsApi.md#update_generic_asset) | **PATCH** /workspaces/{slug}/assets/ | Update Assets +*AssetsApi* | [**update_generic_asset2**](docs/AssetsApi.md#update_generic_asset2) | **PATCH** /workspaces/{slug}/assets/{asset_id}/ | Update Assets +*AssetsApi* | [**update_user_asset**](docs/AssetsApi.md#update_user_asset) | **PATCH** /assets/user-assets/ | Update User Assets +*AssetsApi* | [**update_user_asset2**](docs/AssetsApi.md#update_user_asset2) | **PATCH** /assets/user-assets/{asset_id}/ | Update User Assets +*AssetsApi* | [**update_user_server_asset**](docs/AssetsApi.md#update_user_server_asset) | **PATCH** /assets/user-assets/server/ | Update Server +*AssetsApi* | [**update_user_server_asset2**](docs/AssetsApi.md#update_user_server_asset2) | **PATCH** /assets/user-assets/{asset_id}/server/ | Update Server +*CyclesApi* | [**add_cycle_issues**](docs/CyclesApi.md#add_cycle_issues) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/ | Add cycle issues +*CyclesApi* | [**archive_cycle**](docs/CyclesApi.md#archive_cycle) | **POST** /workspaces/{slug}/projects/{project_id}/archived-cycles/ | Archive cycle +*CyclesApi* | [**archive_cycle2**](docs/CyclesApi.md#archive_cycle2) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/ | Archive cycle +*CyclesApi* | [**create_cycle**](docs/CyclesApi.md#create_cycle) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/ | Create cycle +*CyclesApi* | [**delete_cycle**](docs/CyclesApi.md#delete_cycle) | **DELETE** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Delete cycle +*CyclesApi* | [**delete_cycle_issue**](docs/CyclesApi.md#delete_cycle_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/ | Delete cycle issue +*CyclesApi* | [**get_cycle_issues**](docs/CyclesApi.md#get_cycle_issues) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/ | Get cycle issues +*CyclesApi* | [**get_cycle_issues2**](docs/CyclesApi.md#get_cycle_issues2) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/ | Get cycle issues +*CyclesApi* | [**get_cycles**](docs/CyclesApi.md#get_cycles) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/ | Get cycles +*CyclesApi* | [**get_cycles2**](docs/CyclesApi.md#get_cycles2) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Get cycles +*CyclesApi* | [**transfer_cycle_issues**](docs/CyclesApi.md#transfer_cycle_issues) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/ | Transfer issues to a new cycle +*CyclesApi* | [**unarchive_cycle**](docs/CyclesApi.md#unarchive_cycle) | **DELETE** /workspaces/{slug}/projects/{project_id}/archived-cycles/{id}/unarchive/ | Unarchive cycle +*CyclesApi* | [**update_cycle**](docs/CyclesApi.md#update_cycle) | **PATCH** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Update cycle +*GeneralApi* | [**search_issues**](docs/GeneralApi.md#search_issues) | **GET** /workspaces/{slug}/issues/search/ | Search issues +*GeneralApi* | [**workspaces_issues_retrieve**](docs/GeneralApi.md#workspaces_issues_retrieve) | **GET** /workspaces/{slug}/issues/{project__identifier}-{issue__identifier}/ | Retrieve Issues +*IntakeApi* | [**create_intake_issue**](docs/IntakeApi.md#create_intake_issue) | **POST** /workspaces/{slug}/projects/{project_id}/intake-issues/ | Create intake issue +*IntakeApi* | [**delete_intake_issue**](docs/IntakeApi.md#delete_intake_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Delete intake issue +*IntakeApi* | [**get_intake_issues**](docs/IntakeApi.md#get_intake_issues) | **GET** /workspaces/{slug}/projects/{project_id}/intake-issues/ | Get intake issues +*IntakeApi* | [**get_intake_issues2**](docs/IntakeApi.md#get_intake_issues2) | **GET** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Get intake issues +*IntakeApi* | [**update_intake_issue**](docs/IntakeApi.md#update_intake_issue) | **PATCH** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Update intake issue +*LabelsApi* | [**create_label**](docs/LabelsApi.md#create_label) | **POST** /workspaces/{slug}/projects/{project_id}/labels/ | Create a label +*LabelsApi* | [**delete_label**](docs/LabelsApi.md#delete_label) | **DELETE** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Delete a label +*LabelsApi* | [**get_labels**](docs/LabelsApi.md#get_labels) | **GET** /workspaces/{slug}/projects/{project_id}/labels/ | Get labels +*LabelsApi* | [**get_labels2**](docs/LabelsApi.md#get_labels2) | **GET** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Get labels +*LabelsApi* | [**update_label**](docs/LabelsApi.md#update_label) | **PATCH** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Update a label +*MembersApi* | [**get_project_members**](docs/MembersApi.md#get_project_members) | **GET** /workspaces/{slug}/projects/{project_id}/members/ | Get all the users that are present inside the project +*MembersApi* | [**get_workspace_members**](docs/MembersApi.md#get_workspace_members) | **GET** /workspaces/{slug}/members/ | Get all the users that are present inside the workspace +*ModulesApi* | [**add_module_issues**](docs/ModulesApi.md#add_module_issues) | **POST** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/ | Add module issues +*ModulesApi* | [**archive_module**](docs/ModulesApi.md#archive_module) | **POST** /workspaces/{slug}/projects/{project_id}/modules/{id}/archive/ | Archive module +*ModulesApi* | [**create_module**](docs/ModulesApi.md#create_module) | **POST** /workspaces/{slug}/projects/{project_id}/modules/ | Create module +*ModulesApi* | [**delete_module**](docs/ModulesApi.md#delete_module) | **DELETE** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Delete module +*ModulesApi* | [**delete_module_issue**](docs/ModulesApi.md#delete_module_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/ | Delete module issue +*ModulesApi* | [**get_archived_modules**](docs/ModulesApi.md#get_archived_modules) | **GET** /workspaces/{slug}/projects/{project_id}/archived-modules/ | Get archived modules +*ModulesApi* | [**get_module**](docs/ModulesApi.md#get_module) | **GET** /workspaces/{slug}/projects/{project_id}/modules/ | Get module +*ModulesApi* | [**get_module2**](docs/ModulesApi.md#get_module2) | **GET** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Get module +*ModulesApi* | [**get_module_issues**](docs/ModulesApi.md#get_module_issues) | **GET** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/ | Get module issues +*ModulesApi* | [**unarchive_module**](docs/ModulesApi.md#unarchive_module) | **DELETE** /workspaces/{slug}/projects/{project_id}/archived-modules/{id}/unarchive/ | Unarchive module +*ModulesApi* | [**update_module**](docs/ModulesApi.md#update_module) | **PATCH** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Update module +*ProjectsApi* | [**archive_project**](docs/ProjectsApi.md#archive_project) | **POST** /workspaces/{slug}/projects/{project_id}/archive/ | Archive Project +*ProjectsApi* | [**create_project**](docs/ProjectsApi.md#create_project) | **POST** /workspaces/{slug}/projects/ | Create Project +*ProjectsApi* | [**delete_project**](docs/ProjectsApi.md#delete_project) | **DELETE** /workspaces/{slug}/projects/{id}/ | Delete Project +*ProjectsApi* | [**list_projects**](docs/ProjectsApi.md#list_projects) | **GET** /workspaces/{slug}/projects/ | List Projects +*ProjectsApi* | [**list_projects2**](docs/ProjectsApi.md#list_projects2) | **GET** /workspaces/{slug}/projects/{id}/ | List Projects +*ProjectsApi* | [**unarchive_project**](docs/ProjectsApi.md#unarchive_project) | **DELETE** /workspaces/{slug}/projects/{project_id}/archive/ | Unarchive Project +*ProjectsApi* | [**update_project**](docs/ProjectsApi.md#update_project) | **PATCH** /workspaces/{slug}/projects/{id}/ | Update Project +*StatesApi* | [**create_state**](docs/StatesApi.md#create_state) | **POST** /workspaces/{slug}/projects/{project_id}/states/ | Create State +*StatesApi* | [**delete_state**](docs/StatesApi.md#delete_state) | **DELETE** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Delete State +*StatesApi* | [**get_state**](docs/StatesApi.md#get_state) | **GET** /workspaces/{slug}/projects/{project_id}/states/ | Get State +*StatesApi* | [**get_state2**](docs/StatesApi.md#get_state2) | **GET** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Get State +*StatesApi* | [**update_state**](docs/StatesApi.md#update_state) | **PATCH** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Update State +*UsersApi* | [**get_current_user**](docs/UsersApi.md#get_current_user) | **GET** /users/me/ | Get User +*WorkItemsApi* | [**create_issue_comment**](docs/WorkItemsApi.md#create_issue_comment) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/ | Create an issue comment +*WorkItemsApi* | [**create_issue_link**](docs/WorkItemsApi.md#create_issue_link) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/ | Create an issue link +*WorkItemsApi* | [**create_work_item**](docs/WorkItemsApi.md#create_work_item) | **POST** /workspaces/{slug}/projects/{project_id}/issues/ | Create an work item +*WorkItemsApi* | [**delete_issue_attachment**](docs/WorkItemsApi.md#delete_issue_attachment) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/ | Delete an issue attachment +*WorkItemsApi* | [**delete_issue_comment**](docs/WorkItemsApi.md#delete_issue_comment) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Delete an issue comment +*WorkItemsApi* | [**delete_issue_link**](docs/WorkItemsApi.md#delete_issue_link) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Delete an issue link +*WorkItemsApi* | [**delete_work_item**](docs/WorkItemsApi.md#delete_work_item) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Delete an work item +*WorkItemsApi* | [**get_issue_activities**](docs/WorkItemsApi.md#get_issue_activities) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/ | Get issue activities +*WorkItemsApi* | [**get_issue_activities2**](docs/WorkItemsApi.md#get_issue_activities2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{id}/ | Get issue activities +*WorkItemsApi* | [**get_issue_attachment**](docs/WorkItemsApi.md#get_issue_attachment) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/ | Get an issue attachment +*WorkItemsApi* | [**get_issue_attachment2**](docs/WorkItemsApi.md#get_issue_attachment2) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/ | Get issue attachment +*WorkItemsApi* | [**get_issue_attachment3**](docs/WorkItemsApi.md#get_issue_attachment3) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/ | Get an issue attachment +*WorkItemsApi* | [**get_issue_comments**](docs/WorkItemsApi.md#get_issue_comments) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/ | Get issue comments +*WorkItemsApi* | [**get_issue_comments2**](docs/WorkItemsApi.md#get_issue_comments2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Get issue comments +*WorkItemsApi* | [**get_issue_links**](docs/WorkItemsApi.md#get_issue_links) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/ | Get issue links +*WorkItemsApi* | [**get_issue_links2**](docs/WorkItemsApi.md#get_issue_links2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Get issue links +*WorkItemsApi* | [**get_work_item**](docs/WorkItemsApi.md#get_work_item) | **GET** /workspaces/{slug}/projects/{project_id}/issues/ | Work Item retrieve endpoints +*WorkItemsApi* | [**get_work_item2**](docs/WorkItemsApi.md#get_work_item2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Work Item retrieve endpoints +*WorkItemsApi* | [**patch_work_item**](docs/WorkItemsApi.md#patch_work_item) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Patch an work item +*WorkItemsApi* | [**update_issue_comment**](docs/WorkItemsApi.md#update_issue_comment) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Update an issue comment +*WorkItemsApi* | [**update_issue_link**](docs/WorkItemsApi.md#update_issue_link) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Update an issue link + + +## Documentation For Models + + - [AddCycleIssuesRequest](docs/AddCycleIssuesRequest.md) + - [CreateCycleRequest](docs/CreateCycleRequest.md) + - [CreateIntakeIssueRequest](docs/CreateIntakeIssueRequest.md) + - [CreateIntakeIssueRequestIssue](docs/CreateIntakeIssueRequestIssue.md) + - [CreateIntakeIssueRequestIssueIssue](docs/CreateIntakeIssueRequestIssueIssue.md) + - [CreateIssueCommentRequest](docs/CreateIssueCommentRequest.md) + - [CreateIssueLinkRequest](docs/CreateIssueLinkRequest.md) + - [CreateLabelRequest](docs/CreateLabelRequest.md) + - [CreateModuleRequest](docs/CreateModuleRequest.md) + - [CreateProjectRequest](docs/CreateProjectRequest.md) + - [CreateStateRequest](docs/CreateStateRequest.md) + - [Cycle](docs/Cycle.md) + - [CycleIssue](docs/CycleIssue.md) + - [CycleLite](docs/CycleLite.md) + - [GenericAssetUpload](docs/GenericAssetUpload.md) + - [GetIssueAttachment2Request](docs/GetIssueAttachment2Request.md) + - [GetWorkspaceMembers200ResponseInner](docs/GetWorkspaceMembers200ResponseInner.md) + - [IntakeIssue](docs/IntakeIssue.md) + - [Issue](docs/Issue.md) + - [IssueActivity](docs/IssueActivity.md) + - [IssueAttachment](docs/IssueAttachment.md) + - [IssueComment](docs/IssueComment.md) + - [IssueExpand](docs/IssueExpand.md) + - [IssueLink](docs/IssueLink.md) + - [Label](docs/Label.md) + - [LabelLite](docs/LabelLite.md) + - [Module](docs/Module.md) + - [ModuleIssue](docs/ModuleIssue.md) + - [ModuleLite](docs/ModuleLite.md) + - [PatchedAssetUpdate](docs/PatchedAssetUpdate.md) + - [PatchedGenericAssetUpdate](docs/PatchedGenericAssetUpdate.md) + - [PatchedIssue](docs/PatchedIssue.md) + - [PatchedProject](docs/PatchedProject.md) + - [Project](docs/Project.md) + - [SearchIssues200Response](docs/SearchIssues200Response.md) + - [SearchIssues200ResponseIssuesInner](docs/SearchIssues200ResponseIssuesInner.md) + - [State](docs/State.md) + - [StateLite](docs/StateLite.md) + - [TransferCycleIssues200Response](docs/TransferCycleIssues200Response.md) + - [TransferCycleIssues400Response](docs/TransferCycleIssues400Response.md) + - [UpdateCycleRequest](docs/UpdateCycleRequest.md) + - [UpdateLabelRequest](docs/UpdateLabelRequest.md) + - [UserAssetUpload](docs/UserAssetUpload.md) + - [UserLite](docs/UserLite.md) + + + +## Documentation For Authorization + + +Authentication schemes defined for the API: + +### ApiKeyAuthentication + +- **Type**: API key +- **API key parameter name**: X-API-Key +- **Location**: HTTP header + + +## Author -## Contributing -1. Fork the repository -2. Create a feature branch -3. Make your changes -4. Add tests for new functionality -5. Run the test suite -6. Submit a pull request -## License -MIT License - see LICENSE file for details. \ No newline at end of file diff --git a/docs/AddCycleIssuesRequest.md b/docs/AddCycleIssuesRequest.md new file mode 100644 index 0000000..d5a6384 --- /dev/null +++ b/docs/AddCycleIssuesRequest.md @@ -0,0 +1,28 @@ +# AddCycleIssuesRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**issues** | **List[str]** | | [optional] + +## Example + +```python +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of AddCycleIssuesRequest from a JSON string +add_cycle_issues_request_instance = AddCycleIssuesRequest.from_json(json) +# print the JSON string representation of the object +print AddCycleIssuesRequest.to_json() + +# convert the object into a dict +add_cycle_issues_request_dict = add_cycle_issues_request_instance.to_dict() +# create an instance of AddCycleIssuesRequest from a dict +add_cycle_issues_request_from_dict = AddCycleIssuesRequest.from_dict(add_cycle_issues_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AssetsApi.md b/docs/AssetsApi.md new file mode 100644 index 0000000..dae0936 --- /dev/null +++ b/docs/AssetsApi.md @@ -0,0 +1,1498 @@ +# plane.AssetsApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_generic_asset_upload**](AssetsApi.md#create_generic_asset_upload) | **POST** /workspaces/{slug}/assets/ | Create Assets +[**create_generic_asset_upload2**](AssetsApi.md#create_generic_asset_upload2) | **POST** /workspaces/{slug}/assets/{asset_id}/ | Create Assets +[**create_user_asset_upload**](AssetsApi.md#create_user_asset_upload) | **POST** /assets/user-assets/ | Create User Assets +[**create_user_asset_upload2**](AssetsApi.md#create_user_asset_upload2) | **POST** /assets/user-assets/{asset_id}/ | Create User Assets +[**create_user_server_asset_upload**](AssetsApi.md#create_user_server_asset_upload) | **POST** /assets/user-assets/server/ | Create Server +[**create_user_server_asset_upload2**](AssetsApi.md#create_user_server_asset_upload2) | **POST** /assets/user-assets/{asset_id}/server/ | Create Server +[**delete_user_asset**](AssetsApi.md#delete_user_asset) | **DELETE** /assets/user-assets/ | Delete User Assets +[**delete_user_asset2**](AssetsApi.md#delete_user_asset2) | **DELETE** /assets/user-assets/{asset_id}/ | Delete User Assets +[**delete_user_server_asset**](AssetsApi.md#delete_user_server_asset) | **DELETE** /assets/user-assets/server/ | Delete Server +[**delete_user_server_asset2**](AssetsApi.md#delete_user_server_asset2) | **DELETE** /assets/user-assets/{asset_id}/server/ | Delete Server +[**get_generic_asset**](AssetsApi.md#get_generic_asset) | **GET** /workspaces/{slug}/assets/ | Retrieve Assets +[**get_generic_asset2**](AssetsApi.md#get_generic_asset2) | **GET** /workspaces/{slug}/assets/{asset_id}/ | Retrieve Assets +[**update_generic_asset**](AssetsApi.md#update_generic_asset) | **PATCH** /workspaces/{slug}/assets/ | Update Assets +[**update_generic_asset2**](AssetsApi.md#update_generic_asset2) | **PATCH** /workspaces/{slug}/assets/{asset_id}/ | Update Assets +[**update_user_asset**](AssetsApi.md#update_user_asset) | **PATCH** /assets/user-assets/ | Update User Assets +[**update_user_asset2**](AssetsApi.md#update_user_asset2) | **PATCH** /assets/user-assets/{asset_id}/ | Update User Assets +[**update_user_server_asset**](AssetsApi.md#update_user_server_asset) | **PATCH** /assets/user-assets/server/ | Update Server +[**update_user_server_asset2**](AssetsApi.md#update_user_server_asset2) | **PATCH** /assets/user-assets/{asset_id}/server/ | Update Server + + +# **create_generic_asset_upload** +> create_generic_asset_upload(slug, generic_asset_upload) + +Create Assets + +Generate presigned URL for generic asset upload. + +Create a presigned URL for uploading generic assets that can be bound to entities like issues. +Supports various file types and includes external source tracking for integrations. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.generic_asset_upload import GenericAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + slug = 'my-workspace' # str | Workspace slug identifier + generic_asset_upload = plane.GenericAssetUpload() # GenericAssetUpload | + + try: + # Create Assets + api_instance.create_generic_asset_upload(slug, generic_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_generic_asset_upload: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **slug** | **str**| Workspace slug identifier | + **generic_asset_upload** | [**GenericAssetUpload**](GenericAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error | - | +**404** | The requested resource was not found. | - | +**409** | Asset with same external ID already exists | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_generic_asset_upload2** +> create_generic_asset_upload2(asset_id, slug, generic_asset_upload) + +Create Assets + +Generate presigned URL for generic asset upload. + +Create a presigned URL for uploading generic assets that can be bound to entities like issues. +Supports various file types and includes external source tracking for integrations. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.generic_asset_upload import GenericAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | + slug = 'my-workspace' # str | Workspace slug identifier + generic_asset_upload = plane.GenericAssetUpload() # GenericAssetUpload | + + try: + # Create Assets + api_instance.create_generic_asset_upload2(asset_id, slug, generic_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_generic_asset_upload2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| | + **slug** | **str**| Workspace slug identifier | + **generic_asset_upload** | [**GenericAssetUpload**](GenericAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error | - | +**404** | The requested resource was not found. | - | +**409** | Asset with same external ID already exists | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_user_asset_upload** +> create_user_asset_upload(user_asset_upload) + +Create User Assets + +Generate presigned URL for user asset upload. + +Create a presigned URL for uploading user profile assets (avatar or cover image). +This endpoint generates the necessary credentials for direct S3 upload. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_asset_upload import UserAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + user_asset_upload = plane.UserAssetUpload() # UserAssetUpload | + + try: + # Create User Assets + api_instance.create_user_asset_upload(user_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_user_asset_upload: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_asset_upload** | [**UserAssetUpload**](UserAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error occurred with the provided data. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_user_asset_upload2** +> create_user_asset_upload2(asset_id, user_asset_upload) + +Create User Assets + +Generate presigned URL for user asset upload. + +Create a presigned URL for uploading user profile assets (avatar or cover image). +This endpoint generates the necessary credentials for direct S3 upload. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_asset_upload import UserAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | + user_asset_upload = plane.UserAssetUpload() # UserAssetUpload | + + try: + # Create User Assets + api_instance.create_user_asset_upload2(asset_id, user_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_user_asset_upload2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| | + **user_asset_upload** | [**UserAssetUpload**](UserAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error occurred with the provided data. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_user_server_asset_upload** +> create_user_server_asset_upload(user_asset_upload) + +Create Server + +Generate presigned URL for user server asset upload. + +Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. +This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_asset_upload import UserAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + user_asset_upload = plane.UserAssetUpload() # UserAssetUpload | + + try: + # Create Server + api_instance.create_user_server_asset_upload(user_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_user_server_asset_upload: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_asset_upload** | [**UserAssetUpload**](UserAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error occurred with the provided data. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_user_server_asset_upload2** +> create_user_server_asset_upload2(asset_id, user_asset_upload) + +Create Server + +Generate presigned URL for user server asset upload. + +Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. +This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_asset_upload import UserAssetUpload +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | + user_asset_upload = plane.UserAssetUpload() # UserAssetUpload | + + try: + # Create Server + api_instance.create_user_server_asset_upload2(asset_id, user_asset_upload) + except Exception as e: + print("Exception when calling AssetsApi->create_user_server_asset_upload2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| | + **user_asset_upload** | [**UserAssetUpload**](UserAssetUpload.md)| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned URL generated successfully | - | +**400** | Validation error occurred with the provided data. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user_asset** +> delete_user_asset(asset_id) + +Delete User Assets + +Delete user asset. + +Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. +This performs a soft delete by marking the asset as deleted and updating the user's profile. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + + try: + # Delete User Assets + api_instance.delete_user_asset(asset_id) + except Exception as e: + print("Exception when calling AssetsApi->delete_user_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset deleted successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user_asset2** +> delete_user_asset2(asset_id) + +Delete User Assets + +Delete user asset. + +Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. +This performs a soft delete by marking the asset as deleted and updating the user's profile. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + + try: + # Delete User Assets + api_instance.delete_user_asset2(asset_id) + except Exception as e: + print("Exception when calling AssetsApi->delete_user_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset deleted successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user_server_asset** +> delete_user_server_asset(asset_id) + +Delete Server + +Delete user server asset. + +Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. +This performs a soft delete by marking the asset as deleted and updating the user's profile. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + + try: + # Delete Server + api_instance.delete_user_server_asset(asset_id) + except Exception as e: + print("Exception when calling AssetsApi->delete_user_server_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset deleted successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user_server_asset2** +> delete_user_server_asset2(asset_id) + +Delete Server + +Delete user server asset. + +Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. +This performs a soft delete by marking the asset as deleted and updating the user's profile. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + + try: + # Delete Server + api_instance.delete_user_server_asset2(asset_id) + except Exception as e: + print("Exception when calling AssetsApi->delete_user_server_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset deleted successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_generic_asset** +> get_generic_asset(asset_id, slug) + +Retrieve Assets + +Get presigned URL for asset download. + +Generate a presigned URL for downloading a generic asset. +The asset must be uploaded and associated with the specified workspace. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + slug = 'my-workspace' # str | Workspace slug identifier + + try: + # Retrieve Assets + api_instance.get_generic_asset(asset_id, slug) + except Exception as e: + print("Exception when calling AssetsApi->get_generic_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **slug** | **str**| Workspace slug identifier | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned download URL generated successfully | - | +**400** | Bad request | - | +**404** | Asset not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_generic_asset2** +> get_generic_asset2(asset_id, slug) + +Retrieve Assets + +Get presigned URL for asset download. + +Generate a presigned URL for downloading a generic asset. +The asset must be uploaded and associated with the specified workspace. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + slug = 'my-workspace' # str | Workspace slug identifier + + try: + # Retrieve Assets + api_instance.get_generic_asset2(asset_id, slug) + except Exception as e: + print("Exception when calling AssetsApi->get_generic_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **slug** | **str**| Workspace slug identifier | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned download URL generated successfully | - | +**400** | Bad request | - | +**404** | Asset not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_generic_asset** +> update_generic_asset(asset_id, slug, patched_generic_asset_update=patched_generic_asset_update) + +Update Assets + +Update generic asset after upload completion. + +Update the asset status after the file has been uploaded to S3. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded +and trigger metadata extraction. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + slug = 'my-workspace' # str | Workspace slug identifier + patched_generic_asset_update = plane.PatchedGenericAssetUpdate() # PatchedGenericAssetUpdate | (optional) + + try: + # Update Assets + api_instance.update_generic_asset(asset_id, slug, patched_generic_asset_update=patched_generic_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_generic_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **slug** | **str**| Workspace slug identifier | + **patched_generic_asset_update** | [**PatchedGenericAssetUpdate**](PatchedGenericAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | Asset not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_generic_asset2** +> update_generic_asset2(asset_id, slug, patched_generic_asset_update=patched_generic_asset_update) + +Update Assets + +Update generic asset after upload completion. + +Update the asset status after the file has been uploaded to S3. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded +and trigger metadata extraction. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + slug = 'my-workspace' # str | Workspace slug identifier + patched_generic_asset_update = plane.PatchedGenericAssetUpdate() # PatchedGenericAssetUpdate | (optional) + + try: + # Update Assets + api_instance.update_generic_asset2(asset_id, slug, patched_generic_asset_update=patched_generic_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_generic_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **slug** | **str**| Workspace slug identifier | + **patched_generic_asset_update** | [**PatchedGenericAssetUpdate**](PatchedGenericAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | Asset not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user_asset** +> update_user_asset(asset_id, patched_asset_update=patched_asset_update) + +Update User Assets + +Update user asset after upload completion. + +Update the asset status and attributes after the file has been uploaded to S3. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + patched_asset_update = plane.PatchedAssetUpdate() # PatchedAssetUpdate | (optional) + + try: + # Update User Assets + api_instance.update_user_asset(asset_id, patched_asset_update=patched_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_user_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **patched_asset_update** | [**PatchedAssetUpdate**](PatchedAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user_asset2** +> update_user_asset2(asset_id, patched_asset_update=patched_asset_update) + +Update User Assets + +Update user asset after upload completion. + +Update the asset status and attributes after the file has been uploaded to S3. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + patched_asset_update = plane.PatchedAssetUpdate() # PatchedAssetUpdate | (optional) + + try: + # Update User Assets + api_instance.update_user_asset2(asset_id, patched_asset_update=patched_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_user_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **patched_asset_update** | [**PatchedAssetUpdate**](PatchedAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user_server_asset** +> update_user_server_asset(asset_id, patched_asset_update=patched_asset_update) + +Update Server + +Update user server asset after upload completion. + +Update the asset status and attributes after the file has been uploaded to S3 using server credentials. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + patched_asset_update = plane.PatchedAssetUpdate() # PatchedAssetUpdate | (optional) + + try: + # Update Server + api_instance.update_user_server_asset(asset_id, patched_asset_update=patched_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_user_server_asset: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **patched_asset_update** | [**PatchedAssetUpdate**](PatchedAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user_server_asset2** +> update_user_server_asset2(asset_id, patched_asset_update=patched_asset_update) + +Update Server + +Update user server asset after upload completion. + +Update the asset status and attributes after the file has been uploaded to S3 using server credentials. +This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.AssetsApi(api_client) + asset_id = 'asset_id_example' # str | UUID of the asset + patched_asset_update = plane.PatchedAssetUpdate() # PatchedAssetUpdate | (optional) + + try: + # Update Server + api_instance.update_user_server_asset2(asset_id, patched_asset_update=patched_asset_update) + except Exception as e: + print("Exception when calling AssetsApi->update_user_server_asset2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **asset_id** | **str**| UUID of the asset | + **patched_asset_update** | [**PatchedAssetUpdate**](PatchedAssetUpdate.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Asset updated successfully | - | +**404** | The requested resource was not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/CreateCycleRequest.md b/docs/CreateCycleRequest.md new file mode 100644 index 0000000..1786c84 --- /dev/null +++ b/docs/CreateCycleRequest.md @@ -0,0 +1,31 @@ +# CreateCycleRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Cycle Name | +**description** | **str** | Cycle Description | [optional] +**start_date** | **datetime** | Start Date | [optional] +**end_date** | **datetime** | End Date | [optional] + +## Example + +```python +from plane.models.create_cycle_request import CreateCycleRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateCycleRequest from a JSON string +create_cycle_request_instance = CreateCycleRequest.from_json(json) +# print the JSON string representation of the object +print CreateCycleRequest.to_json() + +# convert the object into a dict +create_cycle_request_dict = create_cycle_request_instance.to_dict() +# create an instance of CreateCycleRequest from a dict +create_cycle_request_from_dict = CreateCycleRequest.from_dict(create_cycle_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateIntakeIssueRequest.md b/docs/CreateIntakeIssueRequest.md new file mode 100644 index 0000000..6b3eb7f --- /dev/null +++ b/docs/CreateIntakeIssueRequest.md @@ -0,0 +1,28 @@ +# CreateIntakeIssueRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**issue** | [**CreateIntakeIssueRequestIssue**](CreateIntakeIssueRequestIssue.md) | | [optional] + +## Example + +```python +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateIntakeIssueRequest from a JSON string +create_intake_issue_request_instance = CreateIntakeIssueRequest.from_json(json) +# print the JSON string representation of the object +print CreateIntakeIssueRequest.to_json() + +# convert the object into a dict +create_intake_issue_request_dict = create_intake_issue_request_instance.to_dict() +# create an instance of CreateIntakeIssueRequest from a dict +create_intake_issue_request_from_dict = CreateIntakeIssueRequest.from_dict(create_intake_issue_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateIntakeIssueRequestIssue.md b/docs/CreateIntakeIssueRequestIssue.md new file mode 100644 index 0000000..857394a --- /dev/null +++ b/docs/CreateIntakeIssueRequestIssue.md @@ -0,0 +1,28 @@ +# CreateIntakeIssueRequestIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**issue** | [**CreateIntakeIssueRequestIssueIssue**](CreateIntakeIssueRequestIssueIssue.md) | | [optional] + +## Example + +```python +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateIntakeIssueRequestIssue from a JSON string +create_intake_issue_request_issue_instance = CreateIntakeIssueRequestIssue.from_json(json) +# print the JSON string representation of the object +print CreateIntakeIssueRequestIssue.to_json() + +# convert the object into a dict +create_intake_issue_request_issue_dict = create_intake_issue_request_issue_instance.to_dict() +# create an instance of CreateIntakeIssueRequestIssue from a dict +create_intake_issue_request_issue_from_dict = CreateIntakeIssueRequestIssue.from_dict(create_intake_issue_request_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateIntakeIssueRequestIssueIssue.md b/docs/CreateIntakeIssueRequestIssueIssue.md new file mode 100644 index 0000000..34c984f --- /dev/null +++ b/docs/CreateIntakeIssueRequestIssueIssue.md @@ -0,0 +1,30 @@ +# CreateIntakeIssueRequestIssueIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Issue name | [optional] +**description_html** | **str** | Issue description HTML | [optional] +**priority** | **str** | Issue priority | [optional] + +## Example + +```python +from plane.models.create_intake_issue_request_issue_issue import CreateIntakeIssueRequestIssueIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateIntakeIssueRequestIssueIssue from a JSON string +create_intake_issue_request_issue_issue_instance = CreateIntakeIssueRequestIssueIssue.from_json(json) +# print the JSON string representation of the object +print CreateIntakeIssueRequestIssueIssue.to_json() + +# convert the object into a dict +create_intake_issue_request_issue_issue_dict = create_intake_issue_request_issue_issue_instance.to_dict() +# create an instance of CreateIntakeIssueRequestIssueIssue from a dict +create_intake_issue_request_issue_issue_from_dict = CreateIntakeIssueRequestIssueIssue.from_dict(create_intake_issue_request_issue_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateIssueCommentRequest.md b/docs/CreateIssueCommentRequest.md new file mode 100644 index 0000000..8f0670f --- /dev/null +++ b/docs/CreateIssueCommentRequest.md @@ -0,0 +1,28 @@ +# CreateIssueCommentRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**comment_html** | **str** | | + +## Example + +```python +from plane.models.create_issue_comment_request import CreateIssueCommentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateIssueCommentRequest from a JSON string +create_issue_comment_request_instance = CreateIssueCommentRequest.from_json(json) +# print the JSON string representation of the object +print CreateIssueCommentRequest.to_json() + +# convert the object into a dict +create_issue_comment_request_dict = create_issue_comment_request_instance.to_dict() +# create an instance of CreateIssueCommentRequest from a dict +create_issue_comment_request_from_dict = CreateIssueCommentRequest.from_dict(create_issue_comment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateIssueLinkRequest.md b/docs/CreateIssueLinkRequest.md new file mode 100644 index 0000000..9ae54e9 --- /dev/null +++ b/docs/CreateIssueLinkRequest.md @@ -0,0 +1,30 @@ +# CreateIssueLinkRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**url** | **str** | | +**title** | **str** | | +**metadata** | **object** | | + +## Example + +```python +from plane.models.create_issue_link_request import CreateIssueLinkRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateIssueLinkRequest from a JSON string +create_issue_link_request_instance = CreateIssueLinkRequest.from_json(json) +# print the JSON string representation of the object +print CreateIssueLinkRequest.to_json() + +# convert the object into a dict +create_issue_link_request_dict = create_issue_link_request_instance.to_dict() +# create an instance of CreateIssueLinkRequest from a dict +create_issue_link_request_from_dict = CreateIssueLinkRequest.from_dict(create_issue_link_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateLabelRequest.md b/docs/CreateLabelRequest.md new file mode 100644 index 0000000..d25f116 --- /dev/null +++ b/docs/CreateLabelRequest.md @@ -0,0 +1,30 @@ +# CreateLabelRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**color** | **str** | | +**description** | **str** | | + +## Example + +```python +from plane.models.create_label_request import CreateLabelRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateLabelRequest from a JSON string +create_label_request_instance = CreateLabelRequest.from_json(json) +# print the JSON string representation of the object +print CreateLabelRequest.to_json() + +# convert the object into a dict +create_label_request_dict = create_label_request_instance.to_dict() +# create an instance of CreateLabelRequest from a dict +create_label_request_from_dict = CreateLabelRequest.from_dict(create_label_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateModuleRequest.md b/docs/CreateModuleRequest.md new file mode 100644 index 0000000..1ebc364 --- /dev/null +++ b/docs/CreateModuleRequest.md @@ -0,0 +1,34 @@ +# CreateModuleRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Module name | [optional] +**description** | **str** | Module description | [optional] +**start_date** | **datetime** | Start date | [optional] +**target_date** | **datetime** | Target date | [optional] +**status** | **str** | Module status | [optional] +**lead** | **str** | Lead user ID | [optional] +**members** | **List[str]** | | [optional] + +## Example + +```python +from plane.models.create_module_request import CreateModuleRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateModuleRequest from a JSON string +create_module_request_instance = CreateModuleRequest.from_json(json) +# print the JSON string representation of the object +print CreateModuleRequest.to_json() + +# convert the object into a dict +create_module_request_dict = create_module_request_instance.to_dict() +# create an instance of CreateModuleRequest from a dict +create_module_request_from_dict = CreateModuleRequest.from_dict(create_module_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateProjectRequest.md b/docs/CreateProjectRequest.md new file mode 100644 index 0000000..96e8d3a --- /dev/null +++ b/docs/CreateProjectRequest.md @@ -0,0 +1,37 @@ +# CreateProjectRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Project name | [optional] +**identifier** | **str** | Project identifier | [optional] +**description** | **str** | Project description | [optional] +**project_lead** | **str** | Project lead | [optional] +**intake_view** | **bool** | Intake view | [optional] +**module_view** | **bool** | Module view | [optional] +**cycle_view** | **bool** | Cycle view | [optional] +**issue_views_view** | **bool** | Issue views view | [optional] +**page_view** | **bool** | Page view | [optional] +**network** | **int** | Network | [optional] + +## Example + +```python +from plane.models.create_project_request import CreateProjectRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateProjectRequest from a JSON string +create_project_request_instance = CreateProjectRequest.from_json(json) +# print the JSON string representation of the object +print CreateProjectRequest.to_json() + +# convert the object into a dict +create_project_request_dict = create_project_request_instance.to_dict() +# create an instance of CreateProjectRequest from a dict +create_project_request_from_dict = CreateProjectRequest.from_dict(create_project_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateStateRequest.md b/docs/CreateStateRequest.md new file mode 100644 index 0000000..7ec9b4e --- /dev/null +++ b/docs/CreateStateRequest.md @@ -0,0 +1,32 @@ +# CreateStateRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | State name | [optional] +**description** | **str** | State description | [optional] +**color** | **str** | State color | [optional] +**group** | **str** | State group | [optional] +**default** | **bool** | Default state | [optional] + +## Example + +```python +from plane.models.create_state_request import CreateStateRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateStateRequest from a JSON string +create_state_request_instance = CreateStateRequest.from_json(json) +# print the JSON string representation of the object +print CreateStateRequest.to_json() + +# convert the object into a dict +create_state_request_dict = create_state_request_instance.to_dict() +# create an instance of CreateStateRequest from a dict +create_state_request_from_dict = CreateStateRequest.from_dict(create_state_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Cycle.md b/docs/Cycle.md new file mode 100644 index 0000000..7b776be --- /dev/null +++ b/docs/Cycle.md @@ -0,0 +1,58 @@ +# Cycle + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**total_issues** | **int** | | [readonly] +**cancelled_issues** | **int** | | [readonly] +**completed_issues** | **int** | | [readonly] +**started_issues** | **int** | | [readonly] +**unstarted_issues** | **int** | | [readonly] +**backlog_issues** | **int** | | [readonly] +**total_estimates** | **float** | | [readonly] +**completed_estimates** | **float** | | [readonly] +**started_estimates** | **float** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [readonly] +**name** | **str** | | +**description** | **str** | | [optional] +**start_date** | **datetime** | | [optional] +**end_date** | **datetime** | | [optional] +**view_props** | **object** | | [optional] +**sort_order** | **float** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**progress_snapshot** | **object** | | [optional] +**archived_at** | **datetime** | | [optional] +**logo_props** | **object** | | [optional] +**timezone** | **str** | * `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu | [optional] +**version** | **int** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**owned_by** | **str** | | [readonly] + +## Example + +```python +from plane.models.cycle import Cycle + +# TODO update the JSON string below +json = "{}" +# create an instance of Cycle from a JSON string +cycle_instance = Cycle.from_json(json) +# print the JSON string representation of the object +print Cycle.to_json() + +# convert the object into a dict +cycle_dict = cycle_instance.to_dict() +# create an instance of Cycle from a dict +cycle_from_dict = Cycle.from_dict(cycle_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CycleIssue.md b/docs/CycleIssue.md new file mode 100644 index 0000000..b44d64f --- /dev/null +++ b/docs/CycleIssue.md @@ -0,0 +1,38 @@ +# CycleIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**sub_issues_count** | **int** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [optional] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**issue** | **str** | | +**cycle** | **str** | | [readonly] + +## Example + +```python +from plane.models.cycle_issue import CycleIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of CycleIssue from a JSON string +cycle_issue_instance = CycleIssue.from_json(json) +# print the JSON string representation of the object +print CycleIssue.to_json() + +# convert the object into a dict +cycle_issue_dict = cycle_issue_instance.to_dict() +# create an instance of CycleIssue from a dict +cycle_issue_from_dict = CycleIssue.from_dict(cycle_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CycleLite.md b/docs/CycleLite.md new file mode 100644 index 0000000..70de722 --- /dev/null +++ b/docs/CycleLite.md @@ -0,0 +1,49 @@ +# CycleLite + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**name** | **str** | | +**description** | **str** | | [optional] +**start_date** | **datetime** | | [optional] +**end_date** | **datetime** | | [optional] +**view_props** | **object** | | [optional] +**sort_order** | **float** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**progress_snapshot** | **object** | | [optional] +**archived_at** | **datetime** | | [optional] +**logo_props** | **object** | | [optional] +**timezone** | **str** | * `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu | [optional] +**version** | **int** | | [optional] +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [optional] +**project** | **str** | | +**workspace** | **str** | | +**owned_by** | **str** | | + +## Example + +```python +from plane.models.cycle_lite import CycleLite + +# TODO update the JSON string below +json = "{}" +# create an instance of CycleLite from a JSON string +cycle_lite_instance = CycleLite.from_json(json) +# print the JSON string representation of the object +print CycleLite.to_json() + +# convert the object into a dict +cycle_lite_dict = cycle_lite_instance.to_dict() +# create an instance of CycleLite from a dict +cycle_lite_from_dict = CycleLite.from_dict(cycle_lite_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CyclesApi.md b/docs/CyclesApi.md new file mode 100644 index 0000000..b71ba58 --- /dev/null +++ b/docs/CyclesApi.md @@ -0,0 +1,1109 @@ +# plane.CyclesApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**add_cycle_issues**](CyclesApi.md#add_cycle_issues) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/ | Add cycle issues +[**archive_cycle**](CyclesApi.md#archive_cycle) | **POST** /workspaces/{slug}/projects/{project_id}/archived-cycles/ | Archive cycle +[**archive_cycle2**](CyclesApi.md#archive_cycle2) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/ | Archive cycle +[**create_cycle**](CyclesApi.md#create_cycle) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/ | Create cycle +[**delete_cycle**](CyclesApi.md#delete_cycle) | **DELETE** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Delete cycle +[**delete_cycle_issue**](CyclesApi.md#delete_cycle_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/ | Delete cycle issue +[**get_cycle_issues**](CyclesApi.md#get_cycle_issues) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/ | Get cycle issues +[**get_cycle_issues2**](CyclesApi.md#get_cycle_issues2) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/ | Get cycle issues +[**get_cycles**](CyclesApi.md#get_cycles) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/ | Get cycles +[**get_cycles2**](CyclesApi.md#get_cycles2) | **GET** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Get cycles +[**transfer_cycle_issues**](CyclesApi.md#transfer_cycle_issues) | **POST** /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/ | Transfer issues to a new cycle +[**unarchive_cycle**](CyclesApi.md#unarchive_cycle) | **DELETE** /workspaces/{slug}/projects/{project_id}/archived-cycles/{id}/unarchive/ | Unarchive cycle +[**update_cycle**](CyclesApi.md#update_cycle) | **PATCH** /workspaces/{slug}/projects/{project_id}/cycles/{id}/ | Update cycle + + +# **add_cycle_issues** +> CycleIssue add_cycle_issues(cycle_id, project_id, slug, add_cycle_issues_request=add_cycle_issues_request) + +Add cycle issues + +Add cycle issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.cycle_issue import CycleIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + add_cycle_issues_request = plane.AddCycleIssuesRequest() # AddCycleIssuesRequest | (optional) + + try: + # Add cycle issues + api_response = api_instance.add_cycle_issues(cycle_id, project_id, slug, add_cycle_issues_request=add_cycle_issues_request) + print("The response of CyclesApi->add_cycle_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->add_cycle_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **add_cycle_issues_request** | [**AddCycleIssuesRequest**](AddCycleIssuesRequest.md)| | [optional] + +### Return type + +[**CycleIssue**](CycleIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Cycle issues added | - | +**400** | Issues are required | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **archive_cycle** +> archive_cycle(project_id, slug) + +Archive cycle + +Archive cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Archive cycle + api_instance.archive_cycle(project_id, slug) + except Exception as e: + print("Exception when calling CyclesApi->archive_cycle: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Cycle archived | - | +**400** | Cycle cannot be archived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **archive_cycle2** +> archive_cycle2(cycle_id, project_id, slug) + +Archive cycle + +Archive cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Archive cycle + api_instance.archive_cycle2(cycle_id, project_id, slug) + except Exception as e: + print("Exception when calling CyclesApi->archive_cycle2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Cycle archived | - | +**400** | Cycle cannot be archived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_cycle** +> Cycle create_cycle(project_id, slug, create_cycle_request=create_cycle_request) + +Create cycle + +Create cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_cycle_request import CreateCycleRequest +from plane.models.cycle import Cycle +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_cycle_request = plane.CreateCycleRequest() # CreateCycleRequest | (optional) + + try: + # Create cycle + api_response = api_instance.create_cycle(project_id, slug, create_cycle_request=create_cycle_request) + print("The response of CyclesApi->create_cycle:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->create_cycle: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **create_cycle_request** | [**CreateCycleRequest**](CreateCycleRequest.md)| | [optional] + +### Return type + +[**Cycle**](Cycle.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Cycle created | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_cycle** +> delete_cycle(id, project_id, slug) + +Delete cycle + +Delete cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete cycle + api_instance.delete_cycle(id, project_id, slug) + except Exception as e: + print("Exception when calling CyclesApi->delete_cycle: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Cycle deleted | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_cycle_issue** +> delete_cycle_issue(cycle_id, issue_id, project_id, slug) + +Delete cycle issue + +Delete cycle issue + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete cycle issue + api_instance.delete_cycle_issue(cycle_id, issue_id, project_id, slug) + except Exception as e: + print("Exception when calling CyclesApi->delete_cycle_issue: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| | + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No response body | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_cycle_issues** +> CycleIssue get_cycle_issues(cycle_id, project_id, slug) + +Get cycle issues + +Get cycle issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.cycle_issue import CycleIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get cycle issues + api_response = api_instance.get_cycle_issues(cycle_id, project_id, slug) + print("The response of CyclesApi->get_cycle_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->get_cycle_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**CycleIssue**](CycleIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_cycle_issues2** +> CycleIssue get_cycle_issues2(cycle_id, issue_id, project_id, slug) + +Get cycle issues + +Get cycle issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.cycle_issue import CycleIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get cycle issues + api_response = api_instance.get_cycle_issues2(cycle_id, issue_id, project_id, slug) + print("The response of CyclesApi->get_cycle_issues2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->get_cycle_issues2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| | + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**CycleIssue**](CycleIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_cycles** +> Cycle get_cycles(project_id, slug) + +Get cycles + +Get cycles + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.cycle import Cycle +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get cycles + api_response = api_instance.get_cycles(project_id, slug) + print("The response of CyclesApi->get_cycles:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->get_cycles: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Cycle**](Cycle.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Cycles | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_cycles2** +> Cycle get_cycles2(id, project_id, slug) + +Get cycles + +Get cycles + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.cycle import Cycle +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get cycles + api_response = api_instance.get_cycles2(id, project_id, slug) + print("The response of CyclesApi->get_cycles2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->get_cycles2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Cycle**](Cycle.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Cycles | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **transfer_cycle_issues** +> TransferCycleIssues200Response transfer_cycle_issues(cycle_id, project_id, slug, request_body=request_body) + +Transfer issues to a new cycle + +Transfer issues from the current cycle to a new cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + cycle_id = 'cycle_id_example' # str | Cycle ID + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + request_body = None # Dict[str, object] | (optional) + + try: + # Transfer issues to a new cycle + api_response = api_instance.transfer_cycle_issues(cycle_id, project_id, slug, request_body=request_body) + print("The response of CyclesApi->transfer_cycle_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->transfer_cycle_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **cycle_id** | **str**| Cycle ID | + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + **request_body** | [**Dict[str, object]**](object.md)| | [optional] + +### Return type + +[**TransferCycleIssues200Response**](TransferCycleIssues200Response.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: type, required, properties + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issues transferred successfully | - | +**400** | Bad request | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **unarchive_cycle** +> unarchive_cycle(id, project_id, slug) + +Unarchive cycle + +Unarchive cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Unarchive cycle + api_instance.unarchive_cycle(id, project_id, slug) + except Exception as e: + print("Exception when calling CyclesApi->unarchive_cycle: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Cycle unarchived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Cycle not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_cycle** +> Cycle update_cycle(id, project_id, slug, update_cycle_request=update_cycle_request) + +Update cycle + +Update cycle + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.cycle import Cycle +from plane.models.update_cycle_request import UpdateCycleRequest +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.CyclesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + update_cycle_request = plane.UpdateCycleRequest() # UpdateCycleRequest | (optional) + + try: + # Update cycle + api_response = api_instance.update_cycle(id, project_id, slug, update_cycle_request=update_cycle_request) + print("The response of CyclesApi->update_cycle:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CyclesApi->update_cycle: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **update_cycle_request** | [**UpdateCycleRequest**](UpdateCycleRequest.md)| | [optional] + +### Return type + +[**Cycle**](Cycle.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Cycle updated | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/GeneralApi.md b/docs/GeneralApi.md new file mode 100644 index 0000000..2d6646c --- /dev/null +++ b/docs/GeneralApi.md @@ -0,0 +1,178 @@ +# plane.GeneralApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**search_issues**](GeneralApi.md#search_issues) | **GET** /workspaces/{slug}/issues/search/ | Search issues +[**workspaces_issues_retrieve**](GeneralApi.md#workspaces_issues_retrieve) | **GET** /workspaces/{slug}/issues/{project__identifier}-{issue__identifier}/ | Retrieve Issues + + +# **search_issues** +> SearchIssues200Response search_issues(search, slug, limit=limit, project_id=project_id, workspace_search=workspace_search) + +Search issues + +Search issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.search_issues200_response import SearchIssues200Response +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.GeneralApi(api_client) + search = 'search_example' # str | Search query + slug = 'slug_example' # str | Workspace slug + limit = 56 # int | Limit (optional) + project_id = 'project_id_example' # str | Project ID (optional) + workspace_search = 'workspace_search_example' # str | Workspace search (optional) + + try: + # Search issues + api_response = api_instance.search_issues(search, slug, limit=limit, project_id=project_id, workspace_search=workspace_search) + print("The response of GeneralApi->search_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeneralApi->search_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **search** | **str**| Search query | + **slug** | **str**| Workspace slug | + **limit** | **int**| Limit | [optional] + **project_id** | **str**| Project ID | [optional] + **workspace_search** | **str**| Workspace search | [optional] + +### Return type + +[**SearchIssues200Response**](SearchIssues200Response.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issues | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **workspaces_issues_retrieve** +> Issue workspaces_issues_retrieve(issue__identifier, project__identifier, slug) + +Retrieve Issues + +This viewset provides `retrieveByIssueId` on workspace level + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.GeneralApi(api_client) + issue__identifier = 'issue__identifier_example' # str | + project__identifier = 'project__identifier_example' # str | + slug = 'slug_example' # str | + + try: + # Retrieve Issues + api_response = api_instance.workspaces_issues_retrieve(issue__identifier, project__identifier, slug) + print("The response of GeneralApi->workspaces_issues_retrieve:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeneralApi->workspaces_issues_retrieve: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue__identifier** | **str**| | + **project__identifier** | **str**| | + **slug** | **str**| | + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/GenericAssetUpload.md b/docs/GenericAssetUpload.md new file mode 100644 index 0000000..0ec81d6 --- /dev/null +++ b/docs/GenericAssetUpload.md @@ -0,0 +1,34 @@ +# GenericAssetUpload + +Serializer for generic asset upload requests + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Original filename of the asset | +**type** | **str** | MIME type of the file | [optional] +**size** | **int** | File size in bytes | +**project_id** | **str** | UUID of the project to associate with the asset | [optional] +**external_id** | **str** | External identifier for the asset (for integration tracking) | [optional] +**external_source** | **str** | External source system (for integration tracking) | [optional] + +## Example + +```python +from plane.models.generic_asset_upload import GenericAssetUpload + +# TODO update the JSON string below +json = "{}" +# create an instance of GenericAssetUpload from a JSON string +generic_asset_upload_instance = GenericAssetUpload.from_json(json) +# print the JSON string representation of the object +print GenericAssetUpload.to_json() + +# convert the object into a dict +generic_asset_upload_dict = generic_asset_upload_instance.to_dict() +# create an instance of GenericAssetUpload from a dict +generic_asset_upload_from_dict = GenericAssetUpload.from_dict(generic_asset_upload_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetIssueAttachment2Request.md b/docs/GetIssueAttachment2Request.md new file mode 100644 index 0000000..ad17b9b --- /dev/null +++ b/docs/GetIssueAttachment2Request.md @@ -0,0 +1,32 @@ +# GetIssueAttachment2Request + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Original filename of the asset | [optional] +**type** | **str** | MIME type of the file | [optional] +**size** | **int** | File size in bytes | [optional] +**external_id** | **str** | External identifier for the asset (for integration tracking) | [optional] +**external_source** | **str** | External source system (for integration tracking) | [optional] + +## Example + +```python +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request + +# TODO update the JSON string below +json = "{}" +# create an instance of GetIssueAttachment2Request from a JSON string +get_issue_attachment2_request_instance = GetIssueAttachment2Request.from_json(json) +# print the JSON string representation of the object +print GetIssueAttachment2Request.to_json() + +# convert the object into a dict +get_issue_attachment2_request_dict = get_issue_attachment2_request_instance.to_dict() +# create an instance of GetIssueAttachment2Request from a dict +get_issue_attachment2_request_from_dict = GetIssueAttachment2Request.from_dict(get_issue_attachment2_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetWorkspaceMembers200ResponseInner.md b/docs/GetWorkspaceMembers200ResponseInner.md new file mode 100644 index 0000000..c03bff1 --- /dev/null +++ b/docs/GetWorkspaceMembers200ResponseInner.md @@ -0,0 +1,35 @@ +# GetWorkspaceMembers200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**first_name** | **str** | | [readonly] +**last_name** | **str** | | [readonly] +**email** | **str** | | [readonly] +**avatar** | **str** | | [optional] [readonly] +**avatar_url** | **str** | Avatar URL | [optional] [readonly] +**display_name** | **str** | | [readonly] +**role** | **int** | Member role in the workspace | [optional] + +## Example + +```python +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of GetWorkspaceMembers200ResponseInner from a JSON string +get_workspace_members200_response_inner_instance = GetWorkspaceMembers200ResponseInner.from_json(json) +# print the JSON string representation of the object +print GetWorkspaceMembers200ResponseInner.to_json() + +# convert the object into a dict +get_workspace_members200_response_inner_dict = get_workspace_members200_response_inner_instance.to_dict() +# create an instance of GetWorkspaceMembers200ResponseInner from a dict +get_workspace_members200_response_inner_from_dict = GetWorkspaceMembers200ResponseInner.from_dict(get_workspace_members200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IntakeApi.md b/docs/IntakeApi.md new file mode 100644 index 0000000..6efc32a --- /dev/null +++ b/docs/IntakeApi.md @@ -0,0 +1,435 @@ +# plane.IntakeApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_intake_issue**](IntakeApi.md#create_intake_issue) | **POST** /workspaces/{slug}/projects/{project_id}/intake-issues/ | Create intake issue +[**delete_intake_issue**](IntakeApi.md#delete_intake_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Delete intake issue +[**get_intake_issues**](IntakeApi.md#get_intake_issues) | **GET** /workspaces/{slug}/projects/{project_id}/intake-issues/ | Get intake issues +[**get_intake_issues2**](IntakeApi.md#get_intake_issues2) | **GET** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Get intake issues +[**update_intake_issue**](IntakeApi.md#update_intake_issue) | **PATCH** /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/ | Update intake issue + + +# **create_intake_issue** +> IntakeIssue create_intake_issue(project_id, slug, create_intake_issue_request=create_intake_issue_request) + +Create intake issue + +Create intake issue + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest +from plane.models.intake_issue import IntakeIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.IntakeApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_intake_issue_request = plane.CreateIntakeIssueRequest() # CreateIntakeIssueRequest | (optional) + + try: + # Create intake issue + api_response = api_instance.create_intake_issue(project_id, slug, create_intake_issue_request=create_intake_issue_request) + print("The response of IntakeApi->create_intake_issue:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling IntakeApi->create_intake_issue: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **create_intake_issue_request** | [**CreateIntakeIssueRequest**](CreateIntakeIssueRequest.md)| | [optional] + +### Return type + +[**IntakeIssue**](IntakeIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Intake issue created | - | +**400** | Invalid request | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_intake_issue** +> delete_intake_issue(issue_id, project_id, slug) + +Delete intake issue + +Delete intake issue + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.IntakeApi(api_client) + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete intake issue + api_instance.delete_intake_issue(issue_id, project_id, slug) + except Exception as e: + print("Exception when calling IntakeApi->delete_intake_issue: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Intake issue deleted | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Intake issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_intake_issues** +> IntakeIssue get_intake_issues(project_id, slug) + +Get intake issues + +Get intake issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.intake_issue import IntakeIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.IntakeApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get intake issues + api_response = api_instance.get_intake_issues(project_id, slug) + print("The response of IntakeApi->get_intake_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling IntakeApi->get_intake_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**IntakeIssue**](IntakeIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Intake issues | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_intake_issues2** +> IntakeIssue get_intake_issues2(issue_id, project_id, slug) + +Get intake issues + +Get intake issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.intake_issue import IntakeIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.IntakeApi(api_client) + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get intake issues + api_response = api_instance.get_intake_issues2(issue_id, project_id, slug) + print("The response of IntakeApi->get_intake_issues2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling IntakeApi->get_intake_issues2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**IntakeIssue**](IntakeIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Intake issues | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_intake_issue** +> IntakeIssue update_intake_issue(issue_id, project_id, slug, create_intake_issue_request_issue=create_intake_issue_request_issue) + +Update intake issue + +Update intake issue + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue +from plane.models.intake_issue import IntakeIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.IntakeApi(api_client) + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_intake_issue_request_issue = plane.CreateIntakeIssueRequestIssue() # CreateIntakeIssueRequestIssue | (optional) + + try: + # Update intake issue + api_response = api_instance.update_intake_issue(issue_id, project_id, slug, create_intake_issue_request_issue=create_intake_issue_request_issue) + print("The response of IntakeApi->update_intake_issue:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling IntakeApi->update_intake_issue: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **create_intake_issue_request_issue** | [**CreateIntakeIssueRequestIssue**](CreateIntakeIssueRequestIssue.md)| | [optional] + +### Return type + +[**IntakeIssue**](IntakeIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/IntakeIssue.md b/docs/IntakeIssue.md new file mode 100644 index 0000000..aaf8efa --- /dev/null +++ b/docs/IntakeIssue.md @@ -0,0 +1,47 @@ +# IntakeIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**issue_detail** | [**IssueExpand**](IssueExpand.md) | | [readonly] +**inbox** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**status** | **int** | * `-2` - Pending * `-1` - Rejected * `0` - Snoozed * `1` - Accepted * `2` - Duplicate | [optional] +**snoozed_till** | **datetime** | | [optional] +**source** | **str** | | [optional] +**source_email** | **str** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**extra** | **object** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**intake** | **str** | | +**issue** | **str** | | [readonly] +**duplicate_to** | **str** | | [optional] + +## Example + +```python +from plane.models.intake_issue import IntakeIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of IntakeIssue from a JSON string +intake_issue_instance = IntakeIssue.from_json(json) +# print the JSON string representation of the object +print IntakeIssue.to_json() + +# convert the object into a dict +intake_issue_dict = intake_issue_instance.to_dict() +# create an instance of IntakeIssue from a dict +intake_issue_from_dict = IntakeIssue.from_dict(intake_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Issue.md b/docs/Issue.md new file mode 100644 index 0000000..f9872c0 --- /dev/null +++ b/docs/Issue.md @@ -0,0 +1,56 @@ +# Issue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**assignees** | **List[str]** | | [optional] +**labels** | **List[str]** | | [optional] +**type_id** | **str** | | [optional] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**point** | **int** | | [optional] +**name** | **str** | | +**description_html** | **str** | | [optional] +**description_binary** | **bytearray** | | [readonly] +**priority** | **str** | * `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None | [optional] +**start_date** | **date** | | [optional] +**target_date** | **date** | | [optional] +**sequence_id** | **int** | | [optional] +**sort_order** | **float** | | [optional] +**completed_at** | **datetime** | | [optional] +**archived_at** | **date** | | [optional] +**is_draft** | **bool** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**parent** | **str** | | [optional] +**state** | **str** | | [optional] +**estimate_point** | **str** | | [optional] +**type** | **str** | | [optional] + +## Example + +```python +from plane.models.issue import Issue + +# TODO update the JSON string below +json = "{}" +# create an instance of Issue from a JSON string +issue_instance = Issue.from_json(json) +# print the JSON string representation of the object +print Issue.to_json() + +# convert the object into a dict +issue_dict = issue_instance.to_dict() +# create an instance of Issue from a dict +issue_from_dict = Issue.from_dict(issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IssueActivity.md b/docs/IssueActivity.md new file mode 100644 index 0000000..2bcdc6a --- /dev/null +++ b/docs/IssueActivity.md @@ -0,0 +1,45 @@ +# IssueActivity + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**verb** | **str** | | [optional] +**field** | **str** | | [optional] +**old_value** | **str** | | [optional] +**new_value** | **str** | | [optional] +**comment** | **str** | | [optional] +**attachments** | **List[str]** | | [optional] +**old_identifier** | **str** | | [optional] +**new_identifier** | **str** | | [optional] +**epoch** | **float** | | [optional] +**project** | **str** | | +**workspace** | **str** | | +**issue** | **str** | | [optional] +**issue_comment** | **str** | | [optional] +**actor** | **str** | | [optional] + +## Example + +```python +from plane.models.issue_activity import IssueActivity + +# TODO update the JSON string below +json = "{}" +# create an instance of IssueActivity from a JSON string +issue_activity_instance = IssueActivity.from_json(json) +# print the JSON string representation of the object +print IssueActivity.to_json() + +# convert the object into a dict +issue_activity_dict = issue_activity_instance.to_dict() +# create an instance of IssueActivity from a dict +issue_activity_from_dict = IssueActivity.from_dict(issue_activity_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IssueAttachment.md b/docs/IssueAttachment.md new file mode 100644 index 0000000..7d10d0c --- /dev/null +++ b/docs/IssueAttachment.md @@ -0,0 +1,51 @@ +# IssueAttachment + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**attributes** | **object** | | [optional] +**asset** | **str** | | +**entity_type** | **str** | | [optional] +**entity_identifier** | **str** | | [optional] +**is_deleted** | **bool** | | [optional] +**is_archived** | **bool** | | [optional] +**external_id** | **str** | | [optional] +**external_source** | **str** | | [optional] +**size** | **float** | | [optional] +**is_uploaded** | **bool** | | [optional] +**storage_metadata** | **object** | | [optional] +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [readonly] +**user** | **str** | | [optional] +**workspace** | **str** | | [readonly] +**draft_issue** | **str** | | [optional] +**project** | **str** | | [readonly] +**issue** | **str** | | [readonly] +**comment** | **str** | | [optional] +**page** | **str** | | [optional] + +## Example + +```python +from plane.models.issue_attachment import IssueAttachment + +# TODO update the JSON string below +json = "{}" +# create an instance of IssueAttachment from a JSON string +issue_attachment_instance = IssueAttachment.from_json(json) +# print the JSON string representation of the object +print IssueAttachment.to_json() + +# convert the object into a dict +issue_attachment_dict = issue_attachment_instance.to_dict() +# create an instance of IssueAttachment from a dict +issue_attachment_from_dict = IssueAttachment.from_dict(issue_attachment_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IssueComment.md b/docs/IssueComment.md new file mode 100644 index 0000000..4b6e200 --- /dev/null +++ b/docs/IssueComment.md @@ -0,0 +1,44 @@ +# IssueComment + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**is_member** | **bool** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**comment_html** | **str** | | [optional] +**attachments** | **List[str]** | | [optional] +**access** | **str** | * `INTERNAL` - INTERNAL * `EXTERNAL` - EXTERNAL | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**edited_at** | **datetime** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**issue** | **str** | | [readonly] +**actor** | **str** | | [optional] + +## Example + +```python +from plane.models.issue_comment import IssueComment + +# TODO update the JSON string below +json = "{}" +# create an instance of IssueComment from a JSON string +issue_comment_instance = IssueComment.from_json(json) +# print the JSON string representation of the object +print IssueComment.to_json() + +# convert the object into a dict +issue_comment_dict = issue_comment_instance.to_dict() +# create an instance of IssueComment from a dict +issue_comment_from_dict = IssueComment.from_dict(issue_comment_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IssueExpand.md b/docs/IssueExpand.md new file mode 100644 index 0000000..7a23507 --- /dev/null +++ b/docs/IssueExpand.md @@ -0,0 +1,59 @@ +# IssueExpand + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**cycle** | [**CycleLite**](CycleLite.md) | | [readonly] +**module** | [**ModuleLite**](ModuleLite.md) | | [readonly] +**labels** | [**List[LabelLite]**](LabelLite.md) | | [readonly] +**assignees** | [**List[UserLite]**](UserLite.md) | | [readonly] +**state** | [**StateLite**](StateLite.md) | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**point** | **int** | | [optional] +**name** | **str** | | +**description** | **object** | | [optional] +**description_html** | **str** | | [optional] +**description_stripped** | **str** | | [optional] +**description_binary** | **bytearray** | | [readonly] +**priority** | **str** | * `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None | [optional] +**start_date** | **date** | | [optional] +**target_date** | **date** | | [optional] +**sequence_id** | **int** | | [optional] +**sort_order** | **float** | | [optional] +**completed_at** | **datetime** | | [optional] +**archived_at** | **date** | | [optional] +**is_draft** | **bool** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**parent** | **str** | | [optional] +**estimate_point** | **str** | | [optional] +**type** | **str** | | [optional] + +## Example + +```python +from plane.models.issue_expand import IssueExpand + +# TODO update the JSON string below +json = "{}" +# create an instance of IssueExpand from a JSON string +issue_expand_instance = IssueExpand.from_json(json) +# print the JSON string representation of the object +print IssueExpand.to_json() + +# convert the object into a dict +issue_expand_dict = issue_expand_instance.to_dict() +# create an instance of IssueExpand from a dict +issue_expand_from_dict = IssueExpand.from_dict(issue_expand_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IssueLink.md b/docs/IssueLink.md new file mode 100644 index 0000000..2c3cf11 --- /dev/null +++ b/docs/IssueLink.md @@ -0,0 +1,39 @@ +# IssueLink + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [optional] +**title** | **str** | | [optional] +**url** | **str** | | +**metadata** | **object** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**issue** | **str** | | [readonly] + +## Example + +```python +from plane.models.issue_link import IssueLink + +# TODO update the JSON string below +json = "{}" +# create an instance of IssueLink from a JSON string +issue_link_instance = IssueLink.from_json(json) +# print the JSON string representation of the object +print IssueLink.to_json() + +# convert the object into a dict +issue_link_dict = issue_link_instance.to_dict() +# create an instance of IssueLink from a dict +issue_link_from_dict = IssueLink.from_dict(issue_link_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Label.md b/docs/Label.md new file mode 100644 index 0000000..ed6e87b --- /dev/null +++ b/docs/Label.md @@ -0,0 +1,42 @@ +# Label + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [readonly] +**name** | **str** | | +**description** | **str** | | [optional] +**color** | **str** | | [optional] +**sort_order** | **float** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**project** | **str** | | [readonly] +**parent** | **str** | | [optional] + +## Example + +```python +from plane.models.label import Label + +# TODO update the JSON string below +json = "{}" +# create an instance of Label from a JSON string +label_instance = Label.from_json(json) +# print the JSON string representation of the object +print Label.to_json() + +# convert the object into a dict +label_dict = label_instance.to_dict() +# create an instance of Label from a dict +label_from_dict = Label.from_dict(label_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LabelLite.md b/docs/LabelLite.md new file mode 100644 index 0000000..af1b675 --- /dev/null +++ b/docs/LabelLite.md @@ -0,0 +1,30 @@ +# LabelLite + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**name** | **str** | | +**color** | **str** | | [optional] + +## Example + +```python +from plane.models.label_lite import LabelLite + +# TODO update the JSON string below +json = "{}" +# create an instance of LabelLite from a JSON string +label_lite_instance = LabelLite.from_json(json) +# print the JSON string representation of the object +print LabelLite.to_json() + +# convert the object into a dict +label_lite_dict = label_lite_instance.to_dict() +# create an instance of LabelLite from a dict +label_lite_from_dict = LabelLite.from_dict(label_lite_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LabelsApi.md b/docs/LabelsApi.md new file mode 100644 index 0000000..3528699 --- /dev/null +++ b/docs/LabelsApi.md @@ -0,0 +1,463 @@ +# plane.LabelsApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_label**](LabelsApi.md#create_label) | **POST** /workspaces/{slug}/projects/{project_id}/labels/ | Create a label +[**delete_label**](LabelsApi.md#delete_label) | **DELETE** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Delete a label +[**get_labels**](LabelsApi.md#get_labels) | **GET** /workspaces/{slug}/projects/{project_id}/labels/ | Get labels +[**get_labels2**](LabelsApi.md#get_labels2) | **GET** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Get labels +[**update_label**](LabelsApi.md#update_label) | **PATCH** /workspaces/{slug}/projects/{project_id}/labels/{id}/ | Update a label + + +# **create_label** +> Label create_label(project_id, project_id2, slug, slug2, create_label_request=create_label_request) + +Create a label + +Create a new label in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_label_request import CreateLabelRequest +from plane.models.label import Label +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.LabelsApi(api_client) + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + create_label_request = plane.CreateLabelRequest() # CreateLabelRequest | (optional) + + try: + # Create a label + api_response = api_instance.create_label(project_id, project_id2, slug, slug2, create_label_request=create_label_request) + print("The response of LabelsApi->create_label:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling LabelsApi->create_label: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **create_label_request** | [**CreateLabelRequest**](CreateLabelRequest.md)| | [optional] + +### Return type + +[**Label**](Label.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Label created successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_label** +> delete_label(id, pk, project_id, project_id2, slug, slug2) + +Delete a label + +Delete a label in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.LabelsApi(api_client) + id = 'id_example' # str | + pk = 'pk_example' # str | Label ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Delete a label + api_instance.delete_label(id, pk, project_id, project_id2, slug, slug2) + except Exception as e: + print("Exception when calling LabelsApi->delete_label: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **pk** | **str**| Label ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Label deleted successfully | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Label not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_labels** +> Label get_labels(project_id, project_id2, slug, slug2) + +Get labels + +Get all labels in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.label import Label +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.LabelsApi(api_client) + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get labels + api_response = api_instance.get_labels(project_id, project_id2, slug, slug2) + print("The response of LabelsApi->get_labels:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling LabelsApi->get_labels: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**Label**](Label.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Labels | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_labels2** +> Label get_labels2(id, project_id, project_id2, slug, slug2) + +Get labels + +Get all labels in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.label import Label +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.LabelsApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get labels + api_response = api_instance.get_labels2(id, project_id, project_id2, slug, slug2) + print("The response of LabelsApi->get_labels2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling LabelsApi->get_labels2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**Label**](Label.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Labels | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_label** +> Label update_label(id, pk, project_id, project_id2, slug, slug2, update_label_request=update_label_request) + +Update a label + +Update a label in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.label import Label +from plane.models.update_label_request import UpdateLabelRequest +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.LabelsApi(api_client) + id = 'id_example' # str | + pk = 'pk_example' # str | Label ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + update_label_request = plane.UpdateLabelRequest() # UpdateLabelRequest | (optional) + + try: + # Update a label + api_response = api_instance.update_label(id, pk, project_id, project_id2, slug, slug2, update_label_request=update_label_request) + print("The response of LabelsApi->update_label:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling LabelsApi->update_label: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **pk** | **str**| Label ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **update_label_request** | [**UpdateLabelRequest**](UpdateLabelRequest.md)| | [optional] + +### Return type + +[**Label**](Label.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Label updated successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Label not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/MembersApi.md b/docs/MembersApi.md new file mode 100644 index 0000000..155eac6 --- /dev/null +++ b/docs/MembersApi.md @@ -0,0 +1,174 @@ +# plane.MembersApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_project_members**](MembersApi.md#get_project_members) | **GET** /workspaces/{slug}/projects/{project_id}/members/ | Get all the users that are present inside the project +[**get_workspace_members**](MembersApi.md#get_workspace_members) | **GET** /workspaces/{slug}/members/ | Get all the users that are present inside the workspace + + +# **get_project_members** +> UserLite get_project_members(project_id, slug) + +Get all the users that are present inside the project + +Get all the users that are present inside the project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_lite import UserLite +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.MembersApi(api_client) + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Get all the users that are present inside the project + api_response = api_instance.get_project_members(project_id, slug) + print("The response of MembersApi->get_project_members:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MembersApi->get_project_members: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +[**UserLite**](UserLite.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of project members with their roles | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_workspace_members** +> List[GetWorkspaceMembers200ResponseInner] get_workspace_members(slug) + +Get all the users that are present inside the workspace + +Get all the users that are present inside the workspace + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.MembersApi(api_client) + slug = 'slug_example' # str | Workspace slug + + try: + # Get all the users that are present inside the workspace + api_response = api_instance.get_workspace_members(slug) + print("The response of MembersApi->get_workspace_members:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MembersApi->get_workspace_members: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **slug** | **str**| Workspace slug | + +### Return type + +[**List[GetWorkspaceMembers200ResponseInner]**](GetWorkspaceMembers200ResponseInner.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of workspace members with their roles | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Workspace not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/Module.md b/docs/Module.md new file mode 100644 index 0000000..ca5029c --- /dev/null +++ b/docs/Module.md @@ -0,0 +1,56 @@ +# Module + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**members** | **List[str]** | | [optional] +**total_issues** | **int** | | [readonly] +**cancelled_issues** | **int** | | [readonly] +**completed_issues** | **int** | | [readonly] +**started_issues** | **int** | | [readonly] +**unstarted_issues** | **int** | | [readonly] +**backlog_issues** | **int** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [readonly] +**name** | **str** | | +**description** | **str** | | [optional] +**description_text** | **object** | | [optional] +**description_html** | **object** | | [optional] +**start_date** | **date** | | [optional] +**target_date** | **date** | | [optional] +**status** | **str** | * `backlog` - Backlog * `planned` - Planned * `in-progress` - In Progress * `paused` - Paused * `completed` - Completed * `cancelled` - Cancelled | [optional] +**view_props** | **object** | | [optional] +**sort_order** | **float** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**archived_at** | **datetime** | | [optional] +**logo_props** | **object** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**lead** | **str** | | [optional] + +## Example + +```python +from plane.models.module import Module + +# TODO update the JSON string below +json = "{}" +# create an instance of Module from a JSON string +module_instance = Module.from_json(json) +# print the JSON string representation of the object +print Module.to_json() + +# convert the object into a dict +module_dict = module_instance.to_dict() +# create an instance of Module from a dict +module_from_dict = Module.from_dict(module_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ModuleIssue.md b/docs/ModuleIssue.md new file mode 100644 index 0000000..4ef8e9b --- /dev/null +++ b/docs/ModuleIssue.md @@ -0,0 +1,38 @@ +# ModuleIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**sub_issues_count** | **int** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**module** | **str** | | [readonly] +**issue** | **str** | | + +## Example + +```python +from plane.models.module_issue import ModuleIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of ModuleIssue from a JSON string +module_issue_instance = ModuleIssue.from_json(json) +# print the JSON string representation of the object +print ModuleIssue.to_json() + +# convert the object into a dict +module_issue_dict = module_issue_instance.to_dict() +# create an instance of ModuleIssue from a dict +module_issue_from_dict = ModuleIssue.from_dict(module_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ModuleLite.md b/docs/ModuleLite.md new file mode 100644 index 0000000..1d64197 --- /dev/null +++ b/docs/ModuleLite.md @@ -0,0 +1,50 @@ +# ModuleLite + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | +**name** | **str** | | +**description** | **str** | | [optional] +**description_text** | **object** | | [optional] +**description_html** | **object** | | [optional] +**start_date** | **date** | | [optional] +**target_date** | **date** | | [optional] +**status** | **str** | * `backlog` - Backlog * `planned` - Planned * `in-progress` - In Progress * `paused` - Paused * `completed` - Completed * `cancelled` - Cancelled | [optional] +**view_props** | **object** | | [optional] +**sort_order** | **float** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**archived_at** | **datetime** | | [optional] +**logo_props** | **object** | | [optional] +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [optional] +**project** | **str** | | +**workspace** | **str** | | +**lead** | **str** | | [optional] +**members** | **List[str]** | | [readonly] + +## Example + +```python +from plane.models.module_lite import ModuleLite + +# TODO update the JSON string below +json = "{}" +# create an instance of ModuleLite from a JSON string +module_lite_instance = ModuleLite.from_json(json) +# print the JSON string representation of the object +print ModuleLite.to_json() + +# convert the object into a dict +module_lite_dict = module_lite_instance.to_dict() +# create an instance of ModuleLite from a dict +module_lite_from_dict = ModuleLite.from_dict(module_lite_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ModulesApi.md b/docs/ModulesApi.md new file mode 100644 index 0000000..3f03772 --- /dev/null +++ b/docs/ModulesApi.md @@ -0,0 +1,941 @@ +# plane.ModulesApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**add_module_issues**](ModulesApi.md#add_module_issues) | **POST** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/ | Add module issues +[**archive_module**](ModulesApi.md#archive_module) | **POST** /workspaces/{slug}/projects/{project_id}/modules/{id}/archive/ | Archive module +[**create_module**](ModulesApi.md#create_module) | **POST** /workspaces/{slug}/projects/{project_id}/modules/ | Create module +[**delete_module**](ModulesApi.md#delete_module) | **DELETE** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Delete module +[**delete_module_issue**](ModulesApi.md#delete_module_issue) | **DELETE** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/ | Delete module issue +[**get_archived_modules**](ModulesApi.md#get_archived_modules) | **GET** /workspaces/{slug}/projects/{project_id}/archived-modules/ | Get archived modules +[**get_module**](ModulesApi.md#get_module) | **GET** /workspaces/{slug}/projects/{project_id}/modules/ | Get module +[**get_module2**](ModulesApi.md#get_module2) | **GET** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Get module +[**get_module_issues**](ModulesApi.md#get_module_issues) | **GET** /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/ | Get module issues +[**unarchive_module**](ModulesApi.md#unarchive_module) | **DELETE** /workspaces/{slug}/projects/{project_id}/archived-modules/{id}/unarchive/ | Unarchive module +[**update_module**](ModulesApi.md#update_module) | **PATCH** /workspaces/{slug}/projects/{project_id}/modules/{id}/ | Update module + + +# **add_module_issues** +> ModuleIssue add_module_issues(module_id, project_id, slug, add_cycle_issues_request=add_cycle_issues_request) + +Add module issues + +Add module issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.module_issue import ModuleIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + module_id = 'module_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + add_cycle_issues_request = plane.AddCycleIssuesRequest() # AddCycleIssuesRequest | (optional) + + try: + # Add module issues + api_response = api_instance.add_module_issues(module_id, project_id, slug, add_cycle_issues_request=add_cycle_issues_request) + print("The response of ModulesApi->add_module_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->add_module_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **module_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **add_cycle_issues_request** | [**AddCycleIssuesRequest**](AddCycleIssuesRequest.md)| | [optional] + +### Return type + +[**ModuleIssue**](ModuleIssue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Module issues added | - | +**400** | Invalid request | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **archive_module** +> archive_module(id, project_id, slug) + +Archive module + +Archive module + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Archive module + api_instance.archive_module(id, project_id, slug) + except Exception as e: + print("Exception when calling ModulesApi->archive_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Module archived | - | +**400** | Invalid request | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Module not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_module** +> Module create_module(project_id, slug, create_module_request=create_module_request) + +Create module + +Create module + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_module_request import CreateModuleRequest +from plane.models.module import Module +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_module_request = plane.CreateModuleRequest() # CreateModuleRequest | (optional) + + try: + # Create module + api_response = api_instance.create_module(project_id, slug, create_module_request=create_module_request) + print("The response of ModulesApi->create_module:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->create_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **create_module_request** | [**CreateModuleRequest**](CreateModuleRequest.md)| | [optional] + +### Return type + +[**Module**](Module.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Module created | - | +**400** | Invalid request | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_module** +> delete_module(id, project_id, slug) + +Delete module + +Delete module + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete module + api_instance.delete_module(id, project_id, slug) + except Exception as e: + print("Exception when calling ModulesApi->delete_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No response body | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_module_issue** +> delete_module_issue(issue_id, module_id, project_id, slug) + +Delete module issue + +Delete module issue + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + issue_id = 'issue_id_example' # str | + module_id = 'module_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete module issue + api_instance.delete_module_issue(issue_id, module_id, project_id, slug) + except Exception as e: + print("Exception when calling ModulesApi->delete_module_issue: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **module_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Module issue deleted | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Module issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_archived_modules** +> Module get_archived_modules(project_id, slug) + +Get archived modules + +Get archived modules + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.module import Module +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get archived modules + api_response = api_instance.get_archived_modules(project_id, slug) + print("The response of ModulesApi->get_archived_modules:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->get_archived_modules: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Module**](Module.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Archived modules | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_module** +> Module get_module(project_id, slug) + +Get module + +Get modules + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.module import Module +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get module + api_response = api_instance.get_module(project_id, slug) + print("The response of ModulesApi->get_module:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->get_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Module**](Module.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Module | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_module2** +> Module get_module2(id, project_id, slug) + +Get module + +Get modules + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.module import Module +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get module + api_response = api_instance.get_module2(id, project_id, slug) + print("The response of ModulesApi->get_module2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->get_module2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Module**](Module.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Module | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_module_issues** +> Issue get_module_issues(module_id, project_id, slug) + +Get module issues + +Get module issues + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + module_id = 'module_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get module issues + api_response = api_instance.get_module_issues(module_id, project_id, slug) + print("The response of ModulesApi->get_module_issues:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->get_module_issues: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **module_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Module issues | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **unarchive_module** +> unarchive_module(id, project_id, slug) + +Unarchive module + +Unarchive module + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Unarchive module + api_instance.unarchive_module(id, project_id, slug) + except Exception as e: + print("Exception when calling ModulesApi->unarchive_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Module unarchived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Module not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_module** +> Module update_module(id, project_id, slug, create_module_request=create_module_request) + +Update module + +Update module + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_module_request import CreateModuleRequest +from plane.models.module import Module +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ModulesApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_module_request = plane.CreateModuleRequest() # CreateModuleRequest | (optional) + + try: + # Update module + api_response = api_instance.update_module(id, project_id, slug, create_module_request=create_module_request) + print("The response of ModulesApi->update_module:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ModulesApi->update_module: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **create_module_request** | [**CreateModuleRequest**](CreateModuleRequest.md)| | [optional] + +### Return type + +[**Module**](Module.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/PatchedAssetUpdate.md b/docs/PatchedAssetUpdate.md new file mode 100644 index 0000000..a3bfce3 --- /dev/null +++ b/docs/PatchedAssetUpdate.md @@ -0,0 +1,29 @@ +# PatchedAssetUpdate + +Serializer for asset update requests after upload + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | **object** | Additional attributes to update for the asset | [optional] + +## Example + +```python +from plane.models.patched_asset_update import PatchedAssetUpdate + +# TODO update the JSON string below +json = "{}" +# create an instance of PatchedAssetUpdate from a JSON string +patched_asset_update_instance = PatchedAssetUpdate.from_json(json) +# print the JSON string representation of the object +print PatchedAssetUpdate.to_json() + +# convert the object into a dict +patched_asset_update_dict = patched_asset_update_instance.to_dict() +# create an instance of PatchedAssetUpdate from a dict +patched_asset_update_from_dict = PatchedAssetUpdate.from_dict(patched_asset_update_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PatchedGenericAssetUpdate.md b/docs/PatchedGenericAssetUpdate.md new file mode 100644 index 0000000..10a4d56 --- /dev/null +++ b/docs/PatchedGenericAssetUpdate.md @@ -0,0 +1,29 @@ +# PatchedGenericAssetUpdate + +Serializer for generic asset update requests + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**is_uploaded** | **bool** | Whether the asset has been successfully uploaded | [optional] [default to True] + +## Example + +```python +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate + +# TODO update the JSON string below +json = "{}" +# create an instance of PatchedGenericAssetUpdate from a JSON string +patched_generic_asset_update_instance = PatchedGenericAssetUpdate.from_json(json) +# print the JSON string representation of the object +print PatchedGenericAssetUpdate.to_json() + +# convert the object into a dict +patched_generic_asset_update_dict = patched_generic_asset_update_instance.to_dict() +# create an instance of PatchedGenericAssetUpdate from a dict +patched_generic_asset_update_from_dict = PatchedGenericAssetUpdate.from_dict(patched_generic_asset_update_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PatchedIssue.md b/docs/PatchedIssue.md new file mode 100644 index 0000000..17ffc8e --- /dev/null +++ b/docs/PatchedIssue.md @@ -0,0 +1,56 @@ +# PatchedIssue + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] [readonly] +**assignees** | **List[str]** | | [optional] +**labels** | **List[str]** | | [optional] +**type_id** | **str** | | [optional] +**created_at** | **datetime** | | [optional] [readonly] +**updated_at** | **datetime** | | [optional] [readonly] +**deleted_at** | **datetime** | | [optional] +**point** | **int** | | [optional] +**name** | **str** | | [optional] +**description_html** | **str** | | [optional] +**description_binary** | **bytearray** | | [optional] [readonly] +**priority** | **str** | * `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None | [optional] +**start_date** | **date** | | [optional] +**target_date** | **date** | | [optional] +**sequence_id** | **int** | | [optional] +**sort_order** | **float** | | [optional] +**completed_at** | **datetime** | | [optional] +**archived_at** | **date** | | [optional] +**is_draft** | **bool** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**created_by** | **str** | | [optional] +**updated_by** | **str** | | [optional] [readonly] +**project** | **str** | | [optional] [readonly] +**workspace** | **str** | | [optional] [readonly] +**parent** | **str** | | [optional] +**state** | **str** | | [optional] +**estimate_point** | **str** | | [optional] +**type** | **str** | | [optional] + +## Example + +```python +from plane.models.patched_issue import PatchedIssue + +# TODO update the JSON string below +json = "{}" +# create an instance of PatchedIssue from a JSON string +patched_issue_instance = PatchedIssue.from_json(json) +# print the JSON string representation of the object +print PatchedIssue.to_json() + +# convert the object into a dict +patched_issue_dict = patched_issue_instance.to_dict() +# create an instance of PatchedIssue from a dict +patched_issue_from_dict = PatchedIssue.from_dict(patched_issue_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PatchedProject.md b/docs/PatchedProject.md new file mode 100644 index 0000000..c6b06b0 --- /dev/null +++ b/docs/PatchedProject.md @@ -0,0 +1,69 @@ +# PatchedProject + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] [readonly] +**total_members** | **int** | | [optional] [readonly] +**total_cycles** | **int** | | [optional] [readonly] +**total_modules** | **int** | | [optional] [readonly] +**is_member** | **bool** | | [optional] [readonly] +**sort_order** | **float** | | [optional] [readonly] +**member_role** | **int** | | [optional] [readonly] +**is_deployed** | **bool** | | [optional] [readonly] +**cover_image_url** | **str** | | [optional] [readonly] +**created_at** | **datetime** | | [optional] [readonly] +**updated_at** | **datetime** | | [optional] [readonly] +**deleted_at** | **datetime** | | [optional] [readonly] +**name** | **str** | | [optional] +**description** | **str** | | [optional] +**description_text** | **object** | | [optional] +**description_html** | **object** | | [optional] +**network** | **int** | * `0` - Secret * `2` - Public | [optional] +**identifier** | **str** | | [optional] +**emoji** | **str** | | [optional] [readonly] +**icon_prop** | **object** | | [optional] +**module_view** | **bool** | | [optional] +**cycle_view** | **bool** | | [optional] +**issue_views_view** | **bool** | | [optional] +**page_view** | **bool** | | [optional] +**intake_view** | **bool** | | [optional] +**is_time_tracking_enabled** | **bool** | | [optional] +**is_issue_type_enabled** | **bool** | | [optional] +**guest_view_all_features** | **bool** | | [optional] +**cover_image** | **str** | | [optional] +**archive_in** | **int** | | [optional] +**close_in** | **int** | | [optional] +**logo_props** | **object** | | [optional] +**archived_at** | **datetime** | | [optional] +**timezone** | **str** | * `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu | [optional] +**created_by** | **str** | | [optional] [readonly] +**updated_by** | **str** | | [optional] [readonly] +**workspace** | **str** | | [optional] [readonly] +**default_assignee** | **str** | | [optional] +**project_lead** | **str** | | [optional] +**cover_image_asset** | **str** | | [optional] +**estimate** | **str** | | [optional] +**default_state** | **str** | | [optional] + +## Example + +```python +from plane.models.patched_project import PatchedProject + +# TODO update the JSON string below +json = "{}" +# create an instance of PatchedProject from a JSON string +patched_project_instance = PatchedProject.from_json(json) +# print the JSON string representation of the object +print PatchedProject.to_json() + +# convert the object into a dict +patched_project_dict = patched_project_instance.to_dict() +# create an instance of PatchedProject from a dict +patched_project_from_dict = PatchedProject.from_dict(patched_project_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Project.md b/docs/Project.md new file mode 100644 index 0000000..4e48b36 --- /dev/null +++ b/docs/Project.md @@ -0,0 +1,69 @@ +# Project + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**total_members** | **int** | | [readonly] +**total_cycles** | **int** | | [readonly] +**total_modules** | **int** | | [readonly] +**is_member** | **bool** | | [readonly] +**sort_order** | **float** | | [readonly] +**member_role** | **int** | | [readonly] +**is_deployed** | **bool** | | [readonly] +**cover_image_url** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [readonly] +**name** | **str** | | +**description** | **str** | | [optional] +**description_text** | **object** | | [optional] +**description_html** | **object** | | [optional] +**network** | **int** | * `0` - Secret * `2` - Public | [optional] +**identifier** | **str** | | +**emoji** | **str** | | [readonly] +**icon_prop** | **object** | | [optional] +**module_view** | **bool** | | [optional] +**cycle_view** | **bool** | | [optional] +**issue_views_view** | **bool** | | [optional] +**page_view** | **bool** | | [optional] +**intake_view** | **bool** | | [optional] +**is_time_tracking_enabled** | **bool** | | [optional] +**is_issue_type_enabled** | **bool** | | [optional] +**guest_view_all_features** | **bool** | | [optional] +**cover_image** | **str** | | [optional] +**archive_in** | **int** | | [optional] +**close_in** | **int** | | [optional] +**logo_props** | **object** | | [optional] +**archived_at** | **datetime** | | [optional] +**timezone** | **str** | * `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**workspace** | **str** | | [readonly] +**default_assignee** | **str** | | [optional] +**project_lead** | **str** | | [optional] +**cover_image_asset** | **str** | | [optional] +**estimate** | **str** | | [optional] +**default_state** | **str** | | [optional] + +## Example + +```python +from plane.models.project import Project + +# TODO update the JSON string below +json = "{}" +# create an instance of Project from a JSON string +project_instance = Project.from_json(json) +# print the JSON string representation of the object +print Project.to_json() + +# convert the object into a dict +project_dict = project_instance.to_dict() +# create an instance of Project from a dict +project_from_dict = Project.from_dict(project_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectsApi.md b/docs/ProjectsApi.md new file mode 100644 index 0000000..952379e --- /dev/null +++ b/docs/ProjectsApi.md @@ -0,0 +1,595 @@ +# plane.ProjectsApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**archive_project**](ProjectsApi.md#archive_project) | **POST** /workspaces/{slug}/projects/{project_id}/archive/ | Archive Project +[**create_project**](ProjectsApi.md#create_project) | **POST** /workspaces/{slug}/projects/ | Create Project +[**delete_project**](ProjectsApi.md#delete_project) | **DELETE** /workspaces/{slug}/projects/{id}/ | Delete Project +[**list_projects**](ProjectsApi.md#list_projects) | **GET** /workspaces/{slug}/projects/ | List Projects +[**list_projects2**](ProjectsApi.md#list_projects2) | **GET** /workspaces/{slug}/projects/{id}/ | List Projects +[**unarchive_project**](ProjectsApi.md#unarchive_project) | **DELETE** /workspaces/{slug}/projects/{project_id}/archive/ | Unarchive Project +[**update_project**](ProjectsApi.md#update_project) | **PATCH** /workspaces/{slug}/projects/{id}/ | Update Project + + +# **archive_project** +> archive_project(project_id, slug) + +Archive Project + +Archive an existing project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Archive Project + api_instance.archive_project(project_id, slug) + except Exception as e: + print("Exception when calling ProjectsApi->archive_project: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Project archived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_project** +> Project create_project(slug, create_project_request=create_project_request) + +Create Project + +Create a new project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_project_request import CreateProjectRequest +from plane.models.project import Project +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + slug = 'slug_example' # str | + create_project_request = plane.CreateProjectRequest() # CreateProjectRequest | (optional) + + try: + # Create Project + api_response = api_instance.create_project(slug, create_project_request=create_project_request) + print("The response of ProjectsApi->create_project:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ProjectsApi->create_project: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **slug** | **str**| | + **create_project_request** | [**CreateProjectRequest**](CreateProjectRequest.md)| | [optional] + +### Return type + +[**Project**](Project.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Project created | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Workspace not found | - | +**409** | Project name already taken | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_project** +> delete_project(id, pk, slug) + +Delete Project + +Delete an existing project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + id = 'id_example' # str | + pk = 'pk_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Delete Project + api_instance.delete_project(id, pk, slug) + except Exception as e: + print("Exception when calling ProjectsApi->delete_project: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **pk** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Project deleted | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_projects** +> Project list_projects(slug) + +List Projects + +List all projects in a workspace + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.project import Project +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + slug = 'slug_example' # str | + + try: + # List Projects + api_response = api_instance.list_projects(slug) + print("The response of ProjectsApi->list_projects:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ProjectsApi->list_projects: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **slug** | **str**| | + +### Return type + +[**Project**](Project.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of projects or project details | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_projects2** +> Project list_projects2(id, slug) + +List Projects + +List all projects in a workspace + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.project import Project +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + id = 'id_example' # str | + slug = 'slug_example' # str | + + try: + # List Projects + api_response = api_instance.list_projects2(id, slug) + print("The response of ProjectsApi->list_projects2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ProjectsApi->list_projects2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **slug** | **str**| | + +### Return type + +[**Project**](Project.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of projects or project details | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **unarchive_project** +> unarchive_project(project_id, slug) + +Unarchive Project + +Unarchive an existing project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | Workspace slug + + try: + # Unarchive Project + api_instance.unarchive_project(project_id, slug) + except Exception as e: + print("Exception when calling ProjectsApi->unarchive_project: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Project unarchived | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_project** +> Project update_project(id, pk, slug, patched_project=patched_project) + +Update Project + +Update an existing project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.patched_project import PatchedProject +from plane.models.project import Project +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.ProjectsApi(api_client) + id = 'id_example' # str | + pk = 'pk_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + patched_project = plane.PatchedProject() # PatchedProject | (optional) + + try: + # Update Project + api_response = api_instance.update_project(id, pk, slug, patched_project=patched_project) + print("The response of ProjectsApi->update_project:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ProjectsApi->update_project: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **pk** | **str**| Project ID | + **slug** | **str**| Workspace slug | + **patched_project** | [**PatchedProject**](PatchedProject.md)| | [optional] + +### Return type + +[**Project**](Project.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Project updated | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | +**409** | Project name already taken | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/SearchIssues200Response.md b/docs/SearchIssues200Response.md new file mode 100644 index 0000000..a5a3640 --- /dev/null +++ b/docs/SearchIssues200Response.md @@ -0,0 +1,28 @@ +# SearchIssues200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**issues** | [**List[SearchIssues200ResponseIssuesInner]**](SearchIssues200ResponseIssuesInner.md) | | [optional] + +## Example + +```python +from plane.models.search_issues200_response import SearchIssues200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of SearchIssues200Response from a JSON string +search_issues200_response_instance = SearchIssues200Response.from_json(json) +# print the JSON string representation of the object +print SearchIssues200Response.to_json() + +# convert the object into a dict +search_issues200_response_dict = search_issues200_response_instance.to_dict() +# create an instance of SearchIssues200Response from a dict +search_issues200_response_from_dict = SearchIssues200Response.from_dict(search_issues200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SearchIssues200ResponseIssuesInner.md b/docs/SearchIssues200ResponseIssuesInner.md new file mode 100644 index 0000000..5a3c6ec --- /dev/null +++ b/docs/SearchIssues200ResponseIssuesInner.md @@ -0,0 +1,33 @@ +# SearchIssues200ResponseIssuesInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Issue name | [optional] +**id** | **str** | Issue ID | [optional] +**sequence_id** | **str** | Issue sequence ID | [optional] +**project__identifier** | **str** | Project identifier | [optional] +**project_id** | **str** | Project ID | [optional] +**workspace__slug** | **str** | Workspace slug | [optional] + +## Example + +```python +from plane.models.search_issues200_response_issues_inner import SearchIssues200ResponseIssuesInner + +# TODO update the JSON string below +json = "{}" +# create an instance of SearchIssues200ResponseIssuesInner from a JSON string +search_issues200_response_issues_inner_instance = SearchIssues200ResponseIssuesInner.from_json(json) +# print the JSON string representation of the object +print SearchIssues200ResponseIssuesInner.to_json() + +# convert the object into a dict +search_issues200_response_issues_inner_dict = search_issues200_response_issues_inner_instance.to_dict() +# create an instance of SearchIssues200ResponseIssuesInner from a dict +search_issues200_response_issues_inner_from_dict = SearchIssues200ResponseIssuesInner.from_dict(search_issues200_response_issues_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/State.md b/docs/State.md new file mode 100644 index 0000000..385f988 --- /dev/null +++ b/docs/State.md @@ -0,0 +1,45 @@ +# State + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**created_at** | **datetime** | | [readonly] +**updated_at** | **datetime** | | [readonly] +**deleted_at** | **datetime** | | [readonly] +**name** | **str** | | +**description** | **str** | | [optional] +**color** | **str** | | +**slug** | **str** | | [optional] +**sequence** | **float** | | [optional] +**group** | **str** | * `backlog` - Backlog * `unstarted` - Unstarted * `started` - Started * `completed` - Completed * `cancelled` - Cancelled * `triage` - Triage | [optional] +**is_triage** | **bool** | | [optional] +**default** | **bool** | | [optional] +**external_source** | **str** | | [optional] +**external_id** | **str** | | [optional] +**created_by** | **str** | | [readonly] +**updated_by** | **str** | | [readonly] +**project** | **str** | | [readonly] +**workspace** | **str** | | [readonly] + +## Example + +```python +from plane.models.state import State + +# TODO update the JSON string below +json = "{}" +# create an instance of State from a JSON string +state_instance = State.from_json(json) +# print the JSON string representation of the object +print State.to_json() + +# convert the object into a dict +state_dict = state_instance.to_dict() +# create an instance of State from a dict +state_from_dict = State.from_dict(state_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StateLite.md b/docs/StateLite.md new file mode 100644 index 0000000..8e9d1bf --- /dev/null +++ b/docs/StateLite.md @@ -0,0 +1,31 @@ +# StateLite + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**name** | **str** | | [readonly] +**color** | **str** | | [readonly] +**group** | **str** | * `backlog` - Backlog * `unstarted` - Unstarted * `started` - Started * `completed` - Completed * `cancelled` - Cancelled * `triage` - Triage | [readonly] + +## Example + +```python +from plane.models.state_lite import StateLite + +# TODO update the JSON string below +json = "{}" +# create an instance of StateLite from a JSON string +state_lite_instance = StateLite.from_json(json) +# print the JSON string representation of the object +print StateLite.to_json() + +# convert the object into a dict +state_lite_dict = state_lite_instance.to_dict() +# create an instance of StateLite from a dict +state_lite_from_dict = StateLite.from_dict(state_lite_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StatesApi.md b/docs/StatesApi.md new file mode 100644 index 0000000..63937ac --- /dev/null +++ b/docs/StatesApi.md @@ -0,0 +1,432 @@ +# plane.StatesApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_state**](StatesApi.md#create_state) | **POST** /workspaces/{slug}/projects/{project_id}/states/ | Create State +[**delete_state**](StatesApi.md#delete_state) | **DELETE** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Delete State +[**get_state**](StatesApi.md#get_state) | **GET** /workspaces/{slug}/projects/{project_id}/states/ | Get State +[**get_state2**](StatesApi.md#get_state2) | **GET** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Get State +[**update_state**](StatesApi.md#update_state) | **PATCH** /workspaces/{slug}/projects/{project_id}/states/{state_id}/ | Update State + + +# **create_state** +> State create_state(project_id, slug, create_state_request=create_state_request) + +Create State + +Create a new state for a project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_state_request import CreateStateRequest +from plane.models.state import State +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.StatesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + create_state_request = plane.CreateStateRequest() # CreateStateRequest | (optional) + + try: + # Create State + api_response = api_instance.create_state(project_id, slug, create_state_request=create_state_request) + print("The response of StatesApi->create_state:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling StatesApi->create_state: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **create_state_request** | [**CreateStateRequest**](CreateStateRequest.md)| | [optional] + +### Return type + +[**State**](State.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | State created | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | +**409** | State with the same name already exists | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_state** +> delete_state(project_id, slug, state_id) + +Delete State + +Delete a state for a project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.StatesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + state_id = 'state_id_example' # str | + + try: + # Delete State + api_instance.delete_state(project_id, slug, state_id) + except Exception as e: + print("Exception when calling StatesApi->delete_state: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **state_id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | State deleted | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | State not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_state** +> State get_state(project_id, slug) + +Get State + +Get a state for a project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.state import State +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.StatesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Get State + api_response = api_instance.get_state(project_id, slug) + print("The response of StatesApi->get_state:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling StatesApi->get_state: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +[**State**](State.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | State retrieved | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_state2** +> State get_state2(project_id, slug, state_id) + +Get State + +Get a state for a project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.state import State +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.StatesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + state_id = 'state_id_example' # str | + + try: + # Get State + api_response = api_instance.get_state2(project_id, slug, state_id) + print("The response of StatesApi->get_state2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling StatesApi->get_state2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **state_id** | **str**| | + +### Return type + +[**State**](State.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | State retrieved | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_state** +> State update_state(project_id, slug, state_id, create_state_request=create_state_request) + +Update State + +Update a state for a project + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_state_request import CreateStateRequest +from plane.models.state import State +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.StatesApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + state_id = 'state_id_example' # str | + create_state_request = plane.CreateStateRequest() # CreateStateRequest | (optional) + + try: + # Update State + api_response = api_instance.update_state(project_id, slug, state_id, create_state_request=create_state_request) + print("The response of StatesApi->update_state:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling StatesApi->update_state: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **state_id** | **str**| | + **create_state_request** | [**CreateStateRequest**](CreateStateRequest.md)| | [optional] + +### Return type + +[**State**](State.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | State updated | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | State not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/TransferCycleIssues200Response.md b/docs/TransferCycleIssues200Response.md new file mode 100644 index 0000000..b041501 --- /dev/null +++ b/docs/TransferCycleIssues200Response.md @@ -0,0 +1,28 @@ +# TransferCycleIssues200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | Success message | [optional] + +## Example + +```python +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of TransferCycleIssues200Response from a JSON string +transfer_cycle_issues200_response_instance = TransferCycleIssues200Response.from_json(json) +# print the JSON string representation of the object +print TransferCycleIssues200Response.to_json() + +# convert the object into a dict +transfer_cycle_issues200_response_dict = transfer_cycle_issues200_response_instance.to_dict() +# create an instance of TransferCycleIssues200Response from a dict +transfer_cycle_issues200_response_from_dict = TransferCycleIssues200Response.from_dict(transfer_cycle_issues200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TransferCycleIssues400Response.md b/docs/TransferCycleIssues400Response.md new file mode 100644 index 0000000..ed7547d --- /dev/null +++ b/docs/TransferCycleIssues400Response.md @@ -0,0 +1,28 @@ +# TransferCycleIssues400Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**error** | **str** | Error message | [optional] + +## Example + +```python +from plane.models.transfer_cycle_issues400_response import TransferCycleIssues400Response + +# TODO update the JSON string below +json = "{}" +# create an instance of TransferCycleIssues400Response from a JSON string +transfer_cycle_issues400_response_instance = TransferCycleIssues400Response.from_json(json) +# print the JSON string representation of the object +print TransferCycleIssues400Response.to_json() + +# convert the object into a dict +transfer_cycle_issues400_response_dict = transfer_cycle_issues400_response_instance.to_dict() +# create an instance of TransferCycleIssues400Response from a dict +transfer_cycle_issues400_response_from_dict = TransferCycleIssues400Response.from_dict(transfer_cycle_issues400_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateCycleRequest.md b/docs/UpdateCycleRequest.md new file mode 100644 index 0000000..305fc32 --- /dev/null +++ b/docs/UpdateCycleRequest.md @@ -0,0 +1,31 @@ +# UpdateCycleRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Cycle Name | [optional] +**description** | **str** | Cycle Description | [optional] +**start_date** | **datetime** | Start Date | [optional] +**end_date** | **datetime** | End Date | [optional] + +## Example + +```python +from plane.models.update_cycle_request import UpdateCycleRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateCycleRequest from a JSON string +update_cycle_request_instance = UpdateCycleRequest.from_json(json) +# print the JSON string representation of the object +print UpdateCycleRequest.to_json() + +# convert the object into a dict +update_cycle_request_dict = update_cycle_request_instance.to_dict() +# create an instance of UpdateCycleRequest from a dict +update_cycle_request_from_dict = UpdateCycleRequest.from_dict(update_cycle_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateLabelRequest.md b/docs/UpdateLabelRequest.md new file mode 100644 index 0000000..cb3bcc3 --- /dev/null +++ b/docs/UpdateLabelRequest.md @@ -0,0 +1,30 @@ +# UpdateLabelRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**color** | **str** | | [optional] +**description** | **str** | | [optional] + +## Example + +```python +from plane.models.update_label_request import UpdateLabelRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateLabelRequest from a JSON string +update_label_request_instance = UpdateLabelRequest.from_json(json) +# print the JSON string representation of the object +print UpdateLabelRequest.to_json() + +# convert the object into a dict +update_label_request_dict = update_label_request_instance.to_dict() +# create an instance of UpdateLabelRequest from a dict +update_label_request_from_dict = UpdateLabelRequest.from_dict(update_label_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserAssetUpload.md b/docs/UserAssetUpload.md new file mode 100644 index 0000000..9ee8ea4 --- /dev/null +++ b/docs/UserAssetUpload.md @@ -0,0 +1,32 @@ +# UserAssetUpload + +Serializer for user asset upload requests + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Original filename of the asset | +**type** | **str** | MIME type of the file * `image/jpeg` - JPEG * `image/png` - PNG * `image/webp` - WebP * `image/jpg` - JPG * `image/gif` - GIF | [optional] [default to 'image/jpeg'] +**size** | **int** | File size in bytes | +**entity_type** | **str** | Type of user asset * `USER_AVATAR` - User Avatar * `USER_COVER` - User Cover | + +## Example + +```python +from plane.models.user_asset_upload import UserAssetUpload + +# TODO update the JSON string below +json = "{}" +# create an instance of UserAssetUpload from a JSON string +user_asset_upload_instance = UserAssetUpload.from_json(json) +# print the JSON string representation of the object +print UserAssetUpload.to_json() + +# convert the object into a dict +user_asset_upload_dict = user_asset_upload_instance.to_dict() +# create an instance of UserAssetUpload from a dict +user_asset_upload_from_dict = UserAssetUpload.from_dict(user_asset_upload_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserLite.md b/docs/UserLite.md new file mode 100644 index 0000000..0ee1d10 --- /dev/null +++ b/docs/UserLite.md @@ -0,0 +1,34 @@ +# UserLite + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [readonly] +**first_name** | **str** | | [readonly] +**last_name** | **str** | | [readonly] +**email** | **str** | | [readonly] +**avatar** | **str** | | [optional] [readonly] +**avatar_url** | **str** | Avatar URL | [optional] [readonly] +**display_name** | **str** | | [readonly] + +## Example + +```python +from plane.models.user_lite import UserLite + +# TODO update the JSON string below +json = "{}" +# create an instance of UserLite from a JSON string +user_lite_instance = UserLite.from_json(json) +# print the JSON string representation of the object +print UserLite.to_json() + +# convert the object into a dict +user_lite_dict = user_lite_instance.to_dict() +# create an instance of UserLite from a dict +user_lite_from_dict = UserLite.from_dict(user_lite_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsersApi.md b/docs/UsersApi.md new file mode 100644 index 0000000..30f9f00 --- /dev/null +++ b/docs/UsersApi.md @@ -0,0 +1,84 @@ +# plane.UsersApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_current_user**](UsersApi.md#get_current_user) | **GET** /users/me/ | Get User + + +# **get_current_user** +> UserLite get_current_user() + +Get User + +Get the current user + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.user_lite import UserLite +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.UsersApi(api_client) + + try: + # Get User + api_response = api_instance.get_current_user() + print("The response of UsersApi->get_current_user:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UsersApi->get_current_user: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**UserLite**](UserLite.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | User retrieved | - | +**401** | Authentication credentials were not provided or are invalid. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/WorkItemsApi.md b/docs/WorkItemsApi.md new file mode 100644 index 0000000..67356ac --- /dev/null +++ b/docs/WorkItemsApi.md @@ -0,0 +1,1936 @@ +# plane.WorkItemsApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_issue_comment**](WorkItemsApi.md#create_issue_comment) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/ | Create an issue comment +[**create_issue_link**](WorkItemsApi.md#create_issue_link) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/ | Create an issue link +[**create_work_item**](WorkItemsApi.md#create_work_item) | **POST** /workspaces/{slug}/projects/{project_id}/issues/ | Create an work item +[**delete_issue_attachment**](WorkItemsApi.md#delete_issue_attachment) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/ | Delete an issue attachment +[**delete_issue_comment**](WorkItemsApi.md#delete_issue_comment) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Delete an issue comment +[**delete_issue_link**](WorkItemsApi.md#delete_issue_link) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Delete an issue link +[**delete_work_item**](WorkItemsApi.md#delete_work_item) | **DELETE** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Delete an work item +[**get_issue_activities**](WorkItemsApi.md#get_issue_activities) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/ | Get issue activities +[**get_issue_activities2**](WorkItemsApi.md#get_issue_activities2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{id}/ | Get issue activities +[**get_issue_attachment**](WorkItemsApi.md#get_issue_attachment) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/ | Get an issue attachment +[**get_issue_attachment2**](WorkItemsApi.md#get_issue_attachment2) | **POST** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/ | Get issue attachment +[**get_issue_attachment3**](WorkItemsApi.md#get_issue_attachment3) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/ | Get an issue attachment +[**get_issue_comments**](WorkItemsApi.md#get_issue_comments) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/ | Get issue comments +[**get_issue_comments2**](WorkItemsApi.md#get_issue_comments2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Get issue comments +[**get_issue_links**](WorkItemsApi.md#get_issue_links) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/ | Get issue links +[**get_issue_links2**](WorkItemsApi.md#get_issue_links2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Get issue links +[**get_work_item**](WorkItemsApi.md#get_work_item) | **GET** /workspaces/{slug}/projects/{project_id}/issues/ | Work Item retrieve endpoints +[**get_work_item2**](WorkItemsApi.md#get_work_item2) | **GET** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Work Item retrieve endpoints +[**patch_work_item**](WorkItemsApi.md#patch_work_item) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{id}/ | Patch an work item +[**update_issue_comment**](WorkItemsApi.md#update_issue_comment) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/ | Update an issue comment +[**update_issue_link**](WorkItemsApi.md#update_issue_link) | **PATCH** /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/ | Update an issue link + + +# **create_issue_comment** +> IssueComment create_issue_comment(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_comment_request=create_issue_comment_request) + +Create an issue comment + +Create a new comment for an issue. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_issue_comment_request import CreateIssueCommentRequest +from plane.models.issue_comment import IssueComment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + create_issue_comment_request = plane.CreateIssueCommentRequest() # CreateIssueCommentRequest | (optional) + + try: + # Create an issue comment + api_response = api_instance.create_issue_comment(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_comment_request=create_issue_comment_request) + print("The response of WorkItemsApi->create_issue_comment:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->create_issue_comment: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **create_issue_comment_request** | [**CreateIssueCommentRequest**](CreateIssueCommentRequest.md)| | [optional] + +### Return type + +[**IssueComment**](IssueComment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Issue comment created successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_issue_link** +> IssueLink create_issue_link(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_link_request=create_issue_link_request) + +Create an issue link + +Create a new issue link in a project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_issue_link_request import CreateIssueLinkRequest +from plane.models.issue_link import IssueLink +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + create_issue_link_request = plane.CreateIssueLinkRequest() # CreateIssueLinkRequest | (optional) + + try: + # Create an issue link + api_response = api_instance.create_issue_link(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_link_request=create_issue_link_request) + print("The response of WorkItemsApi->create_issue_link:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->create_issue_link: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **create_issue_link_request** | [**CreateIssueLinkRequest**](CreateIssueLinkRequest.md)| | [optional] + +### Return type + +[**IssueLink**](IssueLink.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Issue link created successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_work_item** +> Issue create_work_item(project_id, slug, issue) + +Create an work item + +Create a new work item in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + issue = plane.Issue() # Issue | + + try: + # Create an work item + api_response = api_instance.create_work_item(project_id, slug, issue) + print("The response of WorkItemsApi->create_work_item:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->create_work_item: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **slug** | **str**| | + **issue** | [**Issue**](Issue.md)| | + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Work Item created successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Project not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_issue_attachment** +> delete_issue_attachment(id, issue_id, pk, project_id, slug, slug2) + +Delete an issue attachment + +Delete an issue attachment + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue Attachment ID + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Delete an issue attachment + api_instance.delete_issue_attachment(id, issue_id, pk, project_id, slug, slug2) + except Exception as e: + print("Exception when calling WorkItemsApi->delete_issue_attachment: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| Issue ID | + **pk** | **str**| Issue Attachment ID | + **project_id** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Issue attachment deleted successfully | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue attachment not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_issue_comment** +> delete_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2) + +Delete an issue comment + +Delete an existing comment for an issue. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue comment ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Delete an issue comment + api_instance.delete_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2) + except Exception as e: + print("Exception when calling WorkItemsApi->delete_issue_comment: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **pk** | **str**| Issue comment ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Issue comment deleted successfully | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue comment not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_issue_link** +> delete_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2) + +Delete an issue link + +Delete an issue link in a project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue link ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Delete an issue link + api_instance.delete_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2) + except Exception as e: + print("Exception when calling WorkItemsApi->delete_issue_link: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **pk** | **str**| Issue link ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Issue link deleted successfully | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue link not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_work_item** +> delete_work_item(id, project_id, slug) + +Delete an work item + +Delete an existing work item in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + + try: + # Delete an work item + api_instance.delete_work_item(id, project_id, slug) + except Exception as e: + print("Exception when calling WorkItemsApi->delete_work_item: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Work Item deleted successfully | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Work Item not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_activities** +> IssueActivity get_issue_activities(issue_id, project_id, slug) + +Get issue activities + +Get issue activities + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_activity import IssueActivity +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Get issue activities + api_response = api_instance.get_issue_activities(issue_id, project_id, slug) + print("The response of WorkItemsApi->get_issue_activities:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_activities: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| Issue ID | + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +[**IssueActivity**](IssueActivity.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue activities | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_activities2** +> IssueActivity get_issue_activities2(id, issue_id, project_id, slug) + +Get issue activities + +Get issue activities + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_activity import IssueActivity +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Get issue activities + api_response = api_instance.get_issue_activities2(id, issue_id, project_id, slug) + print("The response of WorkItemsApi->get_issue_activities2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_activities2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| Issue ID | + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +[**IssueActivity**](IssueActivity.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue activities | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_attachment** +> IssueAttachment get_issue_attachment(issue_id, project_id, slug, slug2) + +Get an issue attachment + +Get an issue attachment + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_attachment import IssueAttachment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get an issue attachment + api_response = api_instance.get_issue_attachment(issue_id, project_id, slug, slug2) + print("The response of WorkItemsApi->get_issue_attachment:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_attachment: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueAttachment**](IssueAttachment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue attachment | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue attachment not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_attachment2** +> get_issue_attachment2(issue_id, pk, project_id, slug, get_issue_attachment2_request=get_issue_attachment2_request) + +Get issue attachment + + + Get an issue attachment. + + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue Attachment ID + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + get_issue_attachment2_request = plane.GetIssueAttachment2Request() # GetIssueAttachment2Request | (optional) + + try: + # Get issue attachment + api_instance.get_issue_attachment2(issue_id, pk, project_id, slug, get_issue_attachment2_request=get_issue_attachment2_request) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_attachment2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| Issue ID | + **pk** | **str**| Issue Attachment ID | + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + **get_issue_attachment2_request** | [**GetIssueAttachment2Request**](GetIssueAttachment2Request.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Presigned download URL generated successfully | - | +**400** | Validation error | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue or Project or Workspace not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_attachment3** +> IssueAttachment get_issue_attachment3(id, issue_id, project_id, slug, slug2) + +Get an issue attachment + +Get an issue attachment + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_attachment import IssueAttachment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get an issue attachment + api_response = api_instance.get_issue_attachment3(id, issue_id, project_id, slug, slug2) + print("The response of WorkItemsApi->get_issue_attachment3:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_attachment3: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueAttachment**](IssueAttachment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue attachment | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue attachment not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_comments** +> IssueComment get_issue_comments(issue_id, issue_id2, project_id, project_id2, slug, slug2) + +Get issue comments + +Get all comments for an issue. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_comment import IssueComment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get issue comments + api_response = api_instance.get_issue_comments(issue_id, issue_id2, project_id, project_id2, slug, slug2) + print("The response of WorkItemsApi->get_issue_comments:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_comments: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueComment**](IssueComment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue comments | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_comments2** +> IssueComment get_issue_comments2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2) + +Get issue comments + +Get all comments for an issue. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_comment import IssueComment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get issue comments + api_response = api_instance.get_issue_comments2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2) + print("The response of WorkItemsApi->get_issue_comments2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_comments2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueComment**](IssueComment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue comments | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_links** +> IssueLink get_issue_links(issue_id, issue_id2, project_id, project_id2, slug, slug2) + +Get issue links + +Get all issue links in a project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_link import IssueLink +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get issue links + api_response = api_instance.get_issue_links(issue_id, issue_id2, project_id, project_id2, slug, slug2) + print("The response of WorkItemsApi->get_issue_links:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_links: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueLink**](IssueLink.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue links | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_issue_links2** +> IssueLink get_issue_links2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2) + +Get issue links + +Get all issue links in a project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue_link import IssueLink +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + + try: + # Get issue links + api_response = api_instance.get_issue_links2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2) + print("The response of WorkItemsApi->get_issue_links2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_issue_links2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + +### Return type + +[**IssueLink**](IssueLink.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue links | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_work_item** +> Issue get_work_item(project_id, slug) + +Work Item retrieve endpoints + + + List all work items in a project if pk is None, otherwise retrieve a specific work item. + + When pk is None: + Returns a list of all work items in the project. + + When pk is provided: + Returns the details of a specific work item. + + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Work Item retrieve endpoints + api_response = api_instance.get_work_item(project_id, slug) + print("The response of WorkItemsApi->get_work_item:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_work_item: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of issues or issue details | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_work_item2** +> Issue get_work_item2(id, project_id, slug) + +Work Item retrieve endpoints + + + List all work items in a project if pk is None, otherwise retrieve a specific work item. + + When pk is None: + Returns a list of all work items in the project. + + When pk is provided: + Returns the details of a specific work item. + + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | Workspace slug + + try: + # Work Item retrieve endpoints + api_response = api_instance.get_work_item2(id, project_id, slug) + print("The response of WorkItemsApi->get_work_item2:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->get_work_item2: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| Project ID | + **slug** | **str**| Workspace slug | + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of issues or issue details | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **patch_work_item** +> Issue patch_work_item(id, project_id, slug, patched_issue=patched_issue) + +Patch an work item + +Patch an existing work item in the project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.issue import Issue +from plane.models.patched_issue import PatchedIssue +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + project_id = 'project_id_example' # str | + slug = 'slug_example' # str | + patched_issue = plane.PatchedIssue() # PatchedIssue | (optional) + + try: + # Patch an work item + api_response = api_instance.patch_work_item(id, project_id, slug, patched_issue=patched_issue) + print("The response of WorkItemsApi->patch_work_item:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->patch_work_item: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **project_id** | **str**| | + **slug** | **str**| | + **patched_issue** | [**PatchedIssue**](PatchedIssue.md)| | [optional] + +### Return type + +[**Issue**](Issue.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json, application/x-www-form-urlencoded, multipart/form-data + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Work Item patched successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Work Item not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_issue_comment** +> IssueComment update_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_comment_request=create_issue_comment_request) + +Update an issue comment + +Update an existing comment for an issue. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_issue_comment_request import CreateIssueCommentRequest +from plane.models.issue_comment import IssueComment +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue comment ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + create_issue_comment_request = plane.CreateIssueCommentRequest() # CreateIssueCommentRequest | (optional) + + try: + # Update an issue comment + api_response = api_instance.update_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_comment_request=create_issue_comment_request) + print("The response of WorkItemsApi->update_issue_comment:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->update_issue_comment: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **pk** | **str**| Issue comment ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **create_issue_comment_request** | [**CreateIssueCommentRequest**](CreateIssueCommentRequest.md)| | [optional] + +### Return type + +[**IssueComment**](IssueComment.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue comment updated successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue comment not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_issue_link** +> IssueLink update_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_link_request=create_issue_link_request) + +Update an issue link + +Update an issue link in a project. + +### Example + +* Api Key Authentication (ApiKeyAuthentication): +```python +import time +import os +import plane +from plane.models.create_issue_link_request import CreateIssueLinkRequest +from plane.models.issue_link import IssueLink +from plane.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to /api/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = plane.Configuration( + host = "/api/v1" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: ApiKeyAuthentication +configuration.api_key['ApiKeyAuthentication'] = os.environ["API_KEY"] + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['ApiKeyAuthentication'] = 'Bearer' + +# Enter a context with an instance of the API client +with plane.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = plane.WorkItemsApi(api_client) + id = 'id_example' # str | + issue_id = 'issue_id_example' # str | + issue_id2 = 'issue_id_example' # str | Issue ID + pk = 'pk_example' # str | Issue link ID + project_id = 'project_id_example' # str | + project_id2 = 'project_id_example' # str | Project ID + slug = 'slug_example' # str | + slug2 = 'slug_example' # str | Workspace slug + create_issue_link_request = plane.CreateIssueLinkRequest() # CreateIssueLinkRequest | (optional) + + try: + # Update an issue link + api_response = api_instance.update_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_link_request=create_issue_link_request) + print("The response of WorkItemsApi->update_issue_link:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WorkItemsApi->update_issue_link: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **issue_id** | **str**| | + **issue_id2** | **str**| Issue ID | + **pk** | **str**| Issue link ID | + **project_id** | **str**| | + **project_id2** | **str**| Project ID | + **slug** | **str**| | + **slug2** | **str**| Workspace slug | + **create_issue_link_request** | [**CreateIssueLinkRequest**](CreateIssueLinkRequest.md)| | [optional] + +### Return type + +[**IssueLink**](IssueLink.md) + +### Authorization + +[ApiKeyAuthentication](../README.md#ApiKeyAuthentication) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Issue link updated successfully | - | +**400** | Invalid request data | - | +**401** | Authentication credentials were not provided or are invalid. | - | +**403** | Permission denied. User lacks required permissions. | - | +**404** | Issue link not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/examples/basic_usage.py b/examples/basic_usage.py deleted file mode 100644 index b64efad..0000000 --- a/examples/basic_usage.py +++ /dev/null @@ -1,91 +0,0 @@ -"""Basic usage examples for the API SDK (Project info).""" - -import asyncio -import os -from plane import Client, Config, SyncClient - - -async def async_example(): - """Example using async client for projects.""" - config = Config( - api_key=os.getenv("MY_API_KEY", "your-api-key"), - base_url="https://api.plane.so/api/v1", - ) - - async with Client(config) as client: - # Check API health - health = await client.health_check() - print(f"API Health: {health}") - - # List workspaces - ws_result = await client.workspaces.list(page=1, per_page=5) - workspaces = ws_result["workspaces"] - if not workspaces: - print("No workspaces found.") - return - workspace = workspaces[0] - print(f"Using workspace: {workspace.name} (slug: {workspace.slug})") - - # List projects in the workspace - proj_result = await client.projects.list(workspace.slug, page=1, per_page=10) - projects = proj_result["projects"] - pagination = proj_result["pagination"] - print( - f"Found {len(projects)} projects (page {pagination.page} of {pagination.total_pages})" - ) - for project in projects: - print(f"- {project.name} (id: {project.id}, desc: {project.description})") - - # Get a specific project (first one) - if projects: - project = await client.projects.get(workspace.slug, projects[0].id) - print( - f"Project details: {project.name} (id: {project.id}) - {project.description}" - ) - - -def sync_example(): - """Example using synchronous client for projects.""" - config = Config( - api_key=os.getenv("MY_API_KEY", "your-api-key"), - base_url="https://api.plane.so/api/v1", - ) - - with SyncClient(config) as client: - # Check API health - health = client.health_check() - print(f"API Health: {health}") - - # List workspaces - ws_result = client.workspaces.list(page=1, per_page=5) - workspaces = ws_result["workspaces"] - if not workspaces: - print("No workspaces found.") - return - workspace = workspaces[0] - print(f"Using workspace: {workspace.name} (slug: {workspace.slug})") - - # List projects in the workspace - proj_result = client.projects.list(workspace.slug, page=1, per_page=10) - projects = proj_result["projects"] - pagination = proj_result["pagination"] - print( - f"Found {len(projects)} projects (page {pagination.page} of {pagination.total_pages})" - ) - for project in projects: - print(f"- {project.name} (id: {project.id}, desc: {project.description})") - - # Get a specific project (first one) - if projects: - project = client.projects.get(workspace.slug, projects[0].id) - print( - f"Project details: {project.name} (id: {project.id}) - {project.description}" - ) - - -if __name__ == "__main__": - print("=== Async Example ===") - asyncio.run(async_example()) - - print("\n=== Sync Example ===") - sync_example() diff --git a/git_push.sh b/git_push.sh new file mode 100644 index 0000000..f53a75d --- /dev/null +++ b/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/openapitools.json b/openapitools.json new file mode 100644 index 0000000..151c200 --- /dev/null +++ b/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.13.0" + } +} diff --git a/plane/__init__.py b/plane/__init__.py new file mode 100644 index 0000000..978e103 --- /dev/null +++ b/plane/__init__.py @@ -0,0 +1,87 @@ +# coding: utf-8 + +# flake8: noqa + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +__version__ = "1.0.0" + +# import apis into sdk package +from plane.api.assets_api import AssetsApi +from plane.api.cycles_api import CyclesApi +from plane.api.general_api import GeneralApi +from plane.api.intake_api import IntakeApi +from plane.api.labels_api import LabelsApi +from plane.api.members_api import MembersApi +from plane.api.modules_api import ModulesApi +from plane.api.projects_api import ProjectsApi +from plane.api.states_api import StatesApi +from plane.api.users_api import UsersApi +from plane.api.work_items_api import WorkItemsApi + +# import ApiClient +from plane.api_response import ApiResponse +from plane.api_client import ApiClient +from plane.configuration import Configuration +from plane.exceptions import OpenApiException +from plane.exceptions import ApiTypeError +from plane.exceptions import ApiValueError +from plane.exceptions import ApiKeyError +from plane.exceptions import ApiAttributeError +from plane.exceptions import ApiException + +# import models into sdk package +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.create_cycle_request import CreateCycleRequest +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue +from plane.models.create_intake_issue_request_issue_issue import CreateIntakeIssueRequestIssueIssue +from plane.models.create_issue_comment_request import CreateIssueCommentRequest +from plane.models.create_issue_link_request import CreateIssueLinkRequest +from plane.models.create_label_request import CreateLabelRequest +from plane.models.create_module_request import CreateModuleRequest +from plane.models.create_project_request import CreateProjectRequest +from plane.models.create_state_request import CreateStateRequest +from plane.models.cycle import Cycle +from plane.models.cycle_issue import CycleIssue +from plane.models.cycle_lite import CycleLite +from plane.models.generic_asset_upload import GenericAssetUpload +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner +from plane.models.intake_issue import IntakeIssue +from plane.models.issue import Issue +from plane.models.issue_activity import IssueActivity +from plane.models.issue_attachment import IssueAttachment +from plane.models.issue_comment import IssueComment +from plane.models.issue_expand import IssueExpand +from plane.models.issue_link import IssueLink +from plane.models.label import Label +from plane.models.label_lite import LabelLite +from plane.models.module import Module +from plane.models.module_issue import ModuleIssue +from plane.models.module_lite import ModuleLite +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate +from plane.models.patched_issue import PatchedIssue +from plane.models.patched_project import PatchedProject +from plane.models.project import Project +from plane.models.search_issues200_response import SearchIssues200Response +from plane.models.search_issues200_response_issues_inner import SearchIssues200ResponseIssuesInner +from plane.models.state import State +from plane.models.state_lite import StateLite +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response +from plane.models.transfer_cycle_issues400_response import TransferCycleIssues400Response +from plane.models.update_cycle_request import UpdateCycleRequest +from plane.models.update_label_request import UpdateLabelRequest +from plane.models.user_asset_upload import UserAssetUpload +from plane.models.user_lite import UserLite diff --git a/plane/api/__init__.py b/plane/api/__init__.py new file mode 100644 index 0000000..c094144 --- /dev/null +++ b/plane/api/__init__.py @@ -0,0 +1,15 @@ +# flake8: noqa + +# import apis into api package +from plane.api.assets_api import AssetsApi +from plane.api.cycles_api import CyclesApi +from plane.api.general_api import GeneralApi +from plane.api.intake_api import IntakeApi +from plane.api.labels_api import LabelsApi +from plane.api.members_api import MembersApi +from plane.api.modules_api import ModulesApi +from plane.api.projects_api import ProjectsApi +from plane.api.states_api import StatesApi +from plane.api.users_api import UsersApi +from plane.api.work_items_api import WorkItemsApi + diff --git a/plane/api/assets_api.py b/plane/api/assets_api.py new file mode 100644 index 0000000..b950e0e --- /dev/null +++ b/plane/api/assets_api.py @@ -0,0 +1,2665 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import Optional + +from plane.models.generic_asset_upload import GenericAssetUpload +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate +from plane.models.user_asset_upload import UserAssetUpload + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class AssetsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_generic_asset_upload(self, slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], generic_asset_upload : GenericAssetUpload, **kwargs) -> None: # noqa: E501 + """Create Assets # noqa: E501 + + Generate presigned URL for generic asset upload. Create a presigned URL for uploading generic assets that can be bound to entities like issues. Supports various file types and includes external source tracking for integrations. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_generic_asset_upload(slug, generic_asset_upload, async_req=True) + >>> result = thread.get() + + :param slug: Workspace slug identifier (required) + :type slug: str + :param generic_asset_upload: (required) + :type generic_asset_upload: GenericAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_generic_asset_upload_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_generic_asset_upload_with_http_info(slug, generic_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_generic_asset_upload_with_http_info(self, slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], generic_asset_upload : GenericAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create Assets # noqa: E501 + + Generate presigned URL for generic asset upload. Create a presigned URL for uploading generic assets that can be bound to entities like issues. Supports various file types and includes external source tracking for integrations. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_generic_asset_upload_with_http_info(slug, generic_asset_upload, async_req=True) + >>> result = thread.get() + + :param slug: Workspace slug identifier (required) + :type slug: str + :param generic_asset_upload: (required) + :type generic_asset_upload: GenericAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'slug', + 'generic_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_generic_asset_upload" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['generic_asset_upload'] is not None: + _body_params = _params['generic_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_generic_asset_upload2(self, asset_id : StrictStr, slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], generic_asset_upload : GenericAssetUpload, **kwargs) -> None: # noqa: E501 + """Create Assets # noqa: E501 + + Generate presigned URL for generic asset upload. Create a presigned URL for uploading generic assets that can be bound to entities like issues. Supports various file types and includes external source tracking for integrations. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_generic_asset_upload2(asset_id, slug, generic_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param generic_asset_upload: (required) + :type generic_asset_upload: GenericAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_generic_asset_upload2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_generic_asset_upload2_with_http_info(asset_id, slug, generic_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_generic_asset_upload2_with_http_info(self, asset_id : StrictStr, slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], generic_asset_upload : GenericAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create Assets # noqa: E501 + + Generate presigned URL for generic asset upload. Create a presigned URL for uploading generic assets that can be bound to entities like issues. Supports various file types and includes external source tracking for integrations. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_generic_asset_upload2_with_http_info(asset_id, slug, generic_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param generic_asset_upload: (required) + :type generic_asset_upload: GenericAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'slug', + 'generic_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_generic_asset_upload2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['generic_asset_upload'] is not None: + _body_params = _params['generic_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/{asset_id}/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_user_asset_upload(self, user_asset_upload : UserAssetUpload, **kwargs) -> None: # noqa: E501 + """Create User Assets # noqa: E501 + + Generate presigned URL for user asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image). This endpoint generates the necessary credentials for direct S3 upload. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_asset_upload(user_asset_upload, async_req=True) + >>> result = thread.get() + + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_user_asset_upload_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_user_asset_upload_with_http_info(user_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_user_asset_upload_with_http_info(self, user_asset_upload : UserAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create User Assets # noqa: E501 + + Generate presigned URL for user asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image). This endpoint generates the necessary credentials for direct S3 upload. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_asset_upload_with_http_info(user_asset_upload, async_req=True) + >>> result = thread.get() + + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'user_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_user_asset_upload" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['user_asset_upload'] is not None: + _body_params = _params['user_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_user_asset_upload2(self, asset_id : StrictStr, user_asset_upload : UserAssetUpload, **kwargs) -> None: # noqa: E501 + """Create User Assets # noqa: E501 + + Generate presigned URL for user asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image). This endpoint generates the necessary credentials for direct S3 upload. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_asset_upload2(asset_id, user_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_user_asset_upload2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_user_asset_upload2_with_http_info(asset_id, user_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_user_asset_upload2_with_http_info(self, asset_id : StrictStr, user_asset_upload : UserAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create User Assets # noqa: E501 + + Generate presigned URL for user asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image). This endpoint generates the necessary credentials for direct S3 upload. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_asset_upload2_with_http_info(asset_id, user_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'user_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_user_asset_upload2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['user_asset_upload'] is not None: + _body_params = _params['user_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_user_server_asset_upload(self, user_asset_upload : UserAssetUpload, **kwargs) -> None: # noqa: E501 + """Create Server # noqa: E501 + + Generate presigned URL for user server asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_server_asset_upload(user_asset_upload, async_req=True) + >>> result = thread.get() + + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_user_server_asset_upload_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_user_server_asset_upload_with_http_info(user_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_user_server_asset_upload_with_http_info(self, user_asset_upload : UserAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create Server # noqa: E501 + + Generate presigned URL for user server asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_server_asset_upload_with_http_info(user_asset_upload, async_req=True) + >>> result = thread.get() + + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'user_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_user_server_asset_upload" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['user_asset_upload'] is not None: + _body_params = _params['user_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/server/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_user_server_asset_upload2(self, asset_id : StrictStr, user_asset_upload : UserAssetUpload, **kwargs) -> None: # noqa: E501 + """Create Server # noqa: E501 + + Generate presigned URL for user server asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_server_asset_upload2(asset_id, user_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_user_server_asset_upload2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_user_server_asset_upload2_with_http_info(asset_id, user_asset_upload, **kwargs) # noqa: E501 + + @validate_arguments + def create_user_server_asset_upload2_with_http_info(self, asset_id : StrictStr, user_asset_upload : UserAssetUpload, **kwargs) -> ApiResponse: # noqa: E501 + """Create Server # noqa: E501 + + Generate presigned URL for user server asset upload. Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_server_asset_upload2_with_http_info(asset_id, user_asset_upload, async_req=True) + >>> result = thread.get() + + :param asset_id: (required) + :type asset_id: str + :param user_asset_upload: (required) + :type user_asset_upload: UserAssetUpload + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'user_asset_upload' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_user_server_asset_upload2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['user_asset_upload'] is not None: + _body_params = _params['user_asset_upload'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/server/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_user_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> None: # noqa: E501 + """Delete User Assets # noqa: E501 + + Delete user asset. Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_asset(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_user_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_user_asset_with_http_info(asset_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_user_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete User Assets # noqa: E501 + + Delete user asset. Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_asset_with_http_info(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_user_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_user_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> None: # noqa: E501 + """Delete User Assets # noqa: E501 + + Delete user asset. Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_asset2(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_user_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_user_asset2_with_http_info(asset_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_user_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete User Assets # noqa: E501 + + Delete user asset. Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_asset2_with_http_info(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_user_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_user_server_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> None: # noqa: E501 + """Delete Server # noqa: E501 + + Delete user server asset. Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_server_asset(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_user_server_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_user_server_asset_with_http_info(asset_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_user_server_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete Server # noqa: E501 + + Delete user server asset. Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_server_asset_with_http_info(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_user_server_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/server/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_user_server_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> None: # noqa: E501 + """Delete Server # noqa: E501 + + Delete user server asset. Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_server_asset2(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_user_server_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_user_server_asset2_with_http_info(asset_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_user_server_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete Server # noqa: E501 + + Delete user server asset. Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. This performs a soft delete by marking the asset as deleted and updating the user's profile. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_server_asset2_with_http_info(asset_id, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_user_server_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/server/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_generic_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], **kwargs) -> None: # noqa: E501 + """Retrieve Assets # noqa: E501 + + Get presigned URL for asset download. Generate a presigned URL for downloading a generic asset. The asset must be uploaded and associated with the specified workspace. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_generic_asset(asset_id, slug, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_generic_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_generic_asset_with_http_info(asset_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_generic_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], **kwargs) -> ApiResponse: # noqa: E501 + """Retrieve Assets # noqa: E501 + + Get presigned URL for asset download. Generate a presigned URL for downloading a generic asset. The asset must be uploaded and associated with the specified workspace. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_generic_asset_with_http_info(asset_id, slug, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_generic_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_generic_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], **kwargs) -> None: # noqa: E501 + """Retrieve Assets # noqa: E501 + + Get presigned URL for asset download. Generate a presigned URL for downloading a generic asset. The asset must be uploaded and associated with the specified workspace. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_generic_asset2(asset_id, slug, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_generic_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_generic_asset2_with_http_info(asset_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_generic_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], **kwargs) -> ApiResponse: # noqa: E501 + """Retrieve Assets # noqa: E501 + + Get presigned URL for asset download. Generate a presigned URL for downloading a generic asset. The asset must be uploaded and associated with the specified workspace. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_generic_asset2_with_http_info(asset_id, slug, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_generic_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/{asset_id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_generic_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], patched_generic_asset_update : Optional[PatchedGenericAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update Assets # noqa: E501 + + Update generic asset after upload completion. Update the asset status after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded and trigger metadata extraction. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_generic_asset(asset_id, slug, patched_generic_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param patched_generic_asset_update: + :type patched_generic_asset_update: PatchedGenericAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_generic_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_generic_asset_with_http_info(asset_id, slug, patched_generic_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_generic_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], patched_generic_asset_update : Optional[PatchedGenericAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update Assets # noqa: E501 + + Update generic asset after upload completion. Update the asset status after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded and trigger metadata extraction. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_generic_asset_with_http_info(asset_id, slug, patched_generic_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param patched_generic_asset_update: + :type patched_generic_asset_update: PatchedGenericAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'slug', + 'patched_generic_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_generic_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_generic_asset_update'] is not None: + _body_params = _params['patched_generic_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_generic_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], patched_generic_asset_update : Optional[PatchedGenericAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update Assets # noqa: E501 + + Update generic asset after upload completion. Update the asset status after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded and trigger metadata extraction. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_generic_asset2(asset_id, slug, patched_generic_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param patched_generic_asset_update: + :type patched_generic_asset_update: PatchedGenericAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_generic_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_generic_asset2_with_http_info(asset_id, slug, patched_generic_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_generic_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], slug : Annotated[StrictStr, Field(..., description="Workspace slug identifier")], patched_generic_asset_update : Optional[PatchedGenericAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update Assets # noqa: E501 + + Update generic asset after upload completion. Update the asset status after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded and trigger metadata extraction. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_generic_asset2_with_http_info(asset_id, slug, patched_generic_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param slug: Workspace slug identifier (required) + :type slug: str + :param patched_generic_asset_update: + :type patched_generic_asset_update: PatchedGenericAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'slug', + 'patched_generic_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_generic_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_generic_asset_update'] is not None: + _body_params = _params['patched_generic_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/assets/{asset_id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_user_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update User Assets # noqa: E501 + + Update user asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_asset(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_user_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_user_asset_with_http_info(asset_id, patched_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_user_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update User Assets # noqa: E501 + + Update user asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_asset_with_http_info(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'patched_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_user_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_asset_update'] is not None: + _body_params = _params['patched_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_user_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update User Assets # noqa: E501 + + Update user asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_asset2(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_user_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_user_asset2_with_http_info(asset_id, patched_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_user_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update User Assets # noqa: E501 + + Update user asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_asset2_with_http_info(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'patched_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_user_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_asset_update'] is not None: + _body_params = _params['patched_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_user_server_asset(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update Server # noqa: E501 + + Update user server asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3 using server credentials. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_server_asset(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_user_server_asset_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_user_server_asset_with_http_info(asset_id, patched_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_user_server_asset_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update Server # noqa: E501 + + Update user server asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3 using server credentials. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_server_asset_with_http_info(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'patched_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_user_server_asset" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_asset_update'] is not None: + _body_params = _params['patched_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/server/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_user_server_asset2(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> None: # noqa: E501 + """Update Server # noqa: E501 + + Update user server asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3 using server credentials. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_server_asset2(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_user_server_asset2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_user_server_asset2_with_http_info(asset_id, patched_asset_update, **kwargs) # noqa: E501 + + @validate_arguments + def update_user_server_asset2_with_http_info(self, asset_id : Annotated[StrictStr, Field(..., description="UUID of the asset")], patched_asset_update : Optional[PatchedAssetUpdate] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update Server # noqa: E501 + + Update user server asset after upload completion. Update the asset status and attributes after the file has been uploaded to S3 using server credentials. This endpoint should be called after completing the S3 upload to mark the asset as uploaded. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_server_asset2_with_http_info(asset_id, patched_asset_update, async_req=True) + >>> result = thread.get() + + :param asset_id: UUID of the asset (required) + :type asset_id: str + :param patched_asset_update: + :type patched_asset_update: PatchedAssetUpdate + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'asset_id', + 'patched_asset_update' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_user_server_asset2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['asset_id'] is not None: + _path_params['asset_id'] = _params['asset_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_asset_update'] is not None: + _body_params = _params['patched_asset_update'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/assets/user-assets/{asset_id}/server/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/cycles_api.py b/plane/api/cycles_api.py new file mode 100644 index 0000000..09bc0ae --- /dev/null +++ b/plane/api/cycles_api.py @@ -0,0 +1,2115 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import Any, Dict, Optional + +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.create_cycle_request import CreateCycleRequest +from plane.models.cycle import Cycle +from plane.models.cycle_issue import CycleIssue +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response +from plane.models.update_cycle_request import UpdateCycleRequest + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class CyclesApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def add_cycle_issues(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, add_cycle_issues_request : Optional[AddCycleIssuesRequest] = None, **kwargs) -> CycleIssue: # noqa: E501 + """Add cycle issues # noqa: E501 + + Add cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.add_cycle_issues(cycle_id, project_id, slug, add_cycle_issues_request, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param add_cycle_issues_request: + :type add_cycle_issues_request: AddCycleIssuesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: CycleIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the add_cycle_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.add_cycle_issues_with_http_info(cycle_id, project_id, slug, add_cycle_issues_request, **kwargs) # noqa: E501 + + @validate_arguments + def add_cycle_issues_with_http_info(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, add_cycle_issues_request : Optional[AddCycleIssuesRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Add cycle issues # noqa: E501 + + Add cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.add_cycle_issues_with_http_info(cycle_id, project_id, slug, add_cycle_issues_request, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param add_cycle_issues_request: + :type add_cycle_issues_request: AddCycleIssuesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(CycleIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'project_id', + 'slug', + 'add_cycle_issues_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method add_cycle_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['add_cycle_issues_request'] is not None: + _body_params = _params['add_cycle_issues_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "CycleIssue", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def archive_cycle(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Archive cycle # noqa: E501 + + Archive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_cycle(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the archive_cycle_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.archive_cycle_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def archive_cycle_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Archive cycle # noqa: E501 + + Archive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_cycle_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method archive_cycle" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archived-cycles/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def archive_cycle2(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Archive cycle # noqa: E501 + + Archive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_cycle2(cycle_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the archive_cycle2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.archive_cycle2_with_http_info(cycle_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def archive_cycle2_with_http_info(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Archive cycle # noqa: E501 + + Archive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_cycle2_with_http_info(cycle_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method archive_cycle2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_cycle(self, project_id : StrictStr, slug : StrictStr, create_cycle_request : Optional[CreateCycleRequest] = None, **kwargs) -> Cycle: # noqa: E501 + """Create cycle # noqa: E501 + + Create cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_cycle(project_id, slug, create_cycle_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_cycle_request: + :type create_cycle_request: CreateCycleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Cycle + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_cycle_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_cycle_with_http_info(project_id, slug, create_cycle_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_cycle_with_http_info(self, project_id : StrictStr, slug : StrictStr, create_cycle_request : Optional[CreateCycleRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create cycle # noqa: E501 + + Create cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_cycle_with_http_info(project_id, slug, create_cycle_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_cycle_request: + :type create_cycle_request: CreateCycleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Cycle, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'create_cycle_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_cycle" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_cycle_request'] is not None: + _body_params = _params['create_cycle_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "Cycle", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_cycle(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete cycle # noqa: E501 + + Delete cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_cycle(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_cycle_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_cycle_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_cycle_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete cycle # noqa: E501 + + Delete cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_cycle_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_cycle" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_cycle_issue(self, cycle_id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete cycle issue # noqa: E501 + + Delete cycle issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_cycle_issue(cycle_id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_cycle_issue_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_cycle_issue_with_http_info(cycle_id, issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_cycle_issue_with_http_info(self, cycle_id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete cycle issue # noqa: E501 + + Delete cycle issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_cycle_issue_with_http_info(cycle_id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_cycle_issue" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_cycle_issues(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> CycleIssue: # noqa: E501 + """Get cycle issues # noqa: E501 + + Get cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycle_issues(cycle_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: CycleIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_cycle_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_cycle_issues_with_http_info(cycle_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_cycle_issues_with_http_info(self, cycle_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get cycle issues # noqa: E501 + + Get cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycle_issues_with_http_info(cycle_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(CycleIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_cycle_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "CycleIssue", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_cycle_issues2(self, cycle_id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> CycleIssue: # noqa: E501 + """Get cycle issues # noqa: E501 + + Get cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycle_issues2(cycle_id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: CycleIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_cycle_issues2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_cycle_issues2_with_http_info(cycle_id, issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_cycle_issues2_with_http_info(self, cycle_id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get cycle issues # noqa: E501 + + Get cycle issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycle_issues2_with_http_info(cycle_id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param cycle_id: (required) + :type cycle_id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(CycleIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_cycle_issues2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "CycleIssue", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_cycles(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> Cycle: # noqa: E501 + """Get cycles # noqa: E501 + + Get cycles # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycles(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Cycle + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_cycles_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_cycles_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_cycles_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get cycles # noqa: E501 + + Get cycles # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycles_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Cycle, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_cycles" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Cycle", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_cycles2(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> Cycle: # noqa: E501 + """Get cycles # noqa: E501 + + Get cycles # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycles2(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Cycle + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_cycles2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_cycles2_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_cycles2_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get cycles # noqa: E501 + + Get cycles # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_cycles2_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Cycle, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_cycles2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Cycle", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def transfer_cycle_issues(self, cycle_id : Annotated[StrictStr, Field(..., description="Cycle ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], request_body : Optional[Dict[str, Any]] = None, **kwargs) -> TransferCycleIssues200Response: # noqa: E501 + """Transfer issues to a new cycle # noqa: E501 + + Transfer issues from the current cycle to a new cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.transfer_cycle_issues(cycle_id, project_id, slug, request_body, async_req=True) + >>> result = thread.get() + + :param cycle_id: Cycle ID (required) + :type cycle_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param request_body: + :type request_body: Dict[str, object] + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: TransferCycleIssues200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the transfer_cycle_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.transfer_cycle_issues_with_http_info(cycle_id, project_id, slug, request_body, **kwargs) # noqa: E501 + + @validate_arguments + def transfer_cycle_issues_with_http_info(self, cycle_id : Annotated[StrictStr, Field(..., description="Cycle ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], request_body : Optional[Dict[str, Any]] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Transfer issues to a new cycle # noqa: E501 + + Transfer issues from the current cycle to a new cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.transfer_cycle_issues_with_http_info(cycle_id, project_id, slug, request_body, async_req=True) + >>> result = thread.get() + + :param cycle_id: Cycle ID (required) + :type cycle_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param request_body: + :type request_body: Dict[str, object] + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(TransferCycleIssues200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'cycle_id', + 'project_id', + 'slug', + 'request_body' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method transfer_cycle_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['cycle_id'] is not None: + _path_params['cycle_id'] = _params['cycle_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['request_body'] is not None: + _body_params = _params['request_body'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['type', 'required', 'properties'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "TransferCycleIssues200Response", + '400': "TransferCycleIssues400Response", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def unarchive_cycle(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Unarchive cycle # noqa: E501 + + Unarchive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_cycle(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the unarchive_cycle_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.unarchive_cycle_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def unarchive_cycle_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Unarchive cycle # noqa: E501 + + Unarchive cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_cycle_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method unarchive_cycle" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archived-cycles/{id}/unarchive/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_cycle(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, update_cycle_request : Optional[UpdateCycleRequest] = None, **kwargs) -> Cycle: # noqa: E501 + """Update cycle # noqa: E501 + + Update cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_cycle(id, project_id, slug, update_cycle_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param update_cycle_request: + :type update_cycle_request: UpdateCycleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Cycle + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_cycle_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_cycle_with_http_info(id, project_id, slug, update_cycle_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_cycle_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, update_cycle_request : Optional[UpdateCycleRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update cycle # noqa: E501 + + Update cycle # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_cycle_with_http_info(id, project_id, slug, update_cycle_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param update_cycle_request: + :type update_cycle_request: UpdateCycleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Cycle, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug', + 'update_cycle_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_cycle" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['update_cycle_request'] is not None: + _body_params = _params['update_cycle_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Cycle", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/cycles/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/general_api.py b/plane/api/general_api.py new file mode 100644 index 0000000..087ddbe --- /dev/null +++ b/plane/api/general_api.py @@ -0,0 +1,375 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictInt, StrictStr + +from typing import Optional + +from plane.models.issue import Issue +from plane.models.search_issues200_response import SearchIssues200Response + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class GeneralApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def search_issues(self, search : Annotated[StrictStr, Field(..., description="Search query")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], limit : Annotated[Optional[StrictInt], Field(description="Limit")] = None, project_id : Annotated[Optional[StrictStr], Field(description="Project ID")] = None, workspace_search : Annotated[Optional[StrictStr], Field(description="Workspace search")] = None, **kwargs) -> SearchIssues200Response: # noqa: E501 + """Search issues # noqa: E501 + + Search issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.search_issues(search, slug, limit, project_id, workspace_search, async_req=True) + >>> result = thread.get() + + :param search: Search query (required) + :type search: str + :param slug: Workspace slug (required) + :type slug: str + :param limit: Limit + :type limit: int + :param project_id: Project ID + :type project_id: str + :param workspace_search: Workspace search + :type workspace_search: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: SearchIssues200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the search_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.search_issues_with_http_info(search, slug, limit, project_id, workspace_search, **kwargs) # noqa: E501 + + @validate_arguments + def search_issues_with_http_info(self, search : Annotated[StrictStr, Field(..., description="Search query")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], limit : Annotated[Optional[StrictInt], Field(description="Limit")] = None, project_id : Annotated[Optional[StrictStr], Field(description="Project ID")] = None, workspace_search : Annotated[Optional[StrictStr], Field(description="Workspace search")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Search issues # noqa: E501 + + Search issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.search_issues_with_http_info(search, slug, limit, project_id, workspace_search, async_req=True) + >>> result = thread.get() + + :param search: Search query (required) + :type search: str + :param slug: Workspace slug (required) + :type slug: str + :param limit: Limit + :type limit: int + :param project_id: Project ID + :type project_id: str + :param workspace_search: Workspace search + :type workspace_search: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(SearchIssues200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'search', + 'slug', + 'limit', + 'project_id', + 'workspace_search' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method search_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('limit') is not None: # noqa: E501 + _query_params.append(('limit', _params['limit'])) + + if _params.get('project_id') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id'])) + + if _params.get('search') is not None: # noqa: E501 + _query_params.append(('search', _params['search'])) + + if _params.get('workspace_search') is not None: # noqa: E501 + _query_params.append(('workspace_search', _params['workspace_search'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "SearchIssues200Response", + } + + return self.api_client.call_api( + '/workspaces/{slug}/issues/search/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def workspaces_issues_retrieve(self, issue__identifier : StrictStr, project__identifier : StrictStr, slug : StrictStr, **kwargs) -> Issue: # noqa: E501 + """Retrieve Issues # noqa: E501 + + This viewset provides `retrieveByIssueId` on workspace level # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.workspaces_issues_retrieve(issue__identifier, project__identifier, slug, async_req=True) + >>> result = thread.get() + + :param issue__identifier: (required) + :type issue__identifier: str + :param project__identifier: (required) + :type project__identifier: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the workspaces_issues_retrieve_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.workspaces_issues_retrieve_with_http_info(issue__identifier, project__identifier, slug, **kwargs) # noqa: E501 + + @validate_arguments + def workspaces_issues_retrieve_with_http_info(self, issue__identifier : StrictStr, project__identifier : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Retrieve Issues # noqa: E501 + + This viewset provides `retrieveByIssueId` on workspace level # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.workspaces_issues_retrieve_with_http_info(issue__identifier, project__identifier, slug, async_req=True) + >>> result = thread.get() + + :param issue__identifier: (required) + :type issue__identifier: str + :param project__identifier: (required) + :type project__identifier: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue__identifier', + 'project__identifier', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method workspaces_issues_retrieve" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue__identifier'] is not None: + _path_params['issue__identifier'] = _params['issue__identifier'] + + if _params['project__identifier'] is not None: + _path_params['project__identifier'] = _params['project__identifier'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Issue", + } + + return self.api_client.call_api( + '/workspaces/{slug}/issues/{project__identifier}-{issue__identifier}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/intake_api.py b/plane/api/intake_api.py new file mode 100644 index 0000000..5fb3fc8 --- /dev/null +++ b/plane/api/intake_api.py @@ -0,0 +1,845 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import Optional + +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue +from plane.models.intake_issue import IntakeIssue + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class IntakeApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_intake_issue(self, project_id : StrictStr, slug : StrictStr, create_intake_issue_request : Optional[CreateIntakeIssueRequest] = None, **kwargs) -> IntakeIssue: # noqa: E501 + """Create intake issue # noqa: E501 + + Create intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_intake_issue(project_id, slug, create_intake_issue_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_intake_issue_request: + :type create_intake_issue_request: CreateIntakeIssueRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IntakeIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_intake_issue_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_intake_issue_with_http_info(project_id, slug, create_intake_issue_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_intake_issue_with_http_info(self, project_id : StrictStr, slug : StrictStr, create_intake_issue_request : Optional[CreateIntakeIssueRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create intake issue # noqa: E501 + + Create intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_intake_issue_with_http_info(project_id, slug, create_intake_issue_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_intake_issue_request: + :type create_intake_issue_request: CreateIntakeIssueRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IntakeIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'create_intake_issue_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_intake_issue" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_intake_issue_request'] is not None: + _body_params = _params['create_intake_issue_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "IntakeIssue", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/intake-issues/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_intake_issue(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete intake issue # noqa: E501 + + Delete intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_intake_issue(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_intake_issue_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_intake_issue_with_http_info(issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_intake_issue_with_http_info(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete intake issue # noqa: E501 + + Delete intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_intake_issue_with_http_info(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_intake_issue" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_intake_issues(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> IntakeIssue: # noqa: E501 + """Get intake issues # noqa: E501 + + Get intake issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_intake_issues(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IntakeIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_intake_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_intake_issues_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_intake_issues_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get intake issues # noqa: E501 + + Get intake issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_intake_issues_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IntakeIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_intake_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IntakeIssue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/intake-issues/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_intake_issues2(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> IntakeIssue: # noqa: E501 + """Get intake issues # noqa: E501 + + Get intake issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_intake_issues2(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IntakeIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_intake_issues2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_intake_issues2_with_http_info(issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_intake_issues2_with_http_info(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get intake issues # noqa: E501 + + Get intake issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_intake_issues2_with_http_info(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IntakeIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_intake_issues2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IntakeIssue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_intake_issue(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, create_intake_issue_request_issue : Optional[CreateIntakeIssueRequestIssue] = None, **kwargs) -> IntakeIssue: # noqa: E501 + """Update intake issue # noqa: E501 + + Update intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_intake_issue(issue_id, project_id, slug, create_intake_issue_request_issue, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_intake_issue_request_issue: + :type create_intake_issue_request_issue: CreateIntakeIssueRequestIssue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IntakeIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_intake_issue_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_intake_issue_with_http_info(issue_id, project_id, slug, create_intake_issue_request_issue, **kwargs) # noqa: E501 + + @validate_arguments + def update_intake_issue_with_http_info(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, create_intake_issue_request_issue : Optional[CreateIntakeIssueRequestIssue] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update intake issue # noqa: E501 + + Update intake issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_intake_issue_with_http_info(issue_id, project_id, slug, create_intake_issue_request_issue, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_intake_issue_request_issue: + :type create_intake_issue_request_issue: CreateIntakeIssueRequestIssue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IntakeIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'project_id', + 'slug', + 'create_intake_issue_request_issue' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_intake_issue" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_intake_issue_request_issue'] is not None: + _body_params = _params['create_intake_issue_request_issue'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IntakeIssue", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/labels_api.py b/plane/api/labels_api.py new file mode 100644 index 0000000..7bfb392 --- /dev/null +++ b/plane/api/labels_api.py @@ -0,0 +1,946 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import Optional + +from plane.models.create_label_request import CreateLabelRequest +from plane.models.label import Label +from plane.models.update_label_request import UpdateLabelRequest + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class LabelsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_label(self, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_label_request : Optional[CreateLabelRequest] = None, **kwargs) -> Label: # noqa: E501 + """Create a label # noqa: E501 + + Create a new label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_label(project_id, project_id2, slug, slug2, create_label_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_label_request: + :type create_label_request: CreateLabelRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Label + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_label_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_label_with_http_info(project_id, project_id2, slug, slug2, create_label_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_label_with_http_info(self, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_label_request : Optional[CreateLabelRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create a label # noqa: E501 + + Create a new label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_label_with_http_info(project_id, project_id2, slug, slug2, create_label_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_label_request: + :type create_label_request: CreateLabelRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Label, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'create_label_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_label" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_label_request'] is not None: + _body_params = _params['create_label_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "Label", + '400': "Label", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/labels/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_label(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Label ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Delete a label # noqa: E501 + + Delete a label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_label(id, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Label ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_label_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_label_with_http_info(id, pk, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def delete_label_with_http_info(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Label ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete a label # noqa: E501 + + Delete a label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_label_with_http_info(id, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Label ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_label" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/labels/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_labels(self, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> Label: # noqa: E501 + """Get labels # noqa: E501 + + Get all labels in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_labels(project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Label + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_labels_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_labels_with_http_info(project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_labels_with_http_info(self, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get labels # noqa: E501 + + Get all labels in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_labels_with_http_info(project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Label, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_labels" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Label", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/labels/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_labels2(self, id : StrictStr, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> Label: # noqa: E501 + """Get labels # noqa: E501 + + Get all labels in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_labels2(id, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Label + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_labels2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_labels2_with_http_info(id, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_labels2_with_http_info(self, id : StrictStr, project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get labels # noqa: E501 + + Get all labels in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_labels2_with_http_info(id, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Label, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_labels2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Label", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/labels/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_label(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Label ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], update_label_request : Optional[UpdateLabelRequest] = None, **kwargs) -> Label: # noqa: E501 + """Update a label # noqa: E501 + + Update a label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_label(id, pk, project_id, project_id2, slug, slug2, update_label_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Label ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param update_label_request: + :type update_label_request: UpdateLabelRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Label + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_label_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_label_with_http_info(id, pk, project_id, project_id2, slug, slug2, update_label_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_label_with_http_info(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Label ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], update_label_request : Optional[UpdateLabelRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update a label # noqa: E501 + + Update a label in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_label_with_http_info(id, pk, project_id, project_id2, slug, slug2, update_label_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Label ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param update_label_request: + :type update_label_request: UpdateLabelRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Label, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'update_label_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_label" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['update_label_request'] is not None: + _body_params = _params['update_label_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Label", + '400': "Label", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/labels/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/members_api.py b/plane/api/members_api.py new file mode 100644 index 0000000..4bf6358 --- /dev/null +++ b/plane/api/members_api.py @@ -0,0 +1,341 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import List + +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner +from plane.models.user_lite import UserLite + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class MembersApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_project_members(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> UserLite: # noqa: E501 + """Get all the users that are present inside the project # noqa: E501 + + Get all the users that are present inside the project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_project_members(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: UserLite + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_project_members_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_project_members_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_project_members_with_http_info(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get all the users that are present inside the project # noqa: E501 + + Get all the users that are present inside the project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_project_members_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(UserLite, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_members" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "UserLite", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/members/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_workspace_members(self, slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> List[GetWorkspaceMembers200ResponseInner]: # noqa: E501 + """Get all the users that are present inside the workspace # noqa: E501 + + Get all the users that are present inside the workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_workspace_members(slug, async_req=True) + >>> result = thread.get() + + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[GetWorkspaceMembers200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_workspace_members_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_workspace_members_with_http_info(slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_workspace_members_with_http_info(self, slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get all the users that are present inside the workspace # noqa: E501 + + Get all the users that are present inside the workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_workspace_members_with_http_info(slug, async_req=True) + >>> result = thread.get() + + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[GetWorkspaceMembers200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workspace_members" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "List[GetWorkspaceMembers200ResponseInner]", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/members/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/modules_api.py b/plane/api/modules_api.py new file mode 100644 index 0000000..a27c072 --- /dev/null +++ b/plane/api/modules_api.py @@ -0,0 +1,1787 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import Optional + +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.create_module_request import CreateModuleRequest +from plane.models.issue import Issue +from plane.models.module import Module +from plane.models.module_issue import ModuleIssue + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ModulesApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def add_module_issues(self, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, add_cycle_issues_request : Optional[AddCycleIssuesRequest] = None, **kwargs) -> ModuleIssue: # noqa: E501 + """Add module issues # noqa: E501 + + Add module issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.add_module_issues(module_id, project_id, slug, add_cycle_issues_request, async_req=True) + >>> result = thread.get() + + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param add_cycle_issues_request: + :type add_cycle_issues_request: AddCycleIssuesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ModuleIssue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the add_module_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.add_module_issues_with_http_info(module_id, project_id, slug, add_cycle_issues_request, **kwargs) # noqa: E501 + + @validate_arguments + def add_module_issues_with_http_info(self, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, add_cycle_issues_request : Optional[AddCycleIssuesRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Add module issues # noqa: E501 + + Add module issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.add_module_issues_with_http_info(module_id, project_id, slug, add_cycle_issues_request, async_req=True) + >>> result = thread.get() + + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param add_cycle_issues_request: + :type add_cycle_issues_request: AddCycleIssuesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ModuleIssue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'module_id', + 'project_id', + 'slug', + 'add_cycle_issues_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method add_module_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['module_id'] is not None: + _path_params['module_id'] = _params['module_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['add_cycle_issues_request'] is not None: + _body_params = _params['add_cycle_issues_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "ModuleIssue", + '400': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def archive_module(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Archive module # noqa: E501 + + Archive module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_module(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the archive_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.archive_module_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def archive_module_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Archive module # noqa: E501 + + Archive module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_module_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method archive_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{id}/archive/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_module(self, project_id : StrictStr, slug : StrictStr, create_module_request : Optional[CreateModuleRequest] = None, **kwargs) -> Module: # noqa: E501 + """Create module # noqa: E501 + + Create module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_module(project_id, slug, create_module_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_module_request: + :type create_module_request: CreateModuleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Module + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_module_with_http_info(project_id, slug, create_module_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_module_with_http_info(self, project_id : StrictStr, slug : StrictStr, create_module_request : Optional[CreateModuleRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create module # noqa: E501 + + Create module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_module_with_http_info(project_id, slug, create_module_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_module_request: + :type create_module_request: CreateModuleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Module, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'create_module_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_module_request'] is not None: + _body_params = _params['create_module_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "Module", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_module(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete module # noqa: E501 + + Delete module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_module(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_module_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_module_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete module # noqa: E501 + + Delete module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_module_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_module_issue(self, issue_id : StrictStr, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete module issue # noqa: E501 + + Delete module issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_module_issue(issue_id, module_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_module_issue_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_module_issue_with_http_info(issue_id, module_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_module_issue_with_http_info(self, issue_id : StrictStr, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete module issue # noqa: E501 + + Delete module issue # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_module_issue_with_http_info(issue_id, module_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'module_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_module_issue" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['module_id'] is not None: + _path_params['module_id'] = _params['module_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_archived_modules(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> Module: # noqa: E501 + """Get archived modules # noqa: E501 + + Get archived modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_archived_modules(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Module + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_archived_modules_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_archived_modules_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_archived_modules_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get archived modules # noqa: E501 + + Get archived modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_archived_modules_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Module, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_archived_modules" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Module", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archived-modules/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_module(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> Module: # noqa: E501 + """Get module # noqa: E501 + + Get modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Module + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_module_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_module_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get module # noqa: E501 + + Get modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Module, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Module", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_module2(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> Module: # noqa: E501 + """Get module # noqa: E501 + + Get modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module2(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Module + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_module2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_module2_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_module2_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get module # noqa: E501 + + Get modules # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module2_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Module, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_module2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Module", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_module_issues(self, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> Issue: # noqa: E501 + """Get module issues # noqa: E501 + + Get module issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module_issues(module_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_module_issues_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_module_issues_with_http_info(module_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_module_issues_with_http_info(self, module_id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get module issues # noqa: E501 + + Get module issues # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_module_issues_with_http_info(module_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param module_id: (required) + :type module_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'module_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_module_issues" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['module_id'] is not None: + _path_params['module_id'] = _params['module_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Issue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def unarchive_module(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Unarchive module # noqa: E501 + + Unarchive module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_module(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the unarchive_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.unarchive_module_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def unarchive_module_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Unarchive module # noqa: E501 + + Unarchive module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_module_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method unarchive_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archived-modules/{id}/unarchive/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_module(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, create_module_request : Optional[CreateModuleRequest] = None, **kwargs) -> Module: # noqa: E501 + """Update module # noqa: E501 + + Update module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_module(id, project_id, slug, create_module_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_module_request: + :type create_module_request: CreateModuleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Module + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_module_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_module_with_http_info(id, project_id, slug, create_module_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_module_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, create_module_request : Optional[CreateModuleRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update module # noqa: E501 + + Update module # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_module_with_http_info(id, project_id, slug, create_module_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_module_request: + :type create_module_request: CreateModuleRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Module, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug', + 'create_module_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_module" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_module_request'] is not None: + _body_params = _params['create_module_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Module", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/modules/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/projects_api.py b/plane/api/projects_api.py new file mode 100644 index 0000000..522734b --- /dev/null +++ b/plane/api/projects_api.py @@ -0,0 +1,1110 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import Optional + +from plane.models.create_project_request import CreateProjectRequest +from plane.models.patched_project import PatchedProject +from plane.models.project import Project + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ProjectsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def archive_project(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Archive Project # noqa: E501 + + Archive an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_project(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the archive_project_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.archive_project_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def archive_project_with_http_info(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Archive Project # noqa: E501 + + Archive an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.archive_project_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method archive_project" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archive/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_project(self, slug : StrictStr, create_project_request : Optional[CreateProjectRequest] = None, **kwargs) -> Project: # noqa: E501 + """Create Project # noqa: E501 + + Create a new project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_project(slug, create_project_request, async_req=True) + >>> result = thread.get() + + :param slug: (required) + :type slug: str + :param create_project_request: + :type create_project_request: CreateProjectRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Project + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_project_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_project_with_http_info(slug, create_project_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_project_with_http_info(self, slug : StrictStr, create_project_request : Optional[CreateProjectRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create Project # noqa: E501 + + Create a new project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_project_with_http_info(slug, create_project_request, async_req=True) + >>> result = thread.get() + + :param slug: (required) + :type slug: str + :param create_project_request: + :type create_project_request: CreateProjectRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Project, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'slug', + 'create_project_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_project" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_project_request'] is not None: + _body_params = _params['create_project_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "Project", + '401': None, + '403': None, + '404': None, + '409': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_project(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Delete Project # noqa: E501 + + Delete an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_project(id, pk, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Project ID (required) + :type pk: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_project_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_project_with_http_info(id, pk, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_project_with_http_info(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete Project # noqa: E501 + + Delete an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_project_with_http_info(id, pk, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Project ID (required) + :type pk: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'pk', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_project" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['pk'] is not None: + _path_params['pk'] = _params['pk'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_projects(self, slug : StrictStr, **kwargs) -> Project: # noqa: E501 + """List Projects # noqa: E501 + + List all projects in a workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_projects(slug, async_req=True) + >>> result = thread.get() + + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Project + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_projects_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_projects_with_http_info(slug, **kwargs) # noqa: E501 + + @validate_arguments + def list_projects_with_http_info(self, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """List Projects # noqa: E501 + + List all projects in a workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_projects_with_http_info(slug, async_req=True) + >>> result = thread.get() + + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Project, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_projects" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Project", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_projects2(self, id : StrictStr, slug : StrictStr, **kwargs) -> Project: # noqa: E501 + """List Projects # noqa: E501 + + List all projects in a workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_projects2(id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Project + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_projects2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_projects2_with_http_info(id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def list_projects2_with_http_info(self, id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """List Projects # noqa: E501 + + List all projects in a workspace # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_projects2_with_http_info(id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Project, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_projects2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Project", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def unarchive_project(self, project_id : StrictStr, slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Unarchive Project # noqa: E501 + + Unarchive an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_project(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the unarchive_project_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.unarchive_project_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def unarchive_project_with_http_info(self, project_id : StrictStr, slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Unarchive Project # noqa: E501 + + Unarchive an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.unarchive_project_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method unarchive_project" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/archive/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_project(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], patched_project : Optional[PatchedProject] = None, **kwargs) -> Project: # noqa: E501 + """Update Project # noqa: E501 + + Update an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_project(id, pk, slug, patched_project, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Project ID (required) + :type pk: str + :param slug: Workspace slug (required) + :type slug: str + :param patched_project: + :type patched_project: PatchedProject + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Project + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_project_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_project_with_http_info(id, pk, slug, patched_project, **kwargs) # noqa: E501 + + @validate_arguments + def update_project_with_http_info(self, id : StrictStr, pk : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], patched_project : Optional[PatchedProject] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update Project # noqa: E501 + + Update an existing project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_project_with_http_info(id, pk, slug, patched_project, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param pk: Project ID (required) + :type pk: str + :param slug: Workspace slug (required) + :type slug: str + :param patched_project: + :type patched_project: PatchedProject + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Project, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'pk', + 'slug', + 'patched_project' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_project" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['pk'] is not None: + _path_params['pk'] = _params['pk'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_project'] is not None: + _body_params = _params['patched_project'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Project", + '401': None, + '403': None, + '404': None, + '409': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/states_api.py b/plane/api/states_api.py new file mode 100644 index 0000000..86346e5 --- /dev/null +++ b/plane/api/states_api.py @@ -0,0 +1,841 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import Optional + +from plane.models.create_state_request import CreateStateRequest +from plane.models.state import State + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class StatesApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_state(self, project_id : StrictStr, slug : StrictStr, create_state_request : Optional[CreateStateRequest] = None, **kwargs) -> State: # noqa: E501 + """Create State # noqa: E501 + + Create a new state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_state(project_id, slug, create_state_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_state_request: + :type create_state_request: CreateStateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: State + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_state_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_state_with_http_info(project_id, slug, create_state_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_state_with_http_info(self, project_id : StrictStr, slug : StrictStr, create_state_request : Optional[CreateStateRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create State # noqa: E501 + + Create a new state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_state_with_http_info(project_id, slug, create_state_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param create_state_request: + :type create_state_request: CreateStateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(State, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'create_state_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_state" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_state_request'] is not None: + _body_params = _params['create_state_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "State", + '401': None, + '403': None, + '404': None, + '409': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/states/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_state(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete State # noqa: E501 + + Delete a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_state(project_id, slug, state_id, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_state_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_state_with_http_info(project_id, slug, state_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_state_with_http_info(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete State # noqa: E501 + + Delete a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_state_with_http_info(project_id, slug, state_id, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'state_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_state" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + if _params['state_id'] is not None: + _path_params['state_id'] = _params['state_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/states/{state_id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_state(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> State: # noqa: E501 + """Get State # noqa: E501 + + Get a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_state(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: State + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_state_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_state_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_state_with_http_info(self, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get State # noqa: E501 + + Get a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_state_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(State, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_state" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "State", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/states/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_state2(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, **kwargs) -> State: # noqa: E501 + """Get State # noqa: E501 + + Get a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_state2(project_id, slug, state_id, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: State + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_state2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_state2_with_http_info(project_id, slug, state_id, **kwargs) # noqa: E501 + + @validate_arguments + def get_state2_with_http_info(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get State # noqa: E501 + + Get a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_state2_with_http_info(project_id, slug, state_id, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(State, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'state_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_state2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + if _params['state_id'] is not None: + _path_params['state_id'] = _params['state_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "State", + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/states/{state_id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_state(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, create_state_request : Optional[CreateStateRequest] = None, **kwargs) -> State: # noqa: E501 + """Update State # noqa: E501 + + Update a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_state(project_id, slug, state_id, create_state_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param create_state_request: + :type create_state_request: CreateStateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: State + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_state_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_state_with_http_info(project_id, slug, state_id, create_state_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_state_with_http_info(self, project_id : StrictStr, slug : StrictStr, state_id : StrictStr, create_state_request : Optional[CreateStateRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update State # noqa: E501 + + Update a state for a project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_state_with_http_info(project_id, slug, state_id, create_state_request, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param state_id: (required) + :type state_id: str + :param create_state_request: + :type create_state_request: CreateStateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(State, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'state_id', + 'create_state_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_state" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + if _params['state_id'] is not None: + _path_params['state_id'] = _params['state_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_state_request'] is not None: + _body_params = _params['create_state_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "State", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/states/{state_id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/users_api.py b/plane/api/users_api.py new file mode 100644 index 0000000..5fb4ff7 --- /dev/null +++ b/plane/api/users_api.py @@ -0,0 +1,174 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from plane.models.user_lite import UserLite + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class UsersApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_current_user(self, **kwargs) -> UserLite: # noqa: E501 + """Get User # noqa: E501 + + Get the current user # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_current_user(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: UserLite + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_current_user_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_current_user_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def get_current_user_with_http_info(self, **kwargs) -> ApiResponse: # noqa: E501 + """Get User # noqa: E501 + + Get the current user # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_current_user_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(UserLite, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_current_user" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "UserLite", + '401': None, + } + + return self.api_client.call_api( + '/users/me/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api/work_items_api.py b/plane/api/work_items_api.py new file mode 100644 index 0000000..eff6fdc --- /dev/null +++ b/plane/api/work_items_api.py @@ -0,0 +1,3827 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr + +from typing import Optional + +from plane.models.create_issue_comment_request import CreateIssueCommentRequest +from plane.models.create_issue_link_request import CreateIssueLinkRequest +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request +from plane.models.issue import Issue +from plane.models.issue_activity import IssueActivity +from plane.models.issue_attachment import IssueAttachment +from plane.models.issue_comment import IssueComment +from plane.models.issue_link import IssueLink +from plane.models.patched_issue import PatchedIssue + +from plane.api_client import ApiClient +from plane.api_response import ApiResponse +from plane.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class WorkItemsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_issue_comment(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_comment_request : Optional[CreateIssueCommentRequest] = None, **kwargs) -> IssueComment: # noqa: E501 + """Create an issue comment # noqa: E501 + + Create a new comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_issue_comment(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_comment_request, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_comment_request: + :type create_issue_comment_request: CreateIssueCommentRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueComment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_issue_comment_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_issue_comment_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_comment_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_issue_comment_with_http_info(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_comment_request : Optional[CreateIssueCommentRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create an issue comment # noqa: E501 + + Create a new comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_issue_comment_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_comment_request, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_comment_request: + :type create_issue_comment_request: CreateIssueCommentRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueComment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'create_issue_comment_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_issue_comment" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_issue_comment_request'] is not None: + _body_params = _params['create_issue_comment_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "IssueComment", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_issue_link(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_link_request : Optional[CreateIssueLinkRequest] = None, **kwargs) -> IssueLink: # noqa: E501 + """Create an issue link # noqa: E501 + + Create a new issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_issue_link(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_link_request, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_link_request: + :type create_issue_link_request: CreateIssueLinkRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueLink + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_issue_link_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_issue_link_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_link_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_issue_link_with_http_info(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_link_request : Optional[CreateIssueLinkRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Create an issue link # noqa: E501 + + Create a new issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_issue_link_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, create_issue_link_request, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_link_request: + :type create_issue_link_request: CreateIssueLinkRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueLink, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'create_issue_link_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_issue_link" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_issue_link_request'] is not None: + _body_params = _params['create_issue_link_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "IssueLink", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_work_item(self, project_id : StrictStr, slug : StrictStr, issue : Issue, **kwargs) -> Issue: # noqa: E501 + """Create an work item # noqa: E501 + + Create a new work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_work_item(project_id, slug, issue, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param issue: (required) + :type issue: Issue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_work_item_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_work_item_with_http_info(project_id, slug, issue, **kwargs) # noqa: E501 + + @validate_arguments + def create_work_item_with_http_info(self, project_id : StrictStr, slug : StrictStr, issue : Issue, **kwargs) -> ApiResponse: # noqa: E501 + """Create an work item # noqa: E501 + + Create a new work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_work_item_with_http_info(project_id, slug, issue, async_req=True) + >>> result = thread.get() + + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param issue: (required) + :type issue: Issue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug', + 'issue' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_work_item" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['issue'] is not None: + _body_params = _params['issue'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '201': "Issue", + '400': "Issue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_issue_attachment(self, id : StrictStr, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue Attachment ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Delete an issue attachment # noqa: E501 + + Delete an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_attachment(id, issue_id, pk, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: Issue ID (required) + :type issue_id: str + :param pk: Issue Attachment ID (required) + :type pk: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_issue_attachment_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_issue_attachment_with_http_info(id, issue_id, pk, project_id, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def delete_issue_attachment_with_http_info(self, id : StrictStr, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue Attachment ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete an issue attachment # noqa: E501 + + Delete an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_attachment_with_http_info(id, issue_id, pk, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: Issue ID (required) + :type issue_id: str + :param pk: Issue Attachment ID (required) + :type pk: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'pk', + 'project_id', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_issue_attachment" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['pk'] is not None: + _path_params['pk'] = _params['pk'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_issue_comment(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue comment ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Delete an issue comment # noqa: E501 + + Delete an existing comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue comment ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_issue_comment_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_issue_comment_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def delete_issue_comment_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue comment ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete an issue comment # noqa: E501 + + Delete an existing comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_comment_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue comment ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_issue_comment" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_issue_link(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue link ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> None: # noqa: E501 + """Delete an issue link # noqa: E501 + + Delete an issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue link ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_issue_link_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_issue_link_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def delete_issue_link_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue link ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete an issue link # noqa: E501 + + Delete an issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_issue_link_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue link ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_issue_link" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_work_item(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> None: # noqa: E501 + """Delete an work item # noqa: E501 + + Delete an existing work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_work_item(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_work_item_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_work_item_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def delete_work_item_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete an work item # noqa: E501 + + Delete an existing work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_work_item_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_work_item" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{id}/', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_activities(self, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueActivity: # noqa: E501 + """Get issue activities # noqa: E501 + + Get issue activities # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_activities(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: Issue ID (required) + :type issue_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueActivity + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_activities_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_activities_with_http_info(issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_activities_with_http_info(self, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue activities # noqa: E501 + + Get issue activities # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_activities_with_http_info(issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param issue_id: Issue ID (required) + :type issue_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueActivity, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_activities" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueActivity", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_activities2(self, id : StrictStr, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueActivity: # noqa: E501 + """Get issue activities # noqa: E501 + + Get issue activities # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_activities2(id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: Issue ID (required) + :type issue_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueActivity + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_activities2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_activities2_with_http_info(id, issue_id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_activities2_with_http_info(self, id : StrictStr, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue activities # noqa: E501 + + Get issue activities # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_activities2_with_http_info(id, issue_id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: Issue ID (required) + :type issue_id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueActivity, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_activities2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueActivity", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_attachment(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueAttachment: # noqa: E501 + """Get an issue attachment # noqa: E501 + + Get an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment(issue_id, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueAttachment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_attachment_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_attachment_with_http_info(issue_id, project_id, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_attachment_with_http_info(self, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get an issue attachment # noqa: E501 + + Get an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment_with_http_info(issue_id, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueAttachment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'project_id', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_attachment" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueAttachment", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_attachment2(self, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue Attachment ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], get_issue_attachment2_request : Optional[GetIssueAttachment2Request] = None, **kwargs) -> None: # noqa: E501 + """Get issue attachment # noqa: E501 + + Get an issue attachment. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment2(issue_id, pk, project_id, slug, get_issue_attachment2_request, async_req=True) + >>> result = thread.get() + + :param issue_id: Issue ID (required) + :type issue_id: str + :param pk: Issue Attachment ID (required) + :type pk: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param get_issue_attachment2_request: + :type get_issue_attachment2_request: GetIssueAttachment2Request + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_attachment2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_attachment2_with_http_info(issue_id, pk, project_id, slug, get_issue_attachment2_request, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_attachment2_with_http_info(self, issue_id : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue Attachment ID")], project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], get_issue_attachment2_request : Optional[GetIssueAttachment2Request] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Get issue attachment # noqa: E501 + + Get an issue attachment. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment2_with_http_info(issue_id, pk, project_id, slug, get_issue_attachment2_request, async_req=True) + >>> result = thread.get() + + :param issue_id: Issue ID (required) + :type issue_id: str + :param pk: Issue Attachment ID (required) + :type pk: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param get_issue_attachment2_request: + :type get_issue_attachment2_request: GetIssueAttachment2Request + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'pk', + 'project_id', + 'slug', + 'get_issue_attachment2_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_attachment2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['pk'] is not None: + _path_params['pk'] = _params['pk'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['get_issue_attachment2_request'] is not None: + _body_params = _params['get_issue_attachment2_request'] + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_attachment3(self, id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueAttachment: # noqa: E501 + """Get an issue attachment # noqa: E501 + + Get an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment3(id, issue_id, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueAttachment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_attachment3_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_attachment3_with_http_info(id, issue_id, project_id, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_attachment3_with_http_info(self, id : StrictStr, issue_id : StrictStr, project_id : StrictStr, slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get an issue attachment # noqa: E501 + + Get an issue attachment # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_attachment3_with_http_info(id, issue_id, project_id, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueAttachment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'project_id', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_attachment3" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueAttachment", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_comments(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueComment: # noqa: E501 + """Get issue comments # noqa: E501 + + Get all comments for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_comments(issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueComment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_comments_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_comments_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_comments_with_http_info(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue comments # noqa: E501 + + Get all comments for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_comments_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueComment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_comments" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueComment", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_comments2(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueComment: # noqa: E501 + """Get issue comments # noqa: E501 + + Get all comments for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_comments2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueComment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_comments2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_comments2_with_http_info(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_comments2_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue comments # noqa: E501 + + Get all comments for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_comments2_with_http_info(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueComment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_comments2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueComment", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_links(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueLink: # noqa: E501 + """Get issue links # noqa: E501 + + Get all issue links in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_links(issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueLink + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_links_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_links_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_links_with_http_info(self, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue links # noqa: E501 + + Get all issue links in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_links_with_http_info(issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueLink, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_links" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueLink", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_issue_links2(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> IssueLink: # noqa: E501 + """Get issue links # noqa: E501 + + Get all issue links in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_links2(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueLink + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_issue_links2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_issue_links2_with_http_info(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, **kwargs) # noqa: E501 + + @validate_arguments + def get_issue_links2_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Get issue links # noqa: E501 + + Get all issue links in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_issue_links2_with_http_info(id, issue_id, issue_id2, project_id, project_id2, slug, slug2, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueLink, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'project_id', + 'project_id2', + 'slug', + 'slug2' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_issue_links2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueLink", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_work_item(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> Issue: # noqa: E501 + """Work Item retrieve endpoints # noqa: E501 + + List all work items in a project if pk is None, otherwise retrieve a specific work item. When pk is None: Returns a list of all work items in the project. When pk is provided: Returns the details of a specific work item. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_work_item(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_work_item_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_work_item_with_http_info(project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_work_item_with_http_info(self, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Work Item retrieve endpoints # noqa: E501 + + List all work items in a project if pk is None, otherwise retrieve a specific work item. When pk is None: Returns a list of all work items in the project. When pk is provided: Returns the details of a specific work item. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_work_item_with_http_info(project_id, slug, async_req=True) + >>> result = thread.get() + + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_work_item" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Issue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_work_item2(self, id : StrictStr, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> Issue: # noqa: E501 + """Work Item retrieve endpoints # noqa: E501 + + List all work items in a project if pk is None, otherwise retrieve a specific work item. When pk is None: Returns a list of all work items in the project. When pk is provided: Returns the details of a specific work item. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_work_item2(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_work_item2_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_work_item2_with_http_info(id, project_id, slug, **kwargs) # noqa: E501 + + @validate_arguments + def get_work_item2_with_http_info(self, id : StrictStr, project_id : Annotated[StrictStr, Field(..., description="Project ID")], slug : Annotated[StrictStr, Field(..., description="Workspace slug")], **kwargs) -> ApiResponse: # noqa: E501 + """Work Item retrieve endpoints # noqa: E501 + + List all work items in a project if pk is None, otherwise retrieve a specific work item. When pk is None: Returns a list of all work items in the project. When pk is provided: Returns the details of a specific work item. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_work_item2_with_http_info(id, project_id, slug, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: Project ID (required) + :type project_id: str + :param slug: Workspace slug (required) + :type slug: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_work_item2" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Issue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{id}/', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def patch_work_item(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, patched_issue : Optional[PatchedIssue] = None, **kwargs) -> Issue: # noqa: E501 + """Patch an work item # noqa: E501 + + Patch an existing work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.patch_work_item(id, project_id, slug, patched_issue, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param patched_issue: + :type patched_issue: PatchedIssue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Issue + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the patch_work_item_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.patch_work_item_with_http_info(id, project_id, slug, patched_issue, **kwargs) # noqa: E501 + + @validate_arguments + def patch_work_item_with_http_info(self, id : StrictStr, project_id : StrictStr, slug : StrictStr, patched_issue : Optional[PatchedIssue] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Patch an work item # noqa: E501 + + Patch an existing work item in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.patch_work_item_with_http_info(id, project_id, slug, patched_issue, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param project_id: (required) + :type project_id: str + :param slug: (required) + :type slug: str + :param patched_issue: + :type patched_issue: PatchedIssue + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Issue, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'project_id', + 'slug', + 'patched_issue' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method patch_work_item" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['patched_issue'] is not None: + _body_params = _params['patched_issue'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "Issue", + '400': "Issue", + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_issue_comment(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue comment ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_comment_request : Optional[CreateIssueCommentRequest] = None, **kwargs) -> IssueComment: # noqa: E501 + """Update an issue comment # noqa: E501 + + Update an existing comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_issue_comment(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_comment_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue comment ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_comment_request: + :type create_issue_comment_request: CreateIssueCommentRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueComment + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_issue_comment_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_issue_comment_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_comment_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_issue_comment_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue comment ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_comment_request : Optional[CreateIssueCommentRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update an issue comment # noqa: E501 + + Update an existing comment for an issue. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_issue_comment_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_comment_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue comment ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_comment_request: + :type create_issue_comment_request: CreateIssueCommentRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueComment, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'create_issue_comment_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_issue_comment" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_issue_comment_request'] is not None: + _body_params = _params['create_issue_comment_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueComment", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_issue_link(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue link ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_link_request : Optional[CreateIssueLinkRequest] = None, **kwargs) -> IssueLink: # noqa: E501 + """Update an issue link # noqa: E501 + + Update an issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_issue_link(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_link_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue link ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_link_request: + :type create_issue_link_request: CreateIssueLinkRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: IssueLink + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_issue_link_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_issue_link_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_link_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_issue_link_with_http_info(self, id : StrictStr, issue_id : StrictStr, issue_id2 : Annotated[StrictStr, Field(..., description="Issue ID")], pk : Annotated[StrictStr, Field(..., description="Issue link ID")], project_id : StrictStr, project_id2 : Annotated[StrictStr, Field(..., description="Project ID")], slug : StrictStr, slug2 : Annotated[StrictStr, Field(..., description="Workspace slug")], create_issue_link_request : Optional[CreateIssueLinkRequest] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Update an issue link # noqa: E501 + + Update an issue link in a project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_issue_link_with_http_info(id, issue_id, issue_id2, pk, project_id, project_id2, slug, slug2, create_issue_link_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param issue_id: (required) + :type issue_id: str + :param issue_id2: Issue ID (required) + :type issue_id2: str + :param pk: Issue link ID (required) + :type pk: str + :param project_id: (required) + :type project_id: str + :param project_id2: Project ID (required) + :type project_id2: str + :param slug: (required) + :type slug: str + :param slug2: Workspace slug (required) + :type slug2: str + :param create_issue_link_request: + :type create_issue_link_request: CreateIssueLinkRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(IssueLink, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'id', + 'issue_id', + 'issue_id2', + 'pk', + 'project_id', + 'project_id2', + 'slug', + 'slug2', + 'create_issue_link_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method update_issue_link" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id'] is not None: + _path_params['id'] = _params['id'] + + if _params['issue_id'] is not None: + _path_params['issue_id'] = _params['issue_id'] + + if _params['project_id'] is not None: + _path_params['project_id'] = _params['project_id'] + + if _params['slug'] is not None: + _path_params['slug'] = _params['slug'] + + + # process the query parameters + _query_params = [] + if _params.get('issue_id2') is not None: # noqa: E501 + _query_params.append(('issue_id', _params['issue_id2'])) + + if _params.get('pk') is not None: # noqa: E501 + _query_params.append(('pk', _params['pk'])) + + if _params.get('project_id2') is not None: # noqa: E501 + _query_params.append(('project_id', _params['project_id2'])) + + if _params.get('slug2') is not None: # noqa: E501 + _query_params.append(('slug', _params['slug2'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_issue_link_request'] is not None: + _body_params = _params['create_issue_link_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['ApiKeyAuthentication'] # noqa: E501 + + _response_types_map = { + '200': "IssueLink", + '400': None, + '401': None, + '403': None, + '404': None, + } + + return self.api_client.call_api( + '/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/', 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/plane/api_client.py b/plane/api_client.py new file mode 100644 index 0000000..08c66a5 --- /dev/null +++ b/plane/api_client.py @@ -0,0 +1,766 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import atexit +import datetime +from dateutil.parser import parse +import json +import mimetypes +from multiprocessing.pool import ThreadPool +import os +import re +import tempfile + +from urllib.parse import quote +from pydantic import SecretStr + +from plane.configuration import Configuration +from plane.api_response import ApiResponse +import plane.models +from plane import rest +from plane.exceptions import ApiValueError, ApiException + + +class ApiClient: + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + PRIMITIVE_TYPES = (float, bool, bytes, str, int) + NATIVE_TYPES_MAPPING = { + 'int': int, + 'long': int, # TODO remove as only py3 is supported? + 'float': float, + 'str': str, + 'bool': bool, + 'date': datetime.date, + 'datetime': datetime.datetime, + 'object': object, + } + _pool = None + + def __init__(self, configuration=None, header_name=None, header_value=None, + cookie=None, pool_threads=1) -> None: + # use default configuration if none is provided + if configuration is None: + configuration = Configuration.get_default() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/1.0.0/python' + self.client_side_validation = configuration.client_side_validation + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + + _default = None + + @classmethod + def get_default(cls): + """Return new instance of ApiClient. + + This method returns newly created, based on default constructor, + object of ApiClient class or returns a copy of default + ApiClient. + + :return: The ApiClient object. + """ + if cls._default is None: + cls._default = ApiClient() + return cls._default + + @classmethod + def set_default(cls, default): + """Set default instance of ApiClient. + + It stores default ApiClient. + + :param default: object of ApiClient. + """ + cls._default = default + + def __call_api( + self, resource_path, method, path_params=None, + query_params=None, header_params=None, body=None, post_params=None, + files=None, response_types_map=None, auth_settings=None, + _return_http_data_only=None, collection_formats=None, + _preload_content=True, _request_timeout=None, _host=None, + _request_auth=None): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict(self.parameters_to_tuples(header_params, + collection_formats)) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + + # auth setting + self.update_params_for_auth( + header_params, query_params, auth_settings, + resource_path, method, body, + request_auth=_request_auth) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + url_query = self.parameters_to_url_query(query_params, + collection_formats) + url += "?" + url_query + + try: + # perform request and return response + response_data = self.request( + method, url, + query_params=query_params, + headers=header_params, + post_params=post_params, body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + if e.body: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = None # assuming deserialization is not needed + # data needs deserialization or returns HTTP data (deserialized) only + if _preload_content or _return_http_data_only: + response_type = response_types_map.get(str(response_data.status), None) + if not response_type and isinstance(response_data.status, int) and 100 <= response_data.status <= 599: + # if not found, look for '1XX', '2XX', etc. + response_type = response_types_map.get(str(response_data.status)[0] + "XX", None) + + if response_type == "bytearray": + response_data.data = response_data.data + else: + match = None + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type) + encoding = match.group(1) if match else "utf-8" + response_data.data = response_data.data.decode(encoding) + + # deserialize response data + if response_type == "bytearray": + return_data = response_data.data + elif response_type: + return_data = self.deserialize(response_data, response_type) + else: + return_data = None + + if _return_http_data_only: + return return_data + else: + return ApiResponse(status_code = response_data.status, + data = return_data, + headers = response_data.getheaders(), + raw_data = response_data.data) + + def sanitize_for_serialization(self, obj): + """Builds a JSON POST object. + + If obj is None, return None. + If obj is SecretStr, return obj.get_secret_value() + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if obj is None: + return None + elif isinstance(obj, SecretStr): + return obj.get_secret_value() + elif isinstance(obj, self.PRIMITIVE_TYPES): + return obj + elif isinstance(obj, list): + return [self.sanitize_for_serialization(sub_obj) + for sub_obj in obj] + elif isinstance(obj, tuple): + return tuple(self.sanitize_for_serialization(sub_obj) + for sub_obj in obj) + elif isinstance(obj, (datetime.datetime, datetime.date)): + return obj.isoformat() + + if isinstance(obj, dict): + obj_dict = obj + else: + # Convert model obj to dict except + # attributes `openapi_types`, `attribute_map` + # and attributes which value is not None. + # Convert attribute name to json key in + # model definition for request. + if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')): + obj_dict = obj.to_dict() + else: + obj_dict = obj.__dict__ + + return {key: self.sanitize_for_serialization(val) + for key, val in obj_dict.items()} + + def deserialize(self, response, response_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: class literal for + deserialized object, or string of class name. + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == "file": + return self.__deserialize_file(response) + + # fetch data from response object + try: + data = json.loads(response.data) + except ValueError: + data = response.data + + return self.__deserialize(data, response_type) + + def __deserialize(self, data, klass): + """Deserializes dict, list, str into an object. + + :param data: dict, list or str. + :param klass: class literal, or string of class name. + + :return: object. + """ + if data is None: + return None + + if isinstance(klass, str): + if klass.startswith('List['): + sub_kls = re.match(r'List\[(.*)]', klass).group(1) + return [self.__deserialize(sub_data, sub_kls) + for sub_data in data] + + if klass.startswith('Dict['): + sub_kls = re.match(r'Dict\[([^,]*), (.*)]', klass).group(2) + return {k: self.__deserialize(v, sub_kls) + for k, v in data.items()} + + # convert str to class + if klass in self.NATIVE_TYPES_MAPPING: + klass = self.NATIVE_TYPES_MAPPING[klass] + else: + klass = getattr(plane.models, klass) + + if klass in self.PRIMITIVE_TYPES: + return self.__deserialize_primitive(data, klass) + elif klass == object: + return self.__deserialize_object(data) + elif klass == datetime.date: + return self.__deserialize_date(data) + elif klass == datetime.datetime: + return self.__deserialize_datetime(data) + else: + return self.__deserialize_model(data, klass) + + def call_api(self, resource_path, method, + path_params=None, query_params=None, header_params=None, + body=None, post_params=None, files=None, + response_types_map=None, auth_settings=None, + async_req=None, _return_http_data_only=None, + collection_formats=None, _preload_content=True, + _request_timeout=None, _host=None, _request_auth=None): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response: Response data type. + :param files dict: key -> filename, value -> filepath, + for `multipart/form-data`. + :param async_req bool: execute request asynchronously + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_token: dict, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + args = ( + resource_path, + method, + path_params, + query_params, + header_params, + body, + post_params, + files, + response_types_map, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, + _request_auth, + ) + if not async_req: + return self.__call_api(*args) + + return self.pool.apply_async(self.__call_api, args) + + def request(self, method, url, query_params=None, headers=None, + post_params=None, body=None, _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.get_request(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.head_request(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.options_request(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + elif method == "POST": + return self.rest_client.post_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.put_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.patch_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.delete_request(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + def parameters_to_url_query(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: URL query string (e.g. a=Hello%20World&b=123) + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if isinstance(v, bool): + v = str(v).lower() + if isinstance(v, (int, float)): + v = str(v) + if isinstance(v, dict): + v = json.dumps(v) + + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, quote(str(value))) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(quote(str(value)) for value in v))) + else: + new_params.append((k, quote(str(v)))) + + return "&".join(["=".join(map(str, item)) for item in new_params]) + + def files_parameters(self, files=None): + """Builds form parameters. + + :param files: File parameters. + :return: Form parameters with files. + """ + params = [] + + if files: + for k, v in files.items(): + if not v: + continue + file_names = v if type(v) is list else [v] + for n in file_names: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = (mimetypes.guess_type(filename)[0] or + 'application/octet-stream') + params.append( + tuple([k, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + for accept in accepts: + if re.search('json', accept, re.IGNORECASE): + return accept + + return accepts[0] + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return None + + for content_type in content_types: + if re.search('json', content_type, re.IGNORECASE): + return content_type + + return content_types[0] + + def update_params_for_auth(self, headers, queries, auth_settings, + resource_path, method, body, + request_auth=None): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param request_auth: if set, the provided settings will + override the token in the configuration. + """ + if not auth_settings: + return + + if request_auth: + self._apply_auth_params(headers, queries, + resource_path, method, body, + request_auth) + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + self._apply_auth_params(headers, queries, + resource_path, method, body, + auth_setting) + + def _apply_auth_params(self, headers, queries, + resource_path, method, body, + auth_setting): + """Updates the request parameters based on a single auth_setting + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param auth_setting: auth settings for the endpoint + """ + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) + + def __deserialize_file(self, response): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + :param response: RESTResponse. + :return: file path. + """ + fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + content_disposition = response.getheader("Content-Disposition") + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + f.write(response.data) + + return path + + def __deserialize_primitive(self, data, klass): + """Deserializes string to primitive type. + + :param data: str. + :param klass: class literal. + + :return: int, long, float, str, bool. + """ + try: + return klass(data) + except UnicodeEncodeError: + return str(data) + except TypeError: + return data + + def __deserialize_object(self, value): + """Return an original value. + + :return: object. + """ + return value + + def __deserialize_date(self, string): + """Deserializes string to date. + + :param string: str. + :return: date. + """ + try: + return parse(string).date() + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason="Failed to parse `{0}` as date object".format(string) + ) + + def __deserialize_datetime(self, string): + """Deserializes string to datetime. + + The string should be in iso8601 datetime format. + + :param string: str. + :return: datetime. + """ + try: + return parse(string) + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as datetime object" + .format(string) + ) + ) + + def __deserialize_model(self, data, klass): + """Deserializes list or dict to model. + + :param data: dict, list. + :param klass: class literal. + :return: model object. + """ + + return klass.from_dict(data) diff --git a/plane/api_response.py b/plane/api_response.py new file mode 100644 index 0000000..a0b62b9 --- /dev/null +++ b/plane/api_response.py @@ -0,0 +1,25 @@ +"""API response object.""" + +from __future__ import annotations +from typing import Any, Dict, Optional +from pydantic import Field, StrictInt, StrictStr + +class ApiResponse: + """ + API response object + """ + + status_code: Optional[StrictInt] = Field(None, description="HTTP status code") + headers: Optional[Dict[StrictStr, StrictStr]] = Field(None, description="HTTP headers") + data: Optional[Any] = Field(None, description="Deserialized data given the data type") + raw_data: Optional[Any] = Field(None, description="Raw data (HTTP response body)") + + def __init__(self, + status_code=None, + headers=None, + data=None, + raw_data=None) -> None: + self.status_code = status_code + self.headers = headers + self.data = data + self.raw_data = raw_data diff --git a/plane/configuration.py b/plane/configuration.py new file mode 100644 index 0000000..6c31f98 --- /dev/null +++ b/plane/configuration.py @@ -0,0 +1,463 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +import http.client as httplib + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', + 'minimum', 'exclusiveMinimum', 'maxLength', + 'minLength', 'pattern', 'maxItems', 'minItems' +} + +class Configuration: + """This class contains various settings of the API client. + + :param host: Base url. + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer). + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication. + :param password: Password for HTTP basic authentication. + :param access_token: Access token. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum + values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format. + + :Example: + + API Key Authentication Example. + Given the following security scheme in the OpenAPI specification: + components: + securitySchemes: + cookieAuth: # name for the security scheme + type: apiKey + in: cookie + name: JSESSIONID # cookie name + + You can programmatically set the cookie: + +conf = plane.Configuration( + api_key={'cookieAuth': 'abc123'} + api_key_prefix={'cookieAuth': 'JSESSIONID'} +) + + The following cookie will be added to the HTTP request: + Cookie: JSESSIONID abc123 + """ + + _default = None + + def __init__(self, host=None, + api_key=None, api_key_prefix=None, + username=None, password=None, + access_token=None, + server_index=None, server_variables=None, + server_operation_index=None, server_operation_variables=None, + ssl_ca_cert=None, + ) -> None: + """Constructor + """ + self._base_path = "/api/v1" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.access_token = access_token + """Access token + """ + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("plane") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + self.tls_server_name = None + """SSL/TLS Server Name Indication (SNI) + Set this to the SNI value expected by the server. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + self.socket_options = None + """Options to pass down to the underlying urllib3 socket + """ + + self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z" + """datetime format + """ + + self.date_format = "%Y-%m-%d" + """date format + """ + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = default + + @classmethod + def get_default_copy(cls): + """Deprecated. Please use `get_default` instead. + + Deprecated. Please use `get_default` instead. + + :return: The configuration object. + """ + return cls.get_default() + + @classmethod + def get_default(cls): + """Return the default configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration. + + :return: The configuration object. + """ + if cls._default is None: + cls._default = Configuration() + return cls._default + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on httplib debug + httplib.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off httplib debug + httplib.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers( + basic_auth=username + ':' + password + ).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if 'ApiKeyAuthentication' in self.api_key: + auth['ApiKeyAuthentication'] = { + 'type': 'api_key', + 'in': 'header', + 'key': 'X-API-Key', + 'value': self.get_api_key_with_prefix( + 'ApiKeyAuthentication', + ), + } + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.0\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + 'url': "/api/v1", + 'description': "API v1", + } + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get( + variable_name, variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/plane/exceptions.py b/plane/exceptions.py new file mode 100644 index 0000000..d6625f0 --- /dev/null +++ b/plane/exceptions.py @@ -0,0 +1,166 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, + key_type=None) -> None: + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None) -> None: + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + +class BadRequestException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(BadRequestException, self).__init__(status, reason, http_resp) + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/plane/models/__init__.py b/plane/models/__init__.py new file mode 100644 index 0000000..9d3f2a1 --- /dev/null +++ b/plane/models/__init__.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +# flake8: noqa +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +# import models into model package +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest +from plane.models.create_cycle_request import CreateCycleRequest +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue +from plane.models.create_intake_issue_request_issue_issue import CreateIntakeIssueRequestIssueIssue +from plane.models.create_issue_comment_request import CreateIssueCommentRequest +from plane.models.create_issue_link_request import CreateIssueLinkRequest +from plane.models.create_label_request import CreateLabelRequest +from plane.models.create_module_request import CreateModuleRequest +from plane.models.create_project_request import CreateProjectRequest +from plane.models.create_state_request import CreateStateRequest +from plane.models.cycle import Cycle +from plane.models.cycle_issue import CycleIssue +from plane.models.cycle_lite import CycleLite +from plane.models.generic_asset_upload import GenericAssetUpload +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner +from plane.models.intake_issue import IntakeIssue +from plane.models.issue import Issue +from plane.models.issue_activity import IssueActivity +from plane.models.issue_attachment import IssueAttachment +from plane.models.issue_comment import IssueComment +from plane.models.issue_expand import IssueExpand +from plane.models.issue_link import IssueLink +from plane.models.label import Label +from plane.models.label_lite import LabelLite +from plane.models.module import Module +from plane.models.module_issue import ModuleIssue +from plane.models.module_lite import ModuleLite +from plane.models.patched_asset_update import PatchedAssetUpdate +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate +from plane.models.patched_issue import PatchedIssue +from plane.models.patched_project import PatchedProject +from plane.models.project import Project +from plane.models.search_issues200_response import SearchIssues200Response +from plane.models.search_issues200_response_issues_inner import SearchIssues200ResponseIssuesInner +from plane.models.state import State +from plane.models.state_lite import StateLite +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response +from plane.models.transfer_cycle_issues400_response import TransferCycleIssues400Response +from plane.models.update_cycle_request import UpdateCycleRequest +from plane.models.update_label_request import UpdateLabelRequest +from plane.models.user_asset_upload import UserAssetUpload +from plane.models.user_lite import UserLite diff --git a/plane/models/add_cycle_issues_request.py b/plane/models/add_cycle_issues_request.py new file mode 100644 index 0000000..1766bdd --- /dev/null +++ b/plane/models/add_cycle_issues_request.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List, Optional +from pydantic import BaseModel, StrictStr, conlist + +class AddCycleIssuesRequest(BaseModel): + """ + AddCycleIssuesRequest + """ + issues: Optional[conlist(StrictStr)] = None + __properties = ["issues"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> AddCycleIssuesRequest: + """Create an instance of AddCycleIssuesRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> AddCycleIssuesRequest: + """Create an instance of AddCycleIssuesRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return AddCycleIssuesRequest.parse_obj(obj) + + _obj = AddCycleIssuesRequest.parse_obj({ + "issues": obj.get("issues") + }) + return _obj + + diff --git a/plane/models/create_cycle_request.py b/plane/models/create_cycle_request.py new file mode 100644 index 0000000..39abb18 --- /dev/null +++ b/plane/models/create_cycle_request.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, constr + +class CreateCycleRequest(BaseModel): + """ + CreateCycleRequest + """ + name: constr(strict=True, max_length=255) = Field(default=..., description="Cycle Name") + description: Optional[StrictStr] = Field(default=None, description="Cycle Description") + start_date: Optional[datetime] = Field(default=None, description="Start Date") + end_date: Optional[datetime] = Field(default=None, description="End Date") + __properties = ["name", "description", "start_date", "end_date"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateCycleRequest: + """Create an instance of CreateCycleRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if end_date (nullable) is None + # and __fields_set__ contains the field + if self.end_date is None and "end_date" in self.__fields_set__: + _dict['end_date'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateCycleRequest: + """Create an instance of CreateCycleRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateCycleRequest.parse_obj(obj) + + _obj = CreateCycleRequest.parse_obj({ + "name": obj.get("name"), + "description": obj.get("description"), + "start_date": obj.get("start_date"), + "end_date": obj.get("end_date") + }) + return _obj + + diff --git a/plane/models/create_intake_issue_request.py b/plane/models/create_intake_issue_request.py new file mode 100644 index 0000000..e36e52b --- /dev/null +++ b/plane/models/create_intake_issue_request.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue + +class CreateIntakeIssueRequest(BaseModel): + """ + CreateIntakeIssueRequest + """ + issue: Optional[CreateIntakeIssueRequestIssue] = None + __properties = ["issue"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateIntakeIssueRequest: + """Create an instance of CreateIntakeIssueRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of issue + if self.issue: + _dict['issue'] = self.issue.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateIntakeIssueRequest: + """Create an instance of CreateIntakeIssueRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateIntakeIssueRequest.parse_obj(obj) + + _obj = CreateIntakeIssueRequest.parse_obj({ + "issue": CreateIntakeIssueRequestIssue.from_dict(obj.get("issue")) if obj.get("issue") is not None else None + }) + return _obj + + diff --git a/plane/models/create_intake_issue_request_issue.py b/plane/models/create_intake_issue_request_issue.py new file mode 100644 index 0000000..6ff820e --- /dev/null +++ b/plane/models/create_intake_issue_request_issue.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel +from plane.models.create_intake_issue_request_issue_issue import CreateIntakeIssueRequestIssueIssue + +class CreateIntakeIssueRequestIssue(BaseModel): + """ + CreateIntakeIssueRequestIssue + """ + issue: Optional[CreateIntakeIssueRequestIssueIssue] = None + __properties = ["issue"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateIntakeIssueRequestIssue: + """Create an instance of CreateIntakeIssueRequestIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of issue + if self.issue: + _dict['issue'] = self.issue.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateIntakeIssueRequestIssue: + """Create an instance of CreateIntakeIssueRequestIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateIntakeIssueRequestIssue.parse_obj(obj) + + _obj = CreateIntakeIssueRequestIssue.parse_obj({ + "issue": CreateIntakeIssueRequestIssueIssue.from_dict(obj.get("issue")) if obj.get("issue") is not None else None + }) + return _obj + + diff --git a/plane/models/create_intake_issue_request_issue_issue.py b/plane/models/create_intake_issue_request_issue_issue.py new file mode 100644 index 0000000..5f5f601 --- /dev/null +++ b/plane/models/create_intake_issue_request_issue_issue.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, constr, validator + +class CreateIntakeIssueRequestIssueIssue(BaseModel): + """ + CreateIntakeIssueRequestIssueIssue + """ + name: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="Issue name") + description_html: Optional[StrictStr] = Field(default=None, description="Issue description HTML") + priority: Optional[StrictStr] = Field(default=None, description="Issue priority") + __properties = ["name", "description_html", "priority"] + + @validator('priority') + def priority_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('low', 'medium', 'high', 'urgent', 'none',): + raise ValueError("must be one of enum values ('low', 'medium', 'high', 'urgent', 'none')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateIntakeIssueRequestIssueIssue: + """Create an instance of CreateIntakeIssueRequestIssueIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description_html (nullable) is None + # and __fields_set__ contains the field + if self.description_html is None and "description_html" in self.__fields_set__: + _dict['description_html'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateIntakeIssueRequestIssueIssue: + """Create an instance of CreateIntakeIssueRequestIssueIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateIntakeIssueRequestIssueIssue.parse_obj(obj) + + _obj = CreateIntakeIssueRequestIssueIssue.parse_obj({ + "name": obj.get("name"), + "description_html": obj.get("description_html"), + "priority": obj.get("priority") + }) + return _obj + + diff --git a/plane/models/create_issue_comment_request.py b/plane/models/create_issue_comment_request.py new file mode 100644 index 0000000..fcc5ea4 --- /dev/null +++ b/plane/models/create_issue_comment_request.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictStr + +class CreateIssueCommentRequest(BaseModel): + """ + CreateIssueCommentRequest + """ + comment_html: StrictStr = Field(...) + __properties = ["comment_html"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateIssueCommentRequest: + """Create an instance of CreateIssueCommentRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateIssueCommentRequest: + """Create an instance of CreateIssueCommentRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateIssueCommentRequest.parse_obj(obj) + + _obj = CreateIssueCommentRequest.parse_obj({ + "comment_html": obj.get("comment_html") + }) + return _obj + + diff --git a/plane/models/create_issue_link_request.py b/plane/models/create_issue_link_request.py new file mode 100644 index 0000000..96414cd --- /dev/null +++ b/plane/models/create_issue_link_request.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Any, Dict +from pydantic import BaseModel, Field, StrictStr + +class CreateIssueLinkRequest(BaseModel): + """ + CreateIssueLinkRequest + """ + url: StrictStr = Field(...) + title: StrictStr = Field(...) + metadata: Dict[str, Any] = Field(...) + __properties = ["url", "title", "metadata"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateIssueLinkRequest: + """Create an instance of CreateIssueLinkRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateIssueLinkRequest: + """Create an instance of CreateIssueLinkRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateIssueLinkRequest.parse_obj(obj) + + _obj = CreateIssueLinkRequest.parse_obj({ + "url": obj.get("url"), + "title": obj.get("title"), + "metadata": obj.get("metadata") + }) + return _obj + + diff --git a/plane/models/create_label_request.py b/plane/models/create_label_request.py new file mode 100644 index 0000000..c739e15 --- /dev/null +++ b/plane/models/create_label_request.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictStr + +class CreateLabelRequest(BaseModel): + """ + CreateLabelRequest + """ + name: StrictStr = Field(...) + color: StrictStr = Field(...) + description: StrictStr = Field(...) + __properties = ["name", "color", "description"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateLabelRequest: + """Create an instance of CreateLabelRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateLabelRequest: + """Create an instance of CreateLabelRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateLabelRequest.parse_obj(obj) + + _obj = CreateLabelRequest.parse_obj({ + "name": obj.get("name"), + "color": obj.get("color"), + "description": obj.get("description") + }) + return _obj + + diff --git a/plane/models/create_module_request.py b/plane/models/create_module_request.py new file mode 100644 index 0000000..96d1aa5 --- /dev/null +++ b/plane/models/create_module_request.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import List, Optional +from pydantic import BaseModel, Field, StrictStr, conlist, constr, validator + +class CreateModuleRequest(BaseModel): + """ + CreateModuleRequest + """ + name: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="Module name") + description: Optional[StrictStr] = Field(default=None, description="Module description") + start_date: Optional[datetime] = Field(default=None, description="Start date") + target_date: Optional[datetime] = Field(default=None, description="Target date") + status: Optional[StrictStr] = Field(default=None, description="Module status") + lead: Optional[StrictStr] = Field(default=None, description="Lead user ID") + members: Optional[conlist(StrictStr)] = None + __properties = ["name", "description", "start_date", "target_date", "status", "lead", "members"] + + @validator('status') + def status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled',): + raise ValueError("must be one of enum values ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateModuleRequest: + """Create an instance of CreateModuleRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if lead (nullable) is None + # and __fields_set__ contains the field + if self.lead is None and "lead" in self.__fields_set__: + _dict['lead'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateModuleRequest: + """Create an instance of CreateModuleRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateModuleRequest.parse_obj(obj) + + _obj = CreateModuleRequest.parse_obj({ + "name": obj.get("name"), + "description": obj.get("description"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "status": obj.get("status"), + "lead": obj.get("lead"), + "members": obj.get("members") + }) + return _obj + + diff --git a/plane/models/create_project_request.py b/plane/models/create_project_request.py new file mode 100644 index 0000000..28fde85 --- /dev/null +++ b/plane/models/create_project_request.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool, StrictInt, StrictStr, constr, validator + +class CreateProjectRequest(BaseModel): + """ + CreateProjectRequest + """ + name: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="Project name") + identifier: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="Project identifier") + description: Optional[StrictStr] = Field(default=None, description="Project description") + project_lead: Optional[StrictStr] = Field(default=None, description="Project lead") + intake_view: Optional[StrictBool] = Field(default=None, description="Intake view") + module_view: Optional[StrictBool] = Field(default=None, description="Module view") + cycle_view: Optional[StrictBool] = Field(default=None, description="Cycle view") + issue_views_view: Optional[StrictBool] = Field(default=None, description="Issue views view") + page_view: Optional[StrictBool] = Field(default=None, description="Page view") + network: Optional[StrictInt] = Field(default=None, description="Network") + __properties = ["name", "identifier", "description", "project_lead", "intake_view", "module_view", "cycle_view", "issue_views_view", "page_view", "network"] + + @validator('network') + def network_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in (0, 2,): + raise ValueError("must be one of enum values (0, 2)") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateProjectRequest: + """Create an instance of CreateProjectRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateProjectRequest: + """Create an instance of CreateProjectRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateProjectRequest.parse_obj(obj) + + _obj = CreateProjectRequest.parse_obj({ + "name": obj.get("name"), + "identifier": obj.get("identifier"), + "description": obj.get("description"), + "project_lead": obj.get("project_lead"), + "intake_view": obj.get("intake_view"), + "module_view": obj.get("module_view"), + "cycle_view": obj.get("cycle_view"), + "issue_views_view": obj.get("issue_views_view"), + "page_view": obj.get("page_view"), + "network": obj.get("network") + }) + return _obj + + diff --git a/plane/models/create_state_request.py b/plane/models/create_state_request.py new file mode 100644 index 0000000..4b15bcd --- /dev/null +++ b/plane/models/create_state_request.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool, StrictStr, constr, validator + +class CreateStateRequest(BaseModel): + """ + CreateStateRequest + """ + name: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="State name") + description: Optional[StrictStr] = Field(default=None, description="State description") + color: Optional[StrictStr] = Field(default=None, description="State color") + group: Optional[StrictStr] = Field(default=None, description="State group") + default: Optional[StrictBool] = Field(default=None, description="Default state") + __properties = ["name", "description", "color", "group", "default"] + + @validator('group') + def group_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage',): + raise ValueError("must be one of enum values ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateStateRequest: + """Create an instance of CreateStateRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateStateRequest: + """Create an instance of CreateStateRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateStateRequest.parse_obj(obj) + + _obj = CreateStateRequest.parse_obj({ + "name": obj.get("name"), + "description": obj.get("description"), + "color": obj.get("color"), + "group": obj.get("group"), + "default": obj.get("default") + }) + return _obj + + diff --git a/plane/models/cycle.py b/plane/models/cycle.py new file mode 100644 index 0000000..5e24a70 --- /dev/null +++ b/plane/models/cycle.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conint, constr, validator + +class Cycle(BaseModel): + """ + Cycle + """ + id: StrictStr = Field(...) + total_issues: StrictInt = Field(...) + cancelled_issues: StrictInt = Field(...) + completed_issues: StrictInt = Field(...) + started_issues: StrictInt = Field(...) + unstarted_issues: StrictInt = Field(...) + backlog_issues: StrictInt = Field(...) + total_estimates: Union[StrictFloat, StrictInt] = Field(...) + completed_estimates: Union[StrictFloat, StrictInt] = Field(...) + started_estimates: Union[StrictFloat, StrictInt] = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + start_date: Optional[datetime] = None + end_date: Optional[datetime] = None + view_props: Optional[Any] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + progress_snapshot: Optional[Any] = None + archived_at: Optional[datetime] = None + logo_props: Optional[Any] = None + timezone: Optional[StrictStr] = Field(default=None, description="* `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu") + version: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + owned_by: StrictStr = Field(...) + __properties = ["id", "total_issues", "cancelled_issues", "completed_issues", "started_issues", "unstarted_issues", "backlog_issues", "total_estimates", "completed_estimates", "started_estimates", "created_at", "updated_at", "deleted_at", "name", "description", "start_date", "end_date", "view_props", "sort_order", "external_source", "external_id", "progress_snapshot", "archived_at", "logo_props", "timezone", "version", "created_by", "updated_by", "project", "workspace", "owned_by"] + + @validator('timezone') + def timezone_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu',): + raise ValueError("must be one of enum values ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Cycle: + """Create an instance of Cycle from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "total_issues", + "cancelled_issues", + "completed_issues", + "started_issues", + "unstarted_issues", + "backlog_issues", + "total_estimates", + "completed_estimates", + "started_estimates", + "created_at", + "updated_at", + "deleted_at", + "created_by", + "updated_by", + "project", + "workspace", + "owned_by", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if end_date (nullable) is None + # and __fields_set__ contains the field + if self.end_date is None and "end_date" in self.__fields_set__: + _dict['end_date'] = None + + # set to None if view_props (nullable) is None + # and __fields_set__ contains the field + if self.view_props is None and "view_props" in self.__fields_set__: + _dict['view_props'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if progress_snapshot (nullable) is None + # and __fields_set__ contains the field + if self.progress_snapshot is None and "progress_snapshot" in self.__fields_set__: + _dict['progress_snapshot'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Cycle: + """Create an instance of Cycle from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Cycle.parse_obj(obj) + + _obj = Cycle.parse_obj({ + "id": obj.get("id"), + "total_issues": obj.get("total_issues"), + "cancelled_issues": obj.get("cancelled_issues"), + "completed_issues": obj.get("completed_issues"), + "started_issues": obj.get("started_issues"), + "unstarted_issues": obj.get("unstarted_issues"), + "backlog_issues": obj.get("backlog_issues"), + "total_estimates": obj.get("total_estimates"), + "completed_estimates": obj.get("completed_estimates"), + "started_estimates": obj.get("started_estimates"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "start_date": obj.get("start_date"), + "end_date": obj.get("end_date"), + "view_props": obj.get("view_props"), + "sort_order": obj.get("sort_order"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "progress_snapshot": obj.get("progress_snapshot"), + "archived_at": obj.get("archived_at"), + "logo_props": obj.get("logo_props"), + "timezone": obj.get("timezone"), + "version": obj.get("version"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "owned_by": obj.get("owned_by") + }) + return _obj + + diff --git a/plane/models/cycle_issue.py b/plane/models/cycle_issue.py new file mode 100644 index 0000000..db25db2 --- /dev/null +++ b/plane/models/cycle_issue.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class CycleIssue(BaseModel): + """ + CycleIssue + """ + id: StrictStr = Field(...) + sub_issues_count: StrictInt = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = None + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + issue: StrictStr = Field(...) + cycle: StrictStr = Field(...) + __properties = ["id", "sub_issues_count", "created_at", "updated_at", "deleted_at", "created_by", "updated_by", "project", "workspace", "issue", "cycle"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CycleIssue: + """Create an instance of CycleIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "sub_issues_count", + "created_at", + "updated_at", + "project", + "workspace", + "cycle", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CycleIssue: + """Create an instance of CycleIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CycleIssue.parse_obj(obj) + + _obj = CycleIssue.parse_obj({ + "id": obj.get("id"), + "sub_issues_count": obj.get("sub_issues_count"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "issue": obj.get("issue"), + "cycle": obj.get("cycle") + }) + return _obj + + diff --git a/plane/models/cycle_lite.py b/plane/models/cycle_lite.py new file mode 100644 index 0000000..87a8512 --- /dev/null +++ b/plane/models/cycle_lite.py @@ -0,0 +1,181 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conint, constr, validator + +class CycleLite(BaseModel): + """ + CycleLite + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + start_date: Optional[datetime] = None + end_date: Optional[datetime] = None + view_props: Optional[Any] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + progress_snapshot: Optional[Any] = None + archived_at: Optional[datetime] = None + logo_props: Optional[Any] = None + timezone: Optional[StrictStr] = Field(default=None, description="* `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu") + version: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = None + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = None + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + owned_by: StrictStr = Field(...) + __properties = ["id", "created_at", "updated_at", "deleted_at", "name", "description", "start_date", "end_date", "view_props", "sort_order", "external_source", "external_id", "progress_snapshot", "archived_at", "logo_props", "timezone", "version", "created_by", "updated_by", "project", "workspace", "owned_by"] + + @validator('timezone') + def timezone_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu',): + raise ValueError("must be one of enum values ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CycleLite: + """Create an instance of CycleLite from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if end_date (nullable) is None + # and __fields_set__ contains the field + if self.end_date is None and "end_date" in self.__fields_set__: + _dict['end_date'] = None + + # set to None if view_props (nullable) is None + # and __fields_set__ contains the field + if self.view_props is None and "view_props" in self.__fields_set__: + _dict['view_props'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if progress_snapshot (nullable) is None + # and __fields_set__ contains the field + if self.progress_snapshot is None and "progress_snapshot" in self.__fields_set__: + _dict['progress_snapshot'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CycleLite: + """Create an instance of CycleLite from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CycleLite.parse_obj(obj) + + _obj = CycleLite.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "start_date": obj.get("start_date"), + "end_date": obj.get("end_date"), + "view_props": obj.get("view_props"), + "sort_order": obj.get("sort_order"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "progress_snapshot": obj.get("progress_snapshot"), + "archived_at": obj.get("archived_at"), + "logo_props": obj.get("logo_props"), + "timezone": obj.get("timezone"), + "version": obj.get("version"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "owned_by": obj.get("owned_by") + }) + return _obj + + diff --git a/plane/models/generic_asset_upload.py b/plane/models/generic_asset_upload.py new file mode 100644 index 0000000..10cc067 --- /dev/null +++ b/plane/models/generic_asset_upload.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class GenericAssetUpload(BaseModel): + """ + Serializer for generic asset upload requests # noqa: E501 + """ + name: StrictStr = Field(default=..., description="Original filename of the asset") + type: Optional[StrictStr] = Field(default=None, description="MIME type of the file") + size: StrictInt = Field(default=..., description="File size in bytes") + project_id: Optional[StrictStr] = Field(default=None, description="UUID of the project to associate with the asset") + external_id: Optional[StrictStr] = Field(default=None, description="External identifier for the asset (for integration tracking)") + external_source: Optional[StrictStr] = Field(default=None, description="External source system (for integration tracking)") + __properties = ["name", "type", "size", "project_id", "external_id", "external_source"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GenericAssetUpload: + """Create an instance of GenericAssetUpload from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GenericAssetUpload: + """Create an instance of GenericAssetUpload from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GenericAssetUpload.parse_obj(obj) + + _obj = GenericAssetUpload.parse_obj({ + "name": obj.get("name"), + "type": obj.get("type"), + "size": obj.get("size"), + "project_id": obj.get("project_id"), + "external_id": obj.get("external_id"), + "external_source": obj.get("external_source") + }) + return _obj + + diff --git a/plane/models/get_issue_attachment2_request.py b/plane/models/get_issue_attachment2_request.py new file mode 100644 index 0000000..fdde609 --- /dev/null +++ b/plane/models/get_issue_attachment2_request.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class GetIssueAttachment2Request(BaseModel): + """ + GetIssueAttachment2Request + """ + name: Optional[StrictStr] = Field(default=None, description="Original filename of the asset") + type: Optional[StrictStr] = Field(default=None, description="MIME type of the file") + size: Optional[StrictInt] = Field(default=None, description="File size in bytes") + external_id: Optional[StrictStr] = Field(default=None, description="External identifier for the asset (for integration tracking)") + external_source: Optional[StrictStr] = Field(default=None, description="External source system (for integration tracking)") + __properties = ["name", "type", "size", "external_id", "external_source"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetIssueAttachment2Request: + """Create an instance of GetIssueAttachment2Request from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetIssueAttachment2Request: + """Create an instance of GetIssueAttachment2Request from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetIssueAttachment2Request.parse_obj(obj) + + _obj = GetIssueAttachment2Request.parse_obj({ + "name": obj.get("name"), + "type": obj.get("type"), + "size": obj.get("size"), + "external_id": obj.get("external_id"), + "external_source": obj.get("external_source") + }) + return _obj + + diff --git a/plane/models/get_workspace_members200_response_inner.py b/plane/models/get_workspace_members200_response_inner.py new file mode 100644 index 0000000..133e282 --- /dev/null +++ b/plane/models/get_workspace_members200_response_inner.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class GetWorkspaceMembers200ResponseInner(BaseModel): + """ + GetWorkspaceMembers200ResponseInner + """ + id: StrictStr = Field(...) + first_name: StrictStr = Field(...) + last_name: StrictStr = Field(...) + email: Optional[StrictStr] = Field(...) + avatar: Optional[StrictStr] = None + avatar_url: Optional[StrictStr] = Field(default=None, description="Avatar URL") + display_name: StrictStr = Field(...) + role: Optional[StrictInt] = Field(default=None, description="Member role in the workspace") + __properties = ["id", "first_name", "last_name", "email", "avatar", "avatar_url", "display_name", "role"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetWorkspaceMembers200ResponseInner: + """Create an instance of GetWorkspaceMembers200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "first_name", + "last_name", + "email", + "avatar", + "avatar_url", + "display_name", + }, + exclude_none=True) + # set to None if email (nullable) is None + # and __fields_set__ contains the field + if self.email is None and "email" in self.__fields_set__: + _dict['email'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetWorkspaceMembers200ResponseInner: + """Create an instance of GetWorkspaceMembers200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetWorkspaceMembers200ResponseInner.parse_obj(obj) + + _obj = GetWorkspaceMembers200ResponseInner.parse_obj({ + "id": obj.get("id"), + "first_name": obj.get("first_name"), + "last_name": obj.get("last_name"), + "email": obj.get("email"), + "avatar": obj.get("avatar"), + "avatar_url": obj.get("avatar_url"), + "display_name": obj.get("display_name"), + "role": obj.get("role") + }) + return _obj + + diff --git a/plane/models/intake_issue.py b/plane/models/intake_issue.py new file mode 100644 index 0000000..ca1c728 --- /dev/null +++ b/plane/models/intake_issue.py @@ -0,0 +1,183 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional +from pydantic import BaseModel, Field, StrictStr, conint, constr, validator +from plane.models.issue_expand import IssueExpand + +class IntakeIssue(BaseModel): + """ + IntakeIssue + """ + id: StrictStr = Field(...) + issue_detail: IssueExpand = Field(...) + inbox: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + status: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = Field(default=None, description="* `-2` - Pending * `-1` - Rejected * `0` - Snoozed * `1` - Accepted * `2` - Duplicate") + snoozed_till: Optional[datetime] = None + source: Optional[constr(strict=True, max_length=255)] = None + source_email: Optional[StrictStr] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + extra: Optional[Any] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + intake: StrictStr = Field(...) + issue: StrictStr = Field(...) + duplicate_to: Optional[StrictStr] = None + __properties = ["id", "issue_detail", "inbox", "created_at", "updated_at", "deleted_at", "status", "snoozed_till", "source", "source_email", "external_source", "external_id", "extra", "created_by", "updated_by", "project", "workspace", "intake", "issue", "duplicate_to"] + + @validator('status') + def status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in (-2, -1, 0, 1, 2,): + raise ValueError("must be one of enum values (-2, -1, 0, 1, 2)") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IntakeIssue: + """Create an instance of IntakeIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "issue_detail", + "inbox", + "created_at", + "updated_at", + "created_by", + "updated_by", + "project", + "workspace", + "issue", + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of issue_detail + if self.issue_detail: + _dict['issue_detail'] = self.issue_detail.to_dict() + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if snoozed_till (nullable) is None + # and __fields_set__ contains the field + if self.snoozed_till is None and "snoozed_till" in self.__fields_set__: + _dict['snoozed_till'] = None + + # set to None if source (nullable) is None + # and __fields_set__ contains the field + if self.source is None and "source" in self.__fields_set__: + _dict['source'] = None + + # set to None if source_email (nullable) is None + # and __fields_set__ contains the field + if self.source_email is None and "source_email" in self.__fields_set__: + _dict['source_email'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if extra (nullable) is None + # and __fields_set__ contains the field + if self.extra is None and "extra" in self.__fields_set__: + _dict['extra'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if duplicate_to (nullable) is None + # and __fields_set__ contains the field + if self.duplicate_to is None and "duplicate_to" in self.__fields_set__: + _dict['duplicate_to'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IntakeIssue: + """Create an instance of IntakeIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IntakeIssue.parse_obj(obj) + + _obj = IntakeIssue.parse_obj({ + "id": obj.get("id"), + "issue_detail": IssueExpand.from_dict(obj.get("issue_detail")) if obj.get("issue_detail") is not None else None, + "inbox": obj.get("inbox"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "status": obj.get("status"), + "snoozed_till": obj.get("snoozed_till"), + "source": obj.get("source"), + "source_email": obj.get("source_email"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "extra": obj.get("extra"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "intake": obj.get("intake"), + "issue": obj.get("issue"), + "duplicate_to": obj.get("duplicate_to") + }) + return _obj + + diff --git a/plane/models/issue.py b/plane/models/issue.py new file mode 100644 index 0000000..8a9f022 --- /dev/null +++ b/plane/models/issue.py @@ -0,0 +1,224 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, conint, conlist, constr, validator + +class Issue(BaseModel): + """ + Issue + """ + id: StrictStr = Field(...) + assignees: Optional[conlist(StrictStr)] = None + labels: Optional[conlist(StrictStr)] = None + type_id: Optional[StrictStr] = None + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + point: Optional[conint(strict=True, le=12, ge=0)] = None + name: constr(strict=True, max_length=255) = Field(...) + description_html: Optional[StrictStr] = None + description_binary: Optional[Union[StrictBytes, StrictStr]] = Field(...) + priority: Optional[StrictStr] = Field(default=None, description="* `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None") + start_date: Optional[date] = None + target_date: Optional[date] = None + sequence_id: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + completed_at: Optional[datetime] = None + archived_at: Optional[date] = None + is_draft: Optional[StrictBool] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + parent: Optional[StrictStr] = None + state: Optional[StrictStr] = None + estimate_point: Optional[StrictStr] = None + type: Optional[StrictStr] = None + __properties = ["id", "assignees", "labels", "type_id", "created_at", "updated_at", "deleted_at", "point", "name", "description_html", "description_binary", "priority", "start_date", "target_date", "sequence_id", "sort_order", "completed_at", "archived_at", "is_draft", "external_source", "external_id", "created_by", "updated_by", "project", "workspace", "parent", "state", "estimate_point", "type"] + + @validator('priority') + def priority_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('urgent', 'high', 'medium', 'low', 'none',): + raise ValueError("must be one of enum values ('urgent', 'high', 'medium', 'low', 'none')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Issue: + """Create an instance of Issue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "description_binary", + "updated_by", + "project", + "workspace", + }, + exclude_none=True) + # set to None if type_id (nullable) is None + # and __fields_set__ contains the field + if self.type_id is None and "type_id" in self.__fields_set__: + _dict['type_id'] = None + + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if point (nullable) is None + # and __fields_set__ contains the field + if self.point is None and "point" in self.__fields_set__: + _dict['point'] = None + + # set to None if description_binary (nullable) is None + # and __fields_set__ contains the field + if self.description_binary is None and "description_binary" in self.__fields_set__: + _dict['description_binary'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if completed_at (nullable) is None + # and __fields_set__ contains the field + if self.completed_at is None and "completed_at" in self.__fields_set__: + _dict['completed_at'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if parent (nullable) is None + # and __fields_set__ contains the field + if self.parent is None and "parent" in self.__fields_set__: + _dict['parent'] = None + + # set to None if state (nullable) is None + # and __fields_set__ contains the field + if self.state is None and "state" in self.__fields_set__: + _dict['state'] = None + + # set to None if estimate_point (nullable) is None + # and __fields_set__ contains the field + if self.estimate_point is None and "estimate_point" in self.__fields_set__: + _dict['estimate_point'] = None + + # set to None if type (nullable) is None + # and __fields_set__ contains the field + if self.type is None and "type" in self.__fields_set__: + _dict['type'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Issue: + """Create an instance of Issue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Issue.parse_obj(obj) + + _obj = Issue.parse_obj({ + "id": obj.get("id"), + "assignees": obj.get("assignees"), + "labels": obj.get("labels"), + "type_id": obj.get("type_id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "point": obj.get("point"), + "name": obj.get("name"), + "description_html": obj.get("description_html"), + "description_binary": obj.get("description_binary"), + "priority": obj.get("priority"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "sequence_id": obj.get("sequence_id"), + "sort_order": obj.get("sort_order"), + "completed_at": obj.get("completed_at"), + "archived_at": obj.get("archived_at"), + "is_draft": obj.get("is_draft"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "parent": obj.get("parent"), + "state": obj.get("state"), + "estimate_point": obj.get("estimate_point"), + "type": obj.get("type") + }) + return _obj + + diff --git a/plane/models/issue_activity.py b/plane/models/issue_activity.py new file mode 100644 index 0000000..40f2bb6 --- /dev/null +++ b/plane/models/issue_activity.py @@ -0,0 +1,158 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import List, Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conlist, constr + +class IssueActivity(BaseModel): + """ + IssueActivity + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + verb: Optional[constr(strict=True, max_length=255)] = None + field: Optional[constr(strict=True, max_length=255)] = None + old_value: Optional[StrictStr] = None + new_value: Optional[StrictStr] = None + comment: Optional[StrictStr] = None + attachments: Optional[conlist(constr(strict=True, max_length=200), max_items=10)] = None + old_identifier: Optional[StrictStr] = None + new_identifier: Optional[StrictStr] = None + epoch: Optional[Union[StrictFloat, StrictInt]] = None + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + issue: Optional[StrictStr] = None + issue_comment: Optional[StrictStr] = None + actor: Optional[StrictStr] = None + __properties = ["id", "created_at", "updated_at", "deleted_at", "verb", "field", "old_value", "new_value", "comment", "attachments", "old_identifier", "new_identifier", "epoch", "project", "workspace", "issue", "issue_comment", "actor"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IssueActivity: + """Create an instance of IssueActivity from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if field (nullable) is None + # and __fields_set__ contains the field + if self.field is None and "field" in self.__fields_set__: + _dict['field'] = None + + # set to None if old_value (nullable) is None + # and __fields_set__ contains the field + if self.old_value is None and "old_value" in self.__fields_set__: + _dict['old_value'] = None + + # set to None if new_value (nullable) is None + # and __fields_set__ contains the field + if self.new_value is None and "new_value" in self.__fields_set__: + _dict['new_value'] = None + + # set to None if old_identifier (nullable) is None + # and __fields_set__ contains the field + if self.old_identifier is None and "old_identifier" in self.__fields_set__: + _dict['old_identifier'] = None + + # set to None if new_identifier (nullable) is None + # and __fields_set__ contains the field + if self.new_identifier is None and "new_identifier" in self.__fields_set__: + _dict['new_identifier'] = None + + # set to None if epoch (nullable) is None + # and __fields_set__ contains the field + if self.epoch is None and "epoch" in self.__fields_set__: + _dict['epoch'] = None + + # set to None if issue (nullable) is None + # and __fields_set__ contains the field + if self.issue is None and "issue" in self.__fields_set__: + _dict['issue'] = None + + # set to None if issue_comment (nullable) is None + # and __fields_set__ contains the field + if self.issue_comment is None and "issue_comment" in self.__fields_set__: + _dict['issue_comment'] = None + + # set to None if actor (nullable) is None + # and __fields_set__ contains the field + if self.actor is None and "actor" in self.__fields_set__: + _dict['actor'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IssueActivity: + """Create an instance of IssueActivity from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IssueActivity.parse_obj(obj) + + _obj = IssueActivity.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "verb": obj.get("verb"), + "field": obj.get("field"), + "old_value": obj.get("old_value"), + "new_value": obj.get("new_value"), + "comment": obj.get("comment"), + "attachments": obj.get("attachments"), + "old_identifier": obj.get("old_identifier"), + "new_identifier": obj.get("new_identifier"), + "epoch": obj.get("epoch"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "issue": obj.get("issue"), + "issue_comment": obj.get("issue_comment"), + "actor": obj.get("actor") + }) + return _obj + + diff --git a/plane/models/issue_attachment.py b/plane/models/issue_attachment.py new file mode 100644 index 0000000..49a8e0d --- /dev/null +++ b/plane/models/issue_attachment.py @@ -0,0 +1,204 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, constr + +class IssueAttachment(BaseModel): + """ + IssueAttachment + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + attributes: Optional[Any] = None + asset: StrictStr = Field(...) + entity_type: Optional[constr(strict=True, max_length=255)] = None + entity_identifier: Optional[constr(strict=True, max_length=255)] = None + is_deleted: Optional[StrictBool] = None + is_archived: Optional[StrictBool] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + size: Optional[Union[StrictFloat, StrictInt]] = None + is_uploaded: Optional[StrictBool] = None + storage_metadata: Optional[Any] = None + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = Field(...) + user: Optional[StrictStr] = None + workspace: Optional[StrictStr] = Field(...) + draft_issue: Optional[StrictStr] = None + project: Optional[StrictStr] = Field(...) + issue: Optional[StrictStr] = Field(...) + comment: Optional[StrictStr] = None + page: Optional[StrictStr] = None + __properties = ["id", "created_at", "updated_at", "deleted_at", "attributes", "asset", "entity_type", "entity_identifier", "is_deleted", "is_archived", "external_id", "external_source", "size", "is_uploaded", "storage_metadata", "created_by", "updated_by", "user", "workspace", "draft_issue", "project", "issue", "comment", "page"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IssueAttachment: + """Create an instance of IssueAttachment from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "updated_by", + "workspace", + "project", + "issue", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if attributes (nullable) is None + # and __fields_set__ contains the field + if self.attributes is None and "attributes" in self.__fields_set__: + _dict['attributes'] = None + + # set to None if entity_type (nullable) is None + # and __fields_set__ contains the field + if self.entity_type is None and "entity_type" in self.__fields_set__: + _dict['entity_type'] = None + + # set to None if entity_identifier (nullable) is None + # and __fields_set__ contains the field + if self.entity_identifier is None and "entity_identifier" in self.__fields_set__: + _dict['entity_identifier'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if storage_metadata (nullable) is None + # and __fields_set__ contains the field + if self.storage_metadata is None and "storage_metadata" in self.__fields_set__: + _dict['storage_metadata'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if user (nullable) is None + # and __fields_set__ contains the field + if self.user is None and "user" in self.__fields_set__: + _dict['user'] = None + + # set to None if workspace (nullable) is None + # and __fields_set__ contains the field + if self.workspace is None and "workspace" in self.__fields_set__: + _dict['workspace'] = None + + # set to None if draft_issue (nullable) is None + # and __fields_set__ contains the field + if self.draft_issue is None and "draft_issue" in self.__fields_set__: + _dict['draft_issue'] = None + + # set to None if project (nullable) is None + # and __fields_set__ contains the field + if self.project is None and "project" in self.__fields_set__: + _dict['project'] = None + + # set to None if issue (nullable) is None + # and __fields_set__ contains the field + if self.issue is None and "issue" in self.__fields_set__: + _dict['issue'] = None + + # set to None if comment (nullable) is None + # and __fields_set__ contains the field + if self.comment is None and "comment" in self.__fields_set__: + _dict['comment'] = None + + # set to None if page (nullable) is None + # and __fields_set__ contains the field + if self.page is None and "page" in self.__fields_set__: + _dict['page'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IssueAttachment: + """Create an instance of IssueAttachment from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IssueAttachment.parse_obj(obj) + + _obj = IssueAttachment.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "attributes": obj.get("attributes"), + "asset": obj.get("asset"), + "entity_type": obj.get("entity_type"), + "entity_identifier": obj.get("entity_identifier"), + "is_deleted": obj.get("is_deleted"), + "is_archived": obj.get("is_archived"), + "external_id": obj.get("external_id"), + "external_source": obj.get("external_source"), + "size": obj.get("size"), + "is_uploaded": obj.get("is_uploaded"), + "storage_metadata": obj.get("storage_metadata"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "user": obj.get("user"), + "workspace": obj.get("workspace"), + "draft_issue": obj.get("draft_issue"), + "project": obj.get("project"), + "issue": obj.get("issue"), + "comment": obj.get("comment"), + "page": obj.get("page") + }) + return _obj + + diff --git a/plane/models/issue_comment.py b/plane/models/issue_comment.py new file mode 100644 index 0000000..208c299 --- /dev/null +++ b/plane/models/issue_comment.py @@ -0,0 +1,157 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import List, Optional +from pydantic import BaseModel, Field, StrictBool, StrictStr, conlist, constr, validator + +class IssueComment(BaseModel): + """ + IssueComment + """ + id: StrictStr = Field(...) + is_member: StrictBool = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + comment_html: Optional[StrictStr] = None + attachments: Optional[conlist(constr(strict=True, max_length=200), max_items=10)] = None + access: Optional[StrictStr] = Field(default=None, description="* `INTERNAL` - INTERNAL * `EXTERNAL` - EXTERNAL") + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + edited_at: Optional[datetime] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + issue: StrictStr = Field(...) + actor: Optional[StrictStr] = None + __properties = ["id", "is_member", "created_at", "updated_at", "deleted_at", "comment_html", "attachments", "access", "external_source", "external_id", "edited_at", "created_by", "updated_by", "project", "workspace", "issue", "actor"] + + @validator('access') + def access_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('INTERNAL', 'EXTERNAL',): + raise ValueError("must be one of enum values ('INTERNAL', 'EXTERNAL')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IssueComment: + """Create an instance of IssueComment from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "is_member", + "created_at", + "updated_at", + "created_by", + "updated_by", + "project", + "workspace", + "issue", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if edited_at (nullable) is None + # and __fields_set__ contains the field + if self.edited_at is None and "edited_at" in self.__fields_set__: + _dict['edited_at'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if actor (nullable) is None + # and __fields_set__ contains the field + if self.actor is None and "actor" in self.__fields_set__: + _dict['actor'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IssueComment: + """Create an instance of IssueComment from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IssueComment.parse_obj(obj) + + _obj = IssueComment.parse_obj({ + "id": obj.get("id"), + "is_member": obj.get("is_member"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "comment_html": obj.get("comment_html"), + "attachments": obj.get("attachments"), + "access": obj.get("access"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "edited_at": obj.get("edited_at"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "issue": obj.get("issue"), + "actor": obj.get("actor") + }) + return _obj + + diff --git a/plane/models/issue_expand.py b/plane/models/issue_expand.py new file mode 100644 index 0000000..52fa012 --- /dev/null +++ b/plane/models/issue_expand.py @@ -0,0 +1,264 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import Any, List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, conint, conlist, constr, validator +from plane.models.cycle_lite import CycleLite +from plane.models.label_lite import LabelLite +from plane.models.module_lite import ModuleLite +from plane.models.state_lite import StateLite +from plane.models.user_lite import UserLite + +class IssueExpand(BaseModel): + """ + IssueExpand + """ + id: StrictStr = Field(...) + cycle: CycleLite = Field(...) + module: ModuleLite = Field(...) + labels: conlist(LabelLite) = Field(...) + assignees: conlist(UserLite) = Field(...) + state: StateLite = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + point: Optional[conint(strict=True, le=12, ge=0)] = None + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[Any] = None + description_html: Optional[StrictStr] = None + description_stripped: Optional[StrictStr] = None + description_binary: Optional[Union[StrictBytes, StrictStr]] = Field(...) + priority: Optional[StrictStr] = Field(default=None, description="* `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None") + start_date: Optional[date] = None + target_date: Optional[date] = None + sequence_id: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + completed_at: Optional[datetime] = None + archived_at: Optional[date] = None + is_draft: Optional[StrictBool] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + parent: Optional[StrictStr] = None + estimate_point: Optional[StrictStr] = None + type: Optional[StrictStr] = None + __properties = ["id", "cycle", "module", "labels", "assignees", "state", "created_at", "updated_at", "deleted_at", "point", "name", "description", "description_html", "description_stripped", "description_binary", "priority", "start_date", "target_date", "sequence_id", "sort_order", "completed_at", "archived_at", "is_draft", "external_source", "external_id", "created_by", "updated_by", "project", "workspace", "parent", "estimate_point", "type"] + + @validator('priority') + def priority_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('urgent', 'high', 'medium', 'low', 'none',): + raise ValueError("must be one of enum values ('urgent', 'high', 'medium', 'low', 'none')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IssueExpand: + """Create an instance of IssueExpand from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "cycle", + "module", + "labels", + "assignees", + "state", + "created_at", + "updated_at", + "description_binary", + "created_by", + "updated_by", + "project", + "workspace", + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of cycle + if self.cycle: + _dict['cycle'] = self.cycle.to_dict() + # override the default output from pydantic by calling `to_dict()` of module + if self.module: + _dict['module'] = self.module.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in labels (list) + _items = [] + if self.labels: + for _item in self.labels: + if _item: + _items.append(_item.to_dict()) + _dict['labels'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in assignees (list) + _items = [] + if self.assignees: + for _item in self.assignees: + if _item: + _items.append(_item.to_dict()) + _dict['assignees'] = _items + # override the default output from pydantic by calling `to_dict()` of state + if self.state: + _dict['state'] = self.state.to_dict() + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if point (nullable) is None + # and __fields_set__ contains the field + if self.point is None and "point" in self.__fields_set__: + _dict['point'] = None + + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + # set to None if description_stripped (nullable) is None + # and __fields_set__ contains the field + if self.description_stripped is None and "description_stripped" in self.__fields_set__: + _dict['description_stripped'] = None + + # set to None if description_binary (nullable) is None + # and __fields_set__ contains the field + if self.description_binary is None and "description_binary" in self.__fields_set__: + _dict['description_binary'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if completed_at (nullable) is None + # and __fields_set__ contains the field + if self.completed_at is None and "completed_at" in self.__fields_set__: + _dict['completed_at'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if parent (nullable) is None + # and __fields_set__ contains the field + if self.parent is None and "parent" in self.__fields_set__: + _dict['parent'] = None + + # set to None if estimate_point (nullable) is None + # and __fields_set__ contains the field + if self.estimate_point is None and "estimate_point" in self.__fields_set__: + _dict['estimate_point'] = None + + # set to None if type (nullable) is None + # and __fields_set__ contains the field + if self.type is None and "type" in self.__fields_set__: + _dict['type'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IssueExpand: + """Create an instance of IssueExpand from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IssueExpand.parse_obj(obj) + + _obj = IssueExpand.parse_obj({ + "id": obj.get("id"), + "cycle": CycleLite.from_dict(obj.get("cycle")) if obj.get("cycle") is not None else None, + "module": ModuleLite.from_dict(obj.get("module")) if obj.get("module") is not None else None, + "labels": [LabelLite.from_dict(_item) for _item in obj.get("labels")] if obj.get("labels") is not None else None, + "assignees": [UserLite.from_dict(_item) for _item in obj.get("assignees")] if obj.get("assignees") is not None else None, + "state": StateLite.from_dict(obj.get("state")) if obj.get("state") is not None else None, + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "point": obj.get("point"), + "name": obj.get("name"), + "description": obj.get("description"), + "description_html": obj.get("description_html"), + "description_stripped": obj.get("description_stripped"), + "description_binary": obj.get("description_binary"), + "priority": obj.get("priority"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "sequence_id": obj.get("sequence_id"), + "sort_order": obj.get("sort_order"), + "completed_at": obj.get("completed_at"), + "archived_at": obj.get("archived_at"), + "is_draft": obj.get("is_draft"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "parent": obj.get("parent"), + "estimate_point": obj.get("estimate_point"), + "type": obj.get("type") + }) + return _obj + + diff --git a/plane/models/issue_link.py b/plane/models/issue_link.py new file mode 100644 index 0000000..b8c7426 --- /dev/null +++ b/plane/models/issue_link.py @@ -0,0 +1,126 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional +from pydantic import BaseModel, Field, StrictStr, constr + +class IssueLink(BaseModel): + """ + IssueLink + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = None + title: Optional[constr(strict=True, max_length=255)] = None + url: StrictStr = Field(...) + metadata: Optional[Any] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + issue: StrictStr = Field(...) + __properties = ["id", "created_at", "updated_at", "deleted_at", "title", "url", "metadata", "created_by", "updated_by", "project", "workspace", "issue"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> IssueLink: + """Create an instance of IssueLink from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "created_by", + "updated_by", + "project", + "workspace", + "issue", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if title (nullable) is None + # and __fields_set__ contains the field + if self.title is None and "title" in self.__fields_set__: + _dict['title'] = None + + # set to None if metadata (nullable) is None + # and __fields_set__ contains the field + if self.metadata is None and "metadata" in self.__fields_set__: + _dict['metadata'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> IssueLink: + """Create an instance of IssueLink from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return IssueLink.parse_obj(obj) + + _obj = IssueLink.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "title": obj.get("title"), + "url": obj.get("url"), + "metadata": obj.get("metadata"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "issue": obj.get("issue") + }) + return _obj + + diff --git a/plane/models/label.py b/plane/models/label.py new file mode 100644 index 0000000..c187097 --- /dev/null +++ b/plane/models/label.py @@ -0,0 +1,142 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, constr + +class Label(BaseModel): + """ + Label + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + color: Optional[constr(strict=True, max_length=255)] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + workspace: StrictStr = Field(...) + project: Optional[StrictStr] = Field(...) + parent: Optional[StrictStr] = None + __properties = ["id", "created_at", "updated_at", "deleted_at", "name", "description", "color", "sort_order", "external_source", "external_id", "created_by", "updated_by", "workspace", "project", "parent"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Label: + """Create an instance of Label from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "deleted_at", + "created_by", + "updated_by", + "workspace", + "project", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if project (nullable) is None + # and __fields_set__ contains the field + if self.project is None and "project" in self.__fields_set__: + _dict['project'] = None + + # set to None if parent (nullable) is None + # and __fields_set__ contains the field + if self.parent is None and "parent" in self.__fields_set__: + _dict['parent'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Label: + """Create an instance of Label from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Label.parse_obj(obj) + + _obj = Label.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "color": obj.get("color"), + "sort_order": obj.get("sort_order"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "workspace": obj.get("workspace"), + "project": obj.get("project"), + "parent": obj.get("parent") + }) + return _obj + + diff --git a/plane/models/label_lite.py b/plane/models/label_lite.py new file mode 100644 index 0000000..a49b315 --- /dev/null +++ b/plane/models/label_lite.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, constr + +class LabelLite(BaseModel): + """ + LabelLite + """ + id: StrictStr = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + color: Optional[constr(strict=True, max_length=255)] = None + __properties = ["id", "name", "color"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> LabelLite: + """Create an instance of LabelLite from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> LabelLite: + """Create an instance of LabelLite from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return LabelLite.parse_obj(obj) + + _obj = LabelLite.parse_obj({ + "id": obj.get("id"), + "name": obj.get("name"), + "color": obj.get("color") + }) + return _obj + + diff --git a/plane/models/module.py b/plane/models/module.py new file mode 100644 index 0000000..c274e34 --- /dev/null +++ b/plane/models/module.py @@ -0,0 +1,216 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import Any, List, Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conlist, constr, validator + +class Module(BaseModel): + """ + Module + """ + id: StrictStr = Field(...) + members: Optional[conlist(StrictStr)] = None + total_issues: StrictInt = Field(...) + cancelled_issues: StrictInt = Field(...) + completed_issues: StrictInt = Field(...) + started_issues: StrictInt = Field(...) + unstarted_issues: StrictInt = Field(...) + backlog_issues: StrictInt = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + description_text: Optional[Any] = None + description_html: Optional[Any] = None + start_date: Optional[date] = None + target_date: Optional[date] = None + status: Optional[StrictStr] = Field(default=None, description="* `backlog` - Backlog * `planned` - Planned * `in-progress` - In Progress * `paused` - Paused * `completed` - Completed * `cancelled` - Cancelled") + view_props: Optional[Any] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + archived_at: Optional[datetime] = None + logo_props: Optional[Any] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + lead: Optional[StrictStr] = None + __properties = ["id", "members", "total_issues", "cancelled_issues", "completed_issues", "started_issues", "unstarted_issues", "backlog_issues", "created_at", "updated_at", "deleted_at", "name", "description", "description_text", "description_html", "start_date", "target_date", "status", "view_props", "sort_order", "external_source", "external_id", "archived_at", "logo_props", "created_by", "updated_by", "project", "workspace", "lead"] + + @validator('status') + def status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled',): + raise ValueError("must be one of enum values ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Module: + """Create an instance of Module from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "total_issues", + "cancelled_issues", + "completed_issues", + "started_issues", + "unstarted_issues", + "backlog_issues", + "created_at", + "updated_at", + "deleted_at", + "created_by", + "updated_by", + "project", + "workspace", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if description_text (nullable) is None + # and __fields_set__ contains the field + if self.description_text is None and "description_text" in self.__fields_set__: + _dict['description_text'] = None + + # set to None if description_html (nullable) is None + # and __fields_set__ contains the field + if self.description_html is None and "description_html" in self.__fields_set__: + _dict['description_html'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if view_props (nullable) is None + # and __fields_set__ contains the field + if self.view_props is None and "view_props" in self.__fields_set__: + _dict['view_props'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if lead (nullable) is None + # and __fields_set__ contains the field + if self.lead is None and "lead" in self.__fields_set__: + _dict['lead'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Module: + """Create an instance of Module from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Module.parse_obj(obj) + + _obj = Module.parse_obj({ + "id": obj.get("id"), + "members": obj.get("members"), + "total_issues": obj.get("total_issues"), + "cancelled_issues": obj.get("cancelled_issues"), + "completed_issues": obj.get("completed_issues"), + "started_issues": obj.get("started_issues"), + "unstarted_issues": obj.get("unstarted_issues"), + "backlog_issues": obj.get("backlog_issues"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "description_text": obj.get("description_text"), + "description_html": obj.get("description_html"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "status": obj.get("status"), + "view_props": obj.get("view_props"), + "sort_order": obj.get("sort_order"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "archived_at": obj.get("archived_at"), + "logo_props": obj.get("logo_props"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "lead": obj.get("lead") + }) + return _obj + + diff --git a/plane/models/module_issue.py b/plane/models/module_issue.py new file mode 100644 index 0000000..95e9254 --- /dev/null +++ b/plane/models/module_issue.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class ModuleIssue(BaseModel): + """ + ModuleIssue + """ + id: StrictStr = Field(...) + sub_issues_count: StrictInt = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + module: StrictStr = Field(...) + issue: StrictStr = Field(...) + __properties = ["id", "sub_issues_count", "created_at", "updated_at", "deleted_at", "created_by", "updated_by", "project", "workspace", "module", "issue"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ModuleIssue: + """Create an instance of ModuleIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "sub_issues_count", + "created_at", + "updated_at", + "created_by", + "updated_by", + "project", + "workspace", + "module", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ModuleIssue: + """Create an instance of ModuleIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ModuleIssue.parse_obj(obj) + + _obj = ModuleIssue.parse_obj({ + "id": obj.get("id"), + "sub_issues_count": obj.get("sub_issues_count"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "module": obj.get("module"), + "issue": obj.get("issue") + }) + return _obj + + diff --git a/plane/models/module_lite.py b/plane/models/module_lite.py new file mode 100644 index 0000000..ea6ad8c --- /dev/null +++ b/plane/models/module_lite.py @@ -0,0 +1,194 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import Any, List, Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conlist, constr, validator + +class ModuleLite(BaseModel): + """ + ModuleLite + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + description_text: Optional[Any] = None + description_html: Optional[Any] = None + start_date: Optional[date] = None + target_date: Optional[date] = None + status: Optional[StrictStr] = Field(default=None, description="* `backlog` - Backlog * `planned` - Planned * `in-progress` - In Progress * `paused` - Paused * `completed` - Completed * `cancelled` - Cancelled") + view_props: Optional[Any] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + archived_at: Optional[datetime] = None + logo_props: Optional[Any] = None + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = None + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + lead: Optional[StrictStr] = None + members: conlist(StrictStr) = Field(...) + __properties = ["id", "created_at", "updated_at", "deleted_at", "name", "description", "description_text", "description_html", "start_date", "target_date", "status", "view_props", "sort_order", "external_source", "external_id", "archived_at", "logo_props", "created_by", "updated_by", "project", "workspace", "lead", "members"] + + @validator('status') + def status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled',): + raise ValueError("must be one of enum values ('backlog', 'planned', 'in-progress', 'paused', 'completed', 'cancelled')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ModuleLite: + """Create an instance of ModuleLite from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "members", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if description_text (nullable) is None + # and __fields_set__ contains the field + if self.description_text is None and "description_text" in self.__fields_set__: + _dict['description_text'] = None + + # set to None if description_html (nullable) is None + # and __fields_set__ contains the field + if self.description_html is None and "description_html" in self.__fields_set__: + _dict['description_html'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if view_props (nullable) is None + # and __fields_set__ contains the field + if self.view_props is None and "view_props" in self.__fields_set__: + _dict['view_props'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if lead (nullable) is None + # and __fields_set__ contains the field + if self.lead is None and "lead" in self.__fields_set__: + _dict['lead'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ModuleLite: + """Create an instance of ModuleLite from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ModuleLite.parse_obj(obj) + + _obj = ModuleLite.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "description_text": obj.get("description_text"), + "description_html": obj.get("description_html"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "status": obj.get("status"), + "view_props": obj.get("view_props"), + "sort_order": obj.get("sort_order"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "archived_at": obj.get("archived_at"), + "logo_props": obj.get("logo_props"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "lead": obj.get("lead"), + "members": obj.get("members") + }) + return _obj + + diff --git a/plane/models/patched_asset_update.py b/plane/models/patched_asset_update.py new file mode 100644 index 0000000..14dbc9e --- /dev/null +++ b/plane/models/patched_asset_update.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Any, Optional +from pydantic import BaseModel, Field + +class PatchedAssetUpdate(BaseModel): + """ + Serializer for asset update requests after upload # noqa: E501 + """ + attributes: Optional[Any] = Field(default=None, description="Additional attributes to update for the asset") + __properties = ["attributes"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> PatchedAssetUpdate: + """Create an instance of PatchedAssetUpdate from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if attributes (nullable) is None + # and __fields_set__ contains the field + if self.attributes is None and "attributes" in self.__fields_set__: + _dict['attributes'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> PatchedAssetUpdate: + """Create an instance of PatchedAssetUpdate from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return PatchedAssetUpdate.parse_obj(obj) + + _obj = PatchedAssetUpdate.parse_obj({ + "attributes": obj.get("attributes") + }) + return _obj + + diff --git a/plane/models/patched_generic_asset_update.py b/plane/models/patched_generic_asset_update.py new file mode 100644 index 0000000..a2488ab --- /dev/null +++ b/plane/models/patched_generic_asset_update.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool + +class PatchedGenericAssetUpdate(BaseModel): + """ + Serializer for generic asset update requests # noqa: E501 + """ + is_uploaded: Optional[StrictBool] = Field(default=True, description="Whether the asset has been successfully uploaded") + __properties = ["is_uploaded"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> PatchedGenericAssetUpdate: + """Create an instance of PatchedGenericAssetUpdate from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> PatchedGenericAssetUpdate: + """Create an instance of PatchedGenericAssetUpdate from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return PatchedGenericAssetUpdate.parse_obj(obj) + + _obj = PatchedGenericAssetUpdate.parse_obj({ + "is_uploaded": obj.get("is_uploaded") if obj.get("is_uploaded") is not None else True + }) + return _obj + + diff --git a/plane/models/patched_issue.py b/plane/models/patched_issue.py new file mode 100644 index 0000000..8854ccf --- /dev/null +++ b/plane/models/patched_issue.py @@ -0,0 +1,224 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, conint, conlist, constr, validator + +class PatchedIssue(BaseModel): + """ + PatchedIssue + """ + id: Optional[StrictStr] = None + assignees: Optional[conlist(StrictStr)] = None + labels: Optional[conlist(StrictStr)] = None + type_id: Optional[StrictStr] = None + created_at: Optional[datetime] = None + updated_at: Optional[datetime] = None + deleted_at: Optional[datetime] = None + point: Optional[conint(strict=True, le=12, ge=0)] = None + name: Optional[constr(strict=True, max_length=255)] = None + description_html: Optional[StrictStr] = None + description_binary: Optional[Union[StrictBytes, StrictStr]] = None + priority: Optional[StrictStr] = Field(default=None, description="* `urgent` - Urgent * `high` - High * `medium` - Medium * `low` - Low * `none` - None") + start_date: Optional[date] = None + target_date: Optional[date] = None + sequence_id: Optional[conint(strict=True, le=2147483647, ge=-2147483648)] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + completed_at: Optional[datetime] = None + archived_at: Optional[date] = None + is_draft: Optional[StrictBool] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = None + project: Optional[StrictStr] = None + workspace: Optional[StrictStr] = None + parent: Optional[StrictStr] = None + state: Optional[StrictStr] = None + estimate_point: Optional[StrictStr] = None + type: Optional[StrictStr] = None + __properties = ["id", "assignees", "labels", "type_id", "created_at", "updated_at", "deleted_at", "point", "name", "description_html", "description_binary", "priority", "start_date", "target_date", "sequence_id", "sort_order", "completed_at", "archived_at", "is_draft", "external_source", "external_id", "created_by", "updated_by", "project", "workspace", "parent", "state", "estimate_point", "type"] + + @validator('priority') + def priority_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('urgent', 'high', 'medium', 'low', 'none',): + raise ValueError("must be one of enum values ('urgent', 'high', 'medium', 'low', 'none')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> PatchedIssue: + """Create an instance of PatchedIssue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "description_binary", + "updated_by", + "project", + "workspace", + }, + exclude_none=True) + # set to None if type_id (nullable) is None + # and __fields_set__ contains the field + if self.type_id is None and "type_id" in self.__fields_set__: + _dict['type_id'] = None + + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if point (nullable) is None + # and __fields_set__ contains the field + if self.point is None and "point" in self.__fields_set__: + _dict['point'] = None + + # set to None if description_binary (nullable) is None + # and __fields_set__ contains the field + if self.description_binary is None and "description_binary" in self.__fields_set__: + _dict['description_binary'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if target_date (nullable) is None + # and __fields_set__ contains the field + if self.target_date is None and "target_date" in self.__fields_set__: + _dict['target_date'] = None + + # set to None if completed_at (nullable) is None + # and __fields_set__ contains the field + if self.completed_at is None and "completed_at" in self.__fields_set__: + _dict['completed_at'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if parent (nullable) is None + # and __fields_set__ contains the field + if self.parent is None and "parent" in self.__fields_set__: + _dict['parent'] = None + + # set to None if state (nullable) is None + # and __fields_set__ contains the field + if self.state is None and "state" in self.__fields_set__: + _dict['state'] = None + + # set to None if estimate_point (nullable) is None + # and __fields_set__ contains the field + if self.estimate_point is None and "estimate_point" in self.__fields_set__: + _dict['estimate_point'] = None + + # set to None if type (nullable) is None + # and __fields_set__ contains the field + if self.type is None and "type" in self.__fields_set__: + _dict['type'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> PatchedIssue: + """Create an instance of PatchedIssue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return PatchedIssue.parse_obj(obj) + + _obj = PatchedIssue.parse_obj({ + "id": obj.get("id"), + "assignees": obj.get("assignees"), + "labels": obj.get("labels"), + "type_id": obj.get("type_id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "point": obj.get("point"), + "name": obj.get("name"), + "description_html": obj.get("description_html"), + "description_binary": obj.get("description_binary"), + "priority": obj.get("priority"), + "start_date": obj.get("start_date"), + "target_date": obj.get("target_date"), + "sequence_id": obj.get("sequence_id"), + "sort_order": obj.get("sort_order"), + "completed_at": obj.get("completed_at"), + "archived_at": obj.get("archived_at"), + "is_draft": obj.get("is_draft"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace"), + "parent": obj.get("parent"), + "state": obj.get("state"), + "estimate_point": obj.get("estimate_point"), + "type": obj.get("type") + }) + return _obj + + diff --git a/plane/models/patched_project.py b/plane/models/patched_project.py new file mode 100644 index 0000000..077cacf --- /dev/null +++ b/plane/models/patched_project.py @@ -0,0 +1,264 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, conint, constr, validator + +class PatchedProject(BaseModel): + """ + PatchedProject + """ + id: Optional[StrictStr] = None + total_members: Optional[StrictInt] = None + total_cycles: Optional[StrictInt] = None + total_modules: Optional[StrictInt] = None + is_member: Optional[StrictBool] = None + sort_order: Optional[Union[StrictFloat, StrictInt]] = None + member_role: Optional[StrictInt] = None + is_deployed: Optional[StrictBool] = None + cover_image_url: Optional[StrictStr] = None + created_at: Optional[datetime] = None + updated_at: Optional[datetime] = None + deleted_at: Optional[datetime] = None + name: Optional[constr(strict=True, max_length=255)] = None + description: Optional[StrictStr] = None + description_text: Optional[Any] = None + description_html: Optional[Any] = None + network: Optional[conint(strict=True, le=32767, ge=0)] = Field(default=None, description="* `0` - Secret * `2` - Public") + identifier: Optional[constr(strict=True, max_length=12)] = None + emoji: Optional[StrictStr] = None + icon_prop: Optional[Any] = None + module_view: Optional[StrictBool] = None + cycle_view: Optional[StrictBool] = None + issue_views_view: Optional[StrictBool] = None + page_view: Optional[StrictBool] = None + intake_view: Optional[StrictBool] = None + is_time_tracking_enabled: Optional[StrictBool] = None + is_issue_type_enabled: Optional[StrictBool] = None + guest_view_all_features: Optional[StrictBool] = None + cover_image: Optional[StrictStr] = None + archive_in: Optional[conint(strict=True, le=12, ge=0)] = None + close_in: Optional[conint(strict=True, le=12, ge=0)] = None + logo_props: Optional[Any] = None + archived_at: Optional[datetime] = None + timezone: Optional[StrictStr] = Field(default=None, description="* `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu") + created_by: Optional[StrictStr] = None + updated_by: Optional[StrictStr] = None + workspace: Optional[StrictStr] = None + default_assignee: Optional[StrictStr] = None + project_lead: Optional[StrictStr] = None + cover_image_asset: Optional[StrictStr] = None + estimate: Optional[StrictStr] = None + default_state: Optional[StrictStr] = None + __properties = ["id", "total_members", "total_cycles", "total_modules", "is_member", "sort_order", "member_role", "is_deployed", "cover_image_url", "created_at", "updated_at", "deleted_at", "name", "description", "description_text", "description_html", "network", "identifier", "emoji", "icon_prop", "module_view", "cycle_view", "issue_views_view", "page_view", "intake_view", "is_time_tracking_enabled", "is_issue_type_enabled", "guest_view_all_features", "cover_image", "archive_in", "close_in", "logo_props", "archived_at", "timezone", "created_by", "updated_by", "workspace", "default_assignee", "project_lead", "cover_image_asset", "estimate", "default_state"] + + @validator('network') + def network_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in (0, 2,): + raise ValueError("must be one of enum values (0, 2)") + return value + + @validator('timezone') + def timezone_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu',): + raise ValueError("must be one of enum values ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> PatchedProject: + """Create an instance of PatchedProject from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "total_members", + "total_cycles", + "total_modules", + "is_member", + "sort_order", + "member_role", + "is_deployed", + "cover_image_url", + "created_at", + "updated_at", + "deleted_at", + "emoji", + "created_by", + "updated_by", + "workspace", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if description_text (nullable) is None + # and __fields_set__ contains the field + if self.description_text is None and "description_text" in self.__fields_set__: + _dict['description_text'] = None + + # set to None if description_html (nullable) is None + # and __fields_set__ contains the field + if self.description_html is None and "description_html" in self.__fields_set__: + _dict['description_html'] = None + + # set to None if emoji (nullable) is None + # and __fields_set__ contains the field + if self.emoji is None and "emoji" in self.__fields_set__: + _dict['emoji'] = None + + # set to None if icon_prop (nullable) is None + # and __fields_set__ contains the field + if self.icon_prop is None and "icon_prop" in self.__fields_set__: + _dict['icon_prop'] = None + + # set to None if cover_image (nullable) is None + # and __fields_set__ contains the field + if self.cover_image is None and "cover_image" in self.__fields_set__: + _dict['cover_image'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if default_assignee (nullable) is None + # and __fields_set__ contains the field + if self.default_assignee is None and "default_assignee" in self.__fields_set__: + _dict['default_assignee'] = None + + # set to None if project_lead (nullable) is None + # and __fields_set__ contains the field + if self.project_lead is None and "project_lead" in self.__fields_set__: + _dict['project_lead'] = None + + # set to None if cover_image_asset (nullable) is None + # and __fields_set__ contains the field + if self.cover_image_asset is None and "cover_image_asset" in self.__fields_set__: + _dict['cover_image_asset'] = None + + # set to None if estimate (nullable) is None + # and __fields_set__ contains the field + if self.estimate is None and "estimate" in self.__fields_set__: + _dict['estimate'] = None + + # set to None if default_state (nullable) is None + # and __fields_set__ contains the field + if self.default_state is None and "default_state" in self.__fields_set__: + _dict['default_state'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> PatchedProject: + """Create an instance of PatchedProject from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return PatchedProject.parse_obj(obj) + + _obj = PatchedProject.parse_obj({ + "id": obj.get("id"), + "total_members": obj.get("total_members"), + "total_cycles": obj.get("total_cycles"), + "total_modules": obj.get("total_modules"), + "is_member": obj.get("is_member"), + "sort_order": obj.get("sort_order"), + "member_role": obj.get("member_role"), + "is_deployed": obj.get("is_deployed"), + "cover_image_url": obj.get("cover_image_url"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "description_text": obj.get("description_text"), + "description_html": obj.get("description_html"), + "network": obj.get("network"), + "identifier": obj.get("identifier"), + "emoji": obj.get("emoji"), + "icon_prop": obj.get("icon_prop"), + "module_view": obj.get("module_view"), + "cycle_view": obj.get("cycle_view"), + "issue_views_view": obj.get("issue_views_view"), + "page_view": obj.get("page_view"), + "intake_view": obj.get("intake_view"), + "is_time_tracking_enabled": obj.get("is_time_tracking_enabled"), + "is_issue_type_enabled": obj.get("is_issue_type_enabled"), + "guest_view_all_features": obj.get("guest_view_all_features"), + "cover_image": obj.get("cover_image"), + "archive_in": obj.get("archive_in"), + "close_in": obj.get("close_in"), + "logo_props": obj.get("logo_props"), + "archived_at": obj.get("archived_at"), + "timezone": obj.get("timezone"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "workspace": obj.get("workspace"), + "default_assignee": obj.get("default_assignee"), + "project_lead": obj.get("project_lead"), + "cover_image_asset": obj.get("cover_image_asset"), + "estimate": obj.get("estimate"), + "default_state": obj.get("default_state") + }) + return _obj + + diff --git a/plane/models/project.py b/plane/models/project.py new file mode 100644 index 0000000..7ece0ec --- /dev/null +++ b/plane/models/project.py @@ -0,0 +1,264 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Any, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, conint, constr, validator + +class Project(BaseModel): + """ + Project + """ + id: StrictStr = Field(...) + total_members: StrictInt = Field(...) + total_cycles: StrictInt = Field(...) + total_modules: StrictInt = Field(...) + is_member: StrictBool = Field(...) + sort_order: Union[StrictFloat, StrictInt] = Field(...) + member_role: StrictInt = Field(...) + is_deployed: StrictBool = Field(...) + cover_image_url: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + description_text: Optional[Any] = None + description_html: Optional[Any] = None + network: Optional[conint(strict=True, le=32767, ge=0)] = Field(default=None, description="* `0` - Secret * `2` - Public") + identifier: constr(strict=True, max_length=12) = Field(...) + emoji: Optional[StrictStr] = Field(...) + icon_prop: Optional[Any] = None + module_view: Optional[StrictBool] = None + cycle_view: Optional[StrictBool] = None + issue_views_view: Optional[StrictBool] = None + page_view: Optional[StrictBool] = None + intake_view: Optional[StrictBool] = None + is_time_tracking_enabled: Optional[StrictBool] = None + is_issue_type_enabled: Optional[StrictBool] = None + guest_view_all_features: Optional[StrictBool] = None + cover_image: Optional[StrictStr] = None + archive_in: Optional[conint(strict=True, le=12, ge=0)] = None + close_in: Optional[conint(strict=True, le=12, ge=0)] = None + logo_props: Optional[Any] = None + archived_at: Optional[datetime] = None + timezone: Optional[StrictStr] = Field(default=None, description="* `Africa/Abidjan` - Africa/Abidjan * `Africa/Accra` - Africa/Accra * `Africa/Addis_Ababa` - Africa/Addis_Ababa * `Africa/Algiers` - Africa/Algiers * `Africa/Asmara` - Africa/Asmara * `Africa/Asmera` - Africa/Asmera * `Africa/Bamako` - Africa/Bamako * `Africa/Bangui` - Africa/Bangui * `Africa/Banjul` - Africa/Banjul * `Africa/Bissau` - Africa/Bissau * `Africa/Blantyre` - Africa/Blantyre * `Africa/Brazzaville` - Africa/Brazzaville * `Africa/Bujumbura` - Africa/Bujumbura * `Africa/Cairo` - Africa/Cairo * `Africa/Casablanca` - Africa/Casablanca * `Africa/Ceuta` - Africa/Ceuta * `Africa/Conakry` - Africa/Conakry * `Africa/Dakar` - Africa/Dakar * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam * `Africa/Djibouti` - Africa/Djibouti * `Africa/Douala` - Africa/Douala * `Africa/El_Aaiun` - Africa/El_Aaiun * `Africa/Freetown` - Africa/Freetown * `Africa/Gaborone` - Africa/Gaborone * `Africa/Harare` - Africa/Harare * `Africa/Johannesburg` - Africa/Johannesburg * `Africa/Juba` - Africa/Juba * `Africa/Kampala` - Africa/Kampala * `Africa/Khartoum` - Africa/Khartoum * `Africa/Kigali` - Africa/Kigali * `Africa/Kinshasa` - Africa/Kinshasa * `Africa/Lagos` - Africa/Lagos * `Africa/Libreville` - Africa/Libreville * `Africa/Lome` - Africa/Lome * `Africa/Luanda` - Africa/Luanda * `Africa/Lubumbashi` - Africa/Lubumbashi * `Africa/Lusaka` - Africa/Lusaka * `Africa/Malabo` - Africa/Malabo * `Africa/Maputo` - Africa/Maputo * `Africa/Maseru` - Africa/Maseru * `Africa/Mbabane` - Africa/Mbabane * `Africa/Mogadishu` - Africa/Mogadishu * `Africa/Monrovia` - Africa/Monrovia * `Africa/Nairobi` - Africa/Nairobi * `Africa/Ndjamena` - Africa/Ndjamena * `Africa/Niamey` - Africa/Niamey * `Africa/Nouakchott` - Africa/Nouakchott * `Africa/Ouagadougou` - Africa/Ouagadougou * `Africa/Porto-Novo` - Africa/Porto-Novo * `Africa/Sao_Tome` - Africa/Sao_Tome * `Africa/Timbuktu` - Africa/Timbuktu * `Africa/Tripoli` - Africa/Tripoli * `Africa/Tunis` - Africa/Tunis * `Africa/Windhoek` - Africa/Windhoek * `America/Adak` - America/Adak * `America/Anchorage` - America/Anchorage * `America/Anguilla` - America/Anguilla * `America/Antigua` - America/Antigua * `America/Araguaina` - America/Araguaina * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires * `America/Argentina/Catamarca` - America/Argentina/Catamarca * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia * `America/Argentina/Cordoba` - America/Argentina/Cordoba * `America/Argentina/Jujuy` - America/Argentina/Jujuy * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja * `America/Argentina/Mendoza` - America/Argentina/Mendoza * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos * `America/Argentina/Salta` - America/Argentina/Salta * `America/Argentina/San_Juan` - America/Argentina/San_Juan * `America/Argentina/San_Luis` - America/Argentina/San_Luis * `America/Argentina/Tucuman` - America/Argentina/Tucuman * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia * `America/Aruba` - America/Aruba * `America/Asuncion` - America/Asuncion * `America/Atikokan` - America/Atikokan * `America/Atka` - America/Atka * `America/Bahia` - America/Bahia * `America/Bahia_Banderas` - America/Bahia_Banderas * `America/Barbados` - America/Barbados * `America/Belem` - America/Belem * `America/Belize` - America/Belize * `America/Blanc-Sablon` - America/Blanc-Sablon * `America/Boa_Vista` - America/Boa_Vista * `America/Bogota` - America/Bogota * `America/Boise` - America/Boise * `America/Buenos_Aires` - America/Buenos_Aires * `America/Cambridge_Bay` - America/Cambridge_Bay * `America/Campo_Grande` - America/Campo_Grande * `America/Cancun` - America/Cancun * `America/Caracas` - America/Caracas * `America/Catamarca` - America/Catamarca * `America/Cayenne` - America/Cayenne * `America/Cayman` - America/Cayman * `America/Chicago` - America/Chicago * `America/Chihuahua` - America/Chihuahua * `America/Ciudad_Juarez` - America/Ciudad_Juarez * `America/Coral_Harbour` - America/Coral_Harbour * `America/Cordoba` - America/Cordoba * `America/Costa_Rica` - America/Costa_Rica * `America/Creston` - America/Creston * `America/Cuiaba` - America/Cuiaba * `America/Curacao` - America/Curacao * `America/Danmarkshavn` - America/Danmarkshavn * `America/Dawson` - America/Dawson * `America/Dawson_Creek` - America/Dawson_Creek * `America/Denver` - America/Denver * `America/Detroit` - America/Detroit * `America/Dominica` - America/Dominica * `America/Edmonton` - America/Edmonton * `America/Eirunepe` - America/Eirunepe * `America/El_Salvador` - America/El_Salvador * `America/Ensenada` - America/Ensenada * `America/Fort_Nelson` - America/Fort_Nelson * `America/Fort_Wayne` - America/Fort_Wayne * `America/Fortaleza` - America/Fortaleza * `America/Glace_Bay` - America/Glace_Bay * `America/Godthab` - America/Godthab * `America/Goose_Bay` - America/Goose_Bay * `America/Grand_Turk` - America/Grand_Turk * `America/Grenada` - America/Grenada * `America/Guadeloupe` - America/Guadeloupe * `America/Guatemala` - America/Guatemala * `America/Guayaquil` - America/Guayaquil * `America/Guyana` - America/Guyana * `America/Halifax` - America/Halifax * `America/Havana` - America/Havana * `America/Hermosillo` - America/Hermosillo * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis * `America/Indiana/Knox` - America/Indiana/Knox * `America/Indiana/Marengo` - America/Indiana/Marengo * `America/Indiana/Petersburg` - America/Indiana/Petersburg * `America/Indiana/Tell_City` - America/Indiana/Tell_City * `America/Indiana/Vevay` - America/Indiana/Vevay * `America/Indiana/Vincennes` - America/Indiana/Vincennes * `America/Indiana/Winamac` - America/Indiana/Winamac * `America/Indianapolis` - America/Indianapolis * `America/Inuvik` - America/Inuvik * `America/Iqaluit` - America/Iqaluit * `America/Jamaica` - America/Jamaica * `America/Jujuy` - America/Jujuy * `America/Juneau` - America/Juneau * `America/Kentucky/Louisville` - America/Kentucky/Louisville * `America/Kentucky/Monticello` - America/Kentucky/Monticello * `America/Knox_IN` - America/Knox_IN * `America/Kralendijk` - America/Kralendijk * `America/La_Paz` - America/La_Paz * `America/Lima` - America/Lima * `America/Los_Angeles` - America/Los_Angeles * `America/Louisville` - America/Louisville * `America/Lower_Princes` - America/Lower_Princes * `America/Maceio` - America/Maceio * `America/Managua` - America/Managua * `America/Manaus` - America/Manaus * `America/Marigot` - America/Marigot * `America/Martinique` - America/Martinique * `America/Matamoros` - America/Matamoros * `America/Mazatlan` - America/Mazatlan * `America/Mendoza` - America/Mendoza * `America/Menominee` - America/Menominee * `America/Merida` - America/Merida * `America/Metlakatla` - America/Metlakatla * `America/Mexico_City` - America/Mexico_City * `America/Miquelon` - America/Miquelon * `America/Moncton` - America/Moncton * `America/Monterrey` - America/Monterrey * `America/Montevideo` - America/Montevideo * `America/Montreal` - America/Montreal * `America/Montserrat` - America/Montserrat * `America/Nassau` - America/Nassau * `America/New_York` - America/New_York * `America/Nipigon` - America/Nipigon * `America/Nome` - America/Nome * `America/Noronha` - America/Noronha * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah * `America/North_Dakota/Center` - America/North_Dakota/Center * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem * `America/Nuuk` - America/Nuuk * `America/Ojinaga` - America/Ojinaga * `America/Panama` - America/Panama * `America/Pangnirtung` - America/Pangnirtung * `America/Paramaribo` - America/Paramaribo * `America/Phoenix` - America/Phoenix * `America/Port-au-Prince` - America/Port-au-Prince * `America/Port_of_Spain` - America/Port_of_Spain * `America/Porto_Acre` - America/Porto_Acre * `America/Porto_Velho` - America/Porto_Velho * `America/Puerto_Rico` - America/Puerto_Rico * `America/Punta_Arenas` - America/Punta_Arenas * `America/Rainy_River` - America/Rainy_River * `America/Rankin_Inlet` - America/Rankin_Inlet * `America/Recife` - America/Recife * `America/Regina` - America/Regina * `America/Resolute` - America/Resolute * `America/Rio_Branco` - America/Rio_Branco * `America/Rosario` - America/Rosario * `America/Santa_Isabel` - America/Santa_Isabel * `America/Santarem` - America/Santarem * `America/Santiago` - America/Santiago * `America/Santo_Domingo` - America/Santo_Domingo * `America/Sao_Paulo` - America/Sao_Paulo * `America/Scoresbysund` - America/Scoresbysund * `America/Shiprock` - America/Shiprock * `America/Sitka` - America/Sitka * `America/St_Barthelemy` - America/St_Barthelemy * `America/St_Johns` - America/St_Johns * `America/St_Kitts` - America/St_Kitts * `America/St_Lucia` - America/St_Lucia * `America/St_Thomas` - America/St_Thomas * `America/St_Vincent` - America/St_Vincent * `America/Swift_Current` - America/Swift_Current * `America/Tegucigalpa` - America/Tegucigalpa * `America/Thule` - America/Thule * `America/Thunder_Bay` - America/Thunder_Bay * `America/Tijuana` - America/Tijuana * `America/Toronto` - America/Toronto * `America/Tortola` - America/Tortola * `America/Vancouver` - America/Vancouver * `America/Virgin` - America/Virgin * `America/Whitehorse` - America/Whitehorse * `America/Winnipeg` - America/Winnipeg * `America/Yakutat` - America/Yakutat * `America/Yellowknife` - America/Yellowknife * `Antarctica/Casey` - Antarctica/Casey * `Antarctica/Davis` - Antarctica/Davis * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville * `Antarctica/Macquarie` - Antarctica/Macquarie * `Antarctica/Mawson` - Antarctica/Mawson * `Antarctica/McMurdo` - Antarctica/McMurdo * `Antarctica/Palmer` - Antarctica/Palmer * `Antarctica/Rothera` - Antarctica/Rothera * `Antarctica/South_Pole` - Antarctica/South_Pole * `Antarctica/Syowa` - Antarctica/Syowa * `Antarctica/Troll` - Antarctica/Troll * `Antarctica/Vostok` - Antarctica/Vostok * `Arctic/Longyearbyen` - Arctic/Longyearbyen * `Asia/Aden` - Asia/Aden * `Asia/Almaty` - Asia/Almaty * `Asia/Amman` - Asia/Amman * `Asia/Anadyr` - Asia/Anadyr * `Asia/Aqtau` - Asia/Aqtau * `Asia/Aqtobe` - Asia/Aqtobe * `Asia/Ashgabat` - Asia/Ashgabat * `Asia/Ashkhabad` - Asia/Ashkhabad * `Asia/Atyrau` - Asia/Atyrau * `Asia/Baghdad` - Asia/Baghdad * `Asia/Bahrain` - Asia/Bahrain * `Asia/Baku` - Asia/Baku * `Asia/Bangkok` - Asia/Bangkok * `Asia/Barnaul` - Asia/Barnaul * `Asia/Beirut` - Asia/Beirut * `Asia/Bishkek` - Asia/Bishkek * `Asia/Brunei` - Asia/Brunei * `Asia/Calcutta` - Asia/Calcutta * `Asia/Chita` - Asia/Chita * `Asia/Choibalsan` - Asia/Choibalsan * `Asia/Chongqing` - Asia/Chongqing * `Asia/Chungking` - Asia/Chungking * `Asia/Colombo` - Asia/Colombo * `Asia/Dacca` - Asia/Dacca * `Asia/Damascus` - Asia/Damascus * `Asia/Dhaka` - Asia/Dhaka * `Asia/Dili` - Asia/Dili * `Asia/Dubai` - Asia/Dubai * `Asia/Dushanbe` - Asia/Dushanbe * `Asia/Famagusta` - Asia/Famagusta * `Asia/Gaza` - Asia/Gaza * `Asia/Harbin` - Asia/Harbin * `Asia/Hebron` - Asia/Hebron * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh * `Asia/Hong_Kong` - Asia/Hong_Kong * `Asia/Hovd` - Asia/Hovd * `Asia/Irkutsk` - Asia/Irkutsk * `Asia/Istanbul` - Asia/Istanbul * `Asia/Jakarta` - Asia/Jakarta * `Asia/Jayapura` - Asia/Jayapura * `Asia/Jerusalem` - Asia/Jerusalem * `Asia/Kabul` - Asia/Kabul * `Asia/Kamchatka` - Asia/Kamchatka * `Asia/Karachi` - Asia/Karachi * `Asia/Kashgar` - Asia/Kashgar * `Asia/Kathmandu` - Asia/Kathmandu * `Asia/Katmandu` - Asia/Katmandu * `Asia/Khandyga` - Asia/Khandyga * `Asia/Kolkata` - Asia/Kolkata * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur * `Asia/Kuching` - Asia/Kuching * `Asia/Kuwait` - Asia/Kuwait * `Asia/Macao` - Asia/Macao * `Asia/Macau` - Asia/Macau * `Asia/Magadan` - Asia/Magadan * `Asia/Makassar` - Asia/Makassar * `Asia/Manila` - Asia/Manila * `Asia/Muscat` - Asia/Muscat * `Asia/Nicosia` - Asia/Nicosia * `Asia/Novokuznetsk` - Asia/Novokuznetsk * `Asia/Novosibirsk` - Asia/Novosibirsk * `Asia/Omsk` - Asia/Omsk * `Asia/Oral` - Asia/Oral * `Asia/Phnom_Penh` - Asia/Phnom_Penh * `Asia/Pontianak` - Asia/Pontianak * `Asia/Pyongyang` - Asia/Pyongyang * `Asia/Qatar` - Asia/Qatar * `Asia/Qostanay` - Asia/Qostanay * `Asia/Qyzylorda` - Asia/Qyzylorda * `Asia/Rangoon` - Asia/Rangoon * `Asia/Riyadh` - Asia/Riyadh * `Asia/Saigon` - Asia/Saigon * `Asia/Sakhalin` - Asia/Sakhalin * `Asia/Samarkand` - Asia/Samarkand * `Asia/Seoul` - Asia/Seoul * `Asia/Shanghai` - Asia/Shanghai * `Asia/Singapore` - Asia/Singapore * `Asia/Srednekolymsk` - Asia/Srednekolymsk * `Asia/Taipei` - Asia/Taipei * `Asia/Tashkent` - Asia/Tashkent * `Asia/Tbilisi` - Asia/Tbilisi * `Asia/Tehran` - Asia/Tehran * `Asia/Tel_Aviv` - Asia/Tel_Aviv * `Asia/Thimbu` - Asia/Thimbu * `Asia/Thimphu` - Asia/Thimphu * `Asia/Tokyo` - Asia/Tokyo * `Asia/Tomsk` - Asia/Tomsk * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar * `Asia/Ulan_Bator` - Asia/Ulan_Bator * `Asia/Urumqi` - Asia/Urumqi * `Asia/Ust-Nera` - Asia/Ust-Nera * `Asia/Vientiane` - Asia/Vientiane * `Asia/Vladivostok` - Asia/Vladivostok * `Asia/Yakutsk` - Asia/Yakutsk * `Asia/Yangon` - Asia/Yangon * `Asia/Yekaterinburg` - Asia/Yekaterinburg * `Asia/Yerevan` - Asia/Yerevan * `Atlantic/Azores` - Atlantic/Azores * `Atlantic/Bermuda` - Atlantic/Bermuda * `Atlantic/Canary` - Atlantic/Canary * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde * `Atlantic/Faeroe` - Atlantic/Faeroe * `Atlantic/Faroe` - Atlantic/Faroe * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen * `Atlantic/Madeira` - Atlantic/Madeira * `Atlantic/Reykjavik` - Atlantic/Reykjavik * `Atlantic/South_Georgia` - Atlantic/South_Georgia * `Atlantic/St_Helena` - Atlantic/St_Helena * `Atlantic/Stanley` - Atlantic/Stanley * `Australia/ACT` - Australia/ACT * `Australia/Adelaide` - Australia/Adelaide * `Australia/Brisbane` - Australia/Brisbane * `Australia/Broken_Hill` - Australia/Broken_Hill * `Australia/Canberra` - Australia/Canberra * `Australia/Currie` - Australia/Currie * `Australia/Darwin` - Australia/Darwin * `Australia/Eucla` - Australia/Eucla * `Australia/Hobart` - Australia/Hobart * `Australia/LHI` - Australia/LHI * `Australia/Lindeman` - Australia/Lindeman * `Australia/Lord_Howe` - Australia/Lord_Howe * `Australia/Melbourne` - Australia/Melbourne * `Australia/NSW` - Australia/NSW * `Australia/North` - Australia/North * `Australia/Perth` - Australia/Perth * `Australia/Queensland` - Australia/Queensland * `Australia/South` - Australia/South * `Australia/Sydney` - Australia/Sydney * `Australia/Tasmania` - Australia/Tasmania * `Australia/Victoria` - Australia/Victoria * `Australia/West` - Australia/West * `Australia/Yancowinna` - Australia/Yancowinna * `Brazil/Acre` - Brazil/Acre * `Brazil/DeNoronha` - Brazil/DeNoronha * `Brazil/East` - Brazil/East * `Brazil/West` - Brazil/West * `CET` - CET * `CST6CDT` - CST6CDT * `Canada/Atlantic` - Canada/Atlantic * `Canada/Central` - Canada/Central * `Canada/Eastern` - Canada/Eastern * `Canada/Mountain` - Canada/Mountain * `Canada/Newfoundland` - Canada/Newfoundland * `Canada/Pacific` - Canada/Pacific * `Canada/Saskatchewan` - Canada/Saskatchewan * `Canada/Yukon` - Canada/Yukon * `Chile/Continental` - Chile/Continental * `Chile/EasterIsland` - Chile/EasterIsland * `Cuba` - Cuba * `EET` - EET * `EST` - EST * `EST5EDT` - EST5EDT * `Egypt` - Egypt * `Eire` - Eire * `Etc/GMT` - Etc/GMT * `Etc/GMT+0` - Etc/GMT+0 * `Etc/GMT+1` - Etc/GMT+1 * `Etc/GMT+10` - Etc/GMT+10 * `Etc/GMT+11` - Etc/GMT+11 * `Etc/GMT+12` - Etc/GMT+12 * `Etc/GMT+2` - Etc/GMT+2 * `Etc/GMT+3` - Etc/GMT+3 * `Etc/GMT+4` - Etc/GMT+4 * `Etc/GMT+5` - Etc/GMT+5 * `Etc/GMT+6` - Etc/GMT+6 * `Etc/GMT+7` - Etc/GMT+7 * `Etc/GMT+8` - Etc/GMT+8 * `Etc/GMT+9` - Etc/GMT+9 * `Etc/GMT-0` - Etc/GMT-0 * `Etc/GMT-1` - Etc/GMT-1 * `Etc/GMT-10` - Etc/GMT-10 * `Etc/GMT-11` - Etc/GMT-11 * `Etc/GMT-12` - Etc/GMT-12 * `Etc/GMT-13` - Etc/GMT-13 * `Etc/GMT-14` - Etc/GMT-14 * `Etc/GMT-2` - Etc/GMT-2 * `Etc/GMT-3` - Etc/GMT-3 * `Etc/GMT-4` - Etc/GMT-4 * `Etc/GMT-5` - Etc/GMT-5 * `Etc/GMT-6` - Etc/GMT-6 * `Etc/GMT-7` - Etc/GMT-7 * `Etc/GMT-8` - Etc/GMT-8 * `Etc/GMT-9` - Etc/GMT-9 * `Etc/GMT0` - Etc/GMT0 * `Etc/Greenwich` - Etc/Greenwich * `Etc/UCT` - Etc/UCT * `Etc/UTC` - Etc/UTC * `Etc/Universal` - Etc/Universal * `Etc/Zulu` - Etc/Zulu * `Europe/Amsterdam` - Europe/Amsterdam * `Europe/Andorra` - Europe/Andorra * `Europe/Astrakhan` - Europe/Astrakhan * `Europe/Athens` - Europe/Athens * `Europe/Belfast` - Europe/Belfast * `Europe/Belgrade` - Europe/Belgrade * `Europe/Berlin` - Europe/Berlin * `Europe/Bratislava` - Europe/Bratislava * `Europe/Brussels` - Europe/Brussels * `Europe/Bucharest` - Europe/Bucharest * `Europe/Budapest` - Europe/Budapest * `Europe/Busingen` - Europe/Busingen * `Europe/Chisinau` - Europe/Chisinau * `Europe/Copenhagen` - Europe/Copenhagen * `Europe/Dublin` - Europe/Dublin * `Europe/Gibraltar` - Europe/Gibraltar * `Europe/Guernsey` - Europe/Guernsey * `Europe/Helsinki` - Europe/Helsinki * `Europe/Isle_of_Man` - Europe/Isle_of_Man * `Europe/Istanbul` - Europe/Istanbul * `Europe/Jersey` - Europe/Jersey * `Europe/Kaliningrad` - Europe/Kaliningrad * `Europe/Kiev` - Europe/Kiev * `Europe/Kirov` - Europe/Kirov * `Europe/Kyiv` - Europe/Kyiv * `Europe/Lisbon` - Europe/Lisbon * `Europe/Ljubljana` - Europe/Ljubljana * `Europe/London` - Europe/London * `Europe/Luxembourg` - Europe/Luxembourg * `Europe/Madrid` - Europe/Madrid * `Europe/Malta` - Europe/Malta * `Europe/Mariehamn` - Europe/Mariehamn * `Europe/Minsk` - Europe/Minsk * `Europe/Monaco` - Europe/Monaco * `Europe/Moscow` - Europe/Moscow * `Europe/Nicosia` - Europe/Nicosia * `Europe/Oslo` - Europe/Oslo * `Europe/Paris` - Europe/Paris * `Europe/Podgorica` - Europe/Podgorica * `Europe/Prague` - Europe/Prague * `Europe/Riga` - Europe/Riga * `Europe/Rome` - Europe/Rome * `Europe/Samara` - Europe/Samara * `Europe/San_Marino` - Europe/San_Marino * `Europe/Sarajevo` - Europe/Sarajevo * `Europe/Saratov` - Europe/Saratov * `Europe/Simferopol` - Europe/Simferopol * `Europe/Skopje` - Europe/Skopje * `Europe/Sofia` - Europe/Sofia * `Europe/Stockholm` - Europe/Stockholm * `Europe/Tallinn` - Europe/Tallinn * `Europe/Tirane` - Europe/Tirane * `Europe/Tiraspol` - Europe/Tiraspol * `Europe/Ulyanovsk` - Europe/Ulyanovsk * `Europe/Uzhgorod` - Europe/Uzhgorod * `Europe/Vaduz` - Europe/Vaduz * `Europe/Vatican` - Europe/Vatican * `Europe/Vienna` - Europe/Vienna * `Europe/Vilnius` - Europe/Vilnius * `Europe/Volgograd` - Europe/Volgograd * `Europe/Warsaw` - Europe/Warsaw * `Europe/Zagreb` - Europe/Zagreb * `Europe/Zaporozhye` - Europe/Zaporozhye * `Europe/Zurich` - Europe/Zurich * `GB` - GB * `GB-Eire` - GB-Eire * `GMT` - GMT * `GMT+0` - GMT+0 * `GMT-0` - GMT-0 * `GMT0` - GMT0 * `Greenwich` - Greenwich * `HST` - HST * `Hongkong` - Hongkong * `Iceland` - Iceland * `Indian/Antananarivo` - Indian/Antananarivo * `Indian/Chagos` - Indian/Chagos * `Indian/Christmas` - Indian/Christmas * `Indian/Cocos` - Indian/Cocos * `Indian/Comoro` - Indian/Comoro * `Indian/Kerguelen` - Indian/Kerguelen * `Indian/Mahe` - Indian/Mahe * `Indian/Maldives` - Indian/Maldives * `Indian/Mauritius` - Indian/Mauritius * `Indian/Mayotte` - Indian/Mayotte * `Indian/Reunion` - Indian/Reunion * `Iran` - Iran * `Israel` - Israel * `Jamaica` - Jamaica * `Japan` - Japan * `Kwajalein` - Kwajalein * `Libya` - Libya * `MET` - MET * `MST` - MST * `MST7MDT` - MST7MDT * `Mexico/BajaNorte` - Mexico/BajaNorte * `Mexico/BajaSur` - Mexico/BajaSur * `Mexico/General` - Mexico/General * `NZ` - NZ * `NZ-CHAT` - NZ-CHAT * `Navajo` - Navajo * `PRC` - PRC * `PST8PDT` - PST8PDT * `Pacific/Apia` - Pacific/Apia * `Pacific/Auckland` - Pacific/Auckland * `Pacific/Bougainville` - Pacific/Bougainville * `Pacific/Chatham` - Pacific/Chatham * `Pacific/Chuuk` - Pacific/Chuuk * `Pacific/Easter` - Pacific/Easter * `Pacific/Efate` - Pacific/Efate * `Pacific/Enderbury` - Pacific/Enderbury * `Pacific/Fakaofo` - Pacific/Fakaofo * `Pacific/Fiji` - Pacific/Fiji * `Pacific/Funafuti` - Pacific/Funafuti * `Pacific/Galapagos` - Pacific/Galapagos * `Pacific/Gambier` - Pacific/Gambier * `Pacific/Guadalcanal` - Pacific/Guadalcanal * `Pacific/Guam` - Pacific/Guam * `Pacific/Honolulu` - Pacific/Honolulu * `Pacific/Johnston` - Pacific/Johnston * `Pacific/Kanton` - Pacific/Kanton * `Pacific/Kiritimati` - Pacific/Kiritimati * `Pacific/Kosrae` - Pacific/Kosrae * `Pacific/Kwajalein` - Pacific/Kwajalein * `Pacific/Majuro` - Pacific/Majuro * `Pacific/Marquesas` - Pacific/Marquesas * `Pacific/Midway` - Pacific/Midway * `Pacific/Nauru` - Pacific/Nauru * `Pacific/Niue` - Pacific/Niue * `Pacific/Norfolk` - Pacific/Norfolk * `Pacific/Noumea` - Pacific/Noumea * `Pacific/Pago_Pago` - Pacific/Pago_Pago * `Pacific/Palau` - Pacific/Palau * `Pacific/Pitcairn` - Pacific/Pitcairn * `Pacific/Pohnpei` - Pacific/Pohnpei * `Pacific/Ponape` - Pacific/Ponape * `Pacific/Port_Moresby` - Pacific/Port_Moresby * `Pacific/Rarotonga` - Pacific/Rarotonga * `Pacific/Saipan` - Pacific/Saipan * `Pacific/Samoa` - Pacific/Samoa * `Pacific/Tahiti` - Pacific/Tahiti * `Pacific/Tarawa` - Pacific/Tarawa * `Pacific/Tongatapu` - Pacific/Tongatapu * `Pacific/Truk` - Pacific/Truk * `Pacific/Wake` - Pacific/Wake * `Pacific/Wallis` - Pacific/Wallis * `Pacific/Yap` - Pacific/Yap * `Poland` - Poland * `Portugal` - Portugal * `ROC` - ROC * `ROK` - ROK * `Singapore` - Singapore * `Turkey` - Turkey * `UCT` - UCT * `US/Alaska` - US/Alaska * `US/Aleutian` - US/Aleutian * `US/Arizona` - US/Arizona * `US/Central` - US/Central * `US/East-Indiana` - US/East-Indiana * `US/Eastern` - US/Eastern * `US/Hawaii` - US/Hawaii * `US/Indiana-Starke` - US/Indiana-Starke * `US/Michigan` - US/Michigan * `US/Mountain` - US/Mountain * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC * `Universal` - Universal * `W-SU` - W-SU * `WET` - WET * `Zulu` - Zulu") + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + workspace: StrictStr = Field(...) + default_assignee: Optional[StrictStr] = None + project_lead: Optional[StrictStr] = None + cover_image_asset: Optional[StrictStr] = None + estimate: Optional[StrictStr] = None + default_state: Optional[StrictStr] = None + __properties = ["id", "total_members", "total_cycles", "total_modules", "is_member", "sort_order", "member_role", "is_deployed", "cover_image_url", "created_at", "updated_at", "deleted_at", "name", "description", "description_text", "description_html", "network", "identifier", "emoji", "icon_prop", "module_view", "cycle_view", "issue_views_view", "page_view", "intake_view", "is_time_tracking_enabled", "is_issue_type_enabled", "guest_view_all_features", "cover_image", "archive_in", "close_in", "logo_props", "archived_at", "timezone", "created_by", "updated_by", "workspace", "default_assignee", "project_lead", "cover_image_asset", "estimate", "default_state"] + + @validator('network') + def network_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in (0, 2,): + raise ValueError("must be one of enum values (0, 2)") + return value + + @validator('timezone') + def timezone_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu',): + raise ValueError("must be one of enum values ('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Project: + """Create an instance of Project from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "total_members", + "total_cycles", + "total_modules", + "is_member", + "sort_order", + "member_role", + "is_deployed", + "cover_image_url", + "created_at", + "updated_at", + "deleted_at", + "emoji", + "created_by", + "updated_by", + "workspace", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if description_text (nullable) is None + # and __fields_set__ contains the field + if self.description_text is None and "description_text" in self.__fields_set__: + _dict['description_text'] = None + + # set to None if description_html (nullable) is None + # and __fields_set__ contains the field + if self.description_html is None and "description_html" in self.__fields_set__: + _dict['description_html'] = None + + # set to None if emoji (nullable) is None + # and __fields_set__ contains the field + if self.emoji is None and "emoji" in self.__fields_set__: + _dict['emoji'] = None + + # set to None if icon_prop (nullable) is None + # and __fields_set__ contains the field + if self.icon_prop is None and "icon_prop" in self.__fields_set__: + _dict['icon_prop'] = None + + # set to None if cover_image (nullable) is None + # and __fields_set__ contains the field + if self.cover_image is None and "cover_image" in self.__fields_set__: + _dict['cover_image'] = None + + # set to None if logo_props (nullable) is None + # and __fields_set__ contains the field + if self.logo_props is None and "logo_props" in self.__fields_set__: + _dict['logo_props'] = None + + # set to None if archived_at (nullable) is None + # and __fields_set__ contains the field + if self.archived_at is None and "archived_at" in self.__fields_set__: + _dict['archived_at'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + # set to None if default_assignee (nullable) is None + # and __fields_set__ contains the field + if self.default_assignee is None and "default_assignee" in self.__fields_set__: + _dict['default_assignee'] = None + + # set to None if project_lead (nullable) is None + # and __fields_set__ contains the field + if self.project_lead is None and "project_lead" in self.__fields_set__: + _dict['project_lead'] = None + + # set to None if cover_image_asset (nullable) is None + # and __fields_set__ contains the field + if self.cover_image_asset is None and "cover_image_asset" in self.__fields_set__: + _dict['cover_image_asset'] = None + + # set to None if estimate (nullable) is None + # and __fields_set__ contains the field + if self.estimate is None and "estimate" in self.__fields_set__: + _dict['estimate'] = None + + # set to None if default_state (nullable) is None + # and __fields_set__ contains the field + if self.default_state is None and "default_state" in self.__fields_set__: + _dict['default_state'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Project: + """Create an instance of Project from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Project.parse_obj(obj) + + _obj = Project.parse_obj({ + "id": obj.get("id"), + "total_members": obj.get("total_members"), + "total_cycles": obj.get("total_cycles"), + "total_modules": obj.get("total_modules"), + "is_member": obj.get("is_member"), + "sort_order": obj.get("sort_order"), + "member_role": obj.get("member_role"), + "is_deployed": obj.get("is_deployed"), + "cover_image_url": obj.get("cover_image_url"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "description_text": obj.get("description_text"), + "description_html": obj.get("description_html"), + "network": obj.get("network"), + "identifier": obj.get("identifier"), + "emoji": obj.get("emoji"), + "icon_prop": obj.get("icon_prop"), + "module_view": obj.get("module_view"), + "cycle_view": obj.get("cycle_view"), + "issue_views_view": obj.get("issue_views_view"), + "page_view": obj.get("page_view"), + "intake_view": obj.get("intake_view"), + "is_time_tracking_enabled": obj.get("is_time_tracking_enabled"), + "is_issue_type_enabled": obj.get("is_issue_type_enabled"), + "guest_view_all_features": obj.get("guest_view_all_features"), + "cover_image": obj.get("cover_image"), + "archive_in": obj.get("archive_in"), + "close_in": obj.get("close_in"), + "logo_props": obj.get("logo_props"), + "archived_at": obj.get("archived_at"), + "timezone": obj.get("timezone"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "workspace": obj.get("workspace"), + "default_assignee": obj.get("default_assignee"), + "project_lead": obj.get("project_lead"), + "cover_image_asset": obj.get("cover_image_asset"), + "estimate": obj.get("estimate"), + "default_state": obj.get("default_state") + }) + return _obj + + diff --git a/plane/models/search_issues200_response.py b/plane/models/search_issues200_response.py new file mode 100644 index 0000000..28a52cf --- /dev/null +++ b/plane/models/search_issues200_response.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List, Optional +from pydantic import BaseModel, conlist +from plane.models.search_issues200_response_issues_inner import SearchIssues200ResponseIssuesInner + +class SearchIssues200Response(BaseModel): + """ + SearchIssues200Response + """ + issues: Optional[conlist(SearchIssues200ResponseIssuesInner)] = None + __properties = ["issues"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> SearchIssues200Response: + """Create an instance of SearchIssues200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in issues (list) + _items = [] + if self.issues: + for _item in self.issues: + if _item: + _items.append(_item.to_dict()) + _dict['issues'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> SearchIssues200Response: + """Create an instance of SearchIssues200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return SearchIssues200Response.parse_obj(obj) + + _obj = SearchIssues200Response.parse_obj({ + "issues": [SearchIssues200ResponseIssuesInner.from_dict(_item) for _item in obj.get("issues")] if obj.get("issues") is not None else None + }) + return _obj + + diff --git a/plane/models/search_issues200_response_issues_inner.py b/plane/models/search_issues200_response_issues_inner.py new file mode 100644 index 0000000..8fa1d60 --- /dev/null +++ b/plane/models/search_issues200_response_issues_inner.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + +class SearchIssues200ResponseIssuesInner(BaseModel): + """ + SearchIssues200ResponseIssuesInner + """ + name: Optional[StrictStr] = Field(default=None, description="Issue name") + id: Optional[StrictStr] = Field(default=None, description="Issue ID") + sequence_id: Optional[StrictStr] = Field(default=None, description="Issue sequence ID") + project__identifier: Optional[StrictStr] = Field(default=None, description="Project identifier") + project_id: Optional[StrictStr] = Field(default=None, description="Project ID") + workspace__slug: Optional[StrictStr] = Field(default=None, description="Workspace slug") + __properties = ["name", "id", "sequence_id", "project__identifier", "project_id", "workspace__slug"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> SearchIssues200ResponseIssuesInner: + """Create an instance of SearchIssues200ResponseIssuesInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> SearchIssues200ResponseIssuesInner: + """Create an instance of SearchIssues200ResponseIssuesInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return SearchIssues200ResponseIssuesInner.parse_obj(obj) + + _obj = SearchIssues200ResponseIssuesInner.parse_obj({ + "name": obj.get("name"), + "id": obj.get("id"), + "sequence_id": obj.get("sequence_id"), + "project__identifier": obj.get("project__identifier"), + "project_id": obj.get("project_id"), + "workspace__slug": obj.get("workspace__slug") + }) + return _obj + + diff --git a/plane/models/state.py b/plane/models/state.py new file mode 100644 index 0000000..b1f88c4 --- /dev/null +++ b/plane/models/state.py @@ -0,0 +1,158 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, constr, validator + +class State(BaseModel): + """ + State + """ + id: StrictStr = Field(...) + created_at: datetime = Field(...) + updated_at: datetime = Field(...) + deleted_at: Optional[datetime] = Field(...) + name: constr(strict=True, max_length=255) = Field(...) + description: Optional[StrictStr] = None + color: constr(strict=True, max_length=255) = Field(...) + slug: Optional[constr(strict=True, max_length=100)] = None + sequence: Optional[Union[StrictFloat, StrictInt]] = None + group: Optional[StrictStr] = Field(default=None, description="* `backlog` - Backlog * `unstarted` - Unstarted * `started` - Started * `completed` - Completed * `cancelled` - Cancelled * `triage` - Triage") + is_triage: Optional[StrictBool] = None + default: Optional[StrictBool] = None + external_source: Optional[constr(strict=True, max_length=255)] = None + external_id: Optional[constr(strict=True, max_length=255)] = None + created_by: Optional[StrictStr] = Field(...) + updated_by: Optional[StrictStr] = Field(...) + project: StrictStr = Field(...) + workspace: StrictStr = Field(...) + __properties = ["id", "created_at", "updated_at", "deleted_at", "name", "description", "color", "slug", "sequence", "group", "is_triage", "default", "external_source", "external_id", "created_by", "updated_by", "project", "workspace"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^[-a-zA-Z0-9_]+$", value): + raise ValueError(r"must validate the regular expression /^[-a-zA-Z0-9_]+$/") + return value + + @validator('group') + def group_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage',): + raise ValueError("must be one of enum values ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> State: + """Create an instance of State from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "created_at", + "updated_at", + "deleted_at", + "created_by", + "updated_by", + "project", + "workspace", + }, + exclude_none=True) + # set to None if deleted_at (nullable) is None + # and __fields_set__ contains the field + if self.deleted_at is None and "deleted_at" in self.__fields_set__: + _dict['deleted_at'] = None + + # set to None if external_source (nullable) is None + # and __fields_set__ contains the field + if self.external_source is None and "external_source" in self.__fields_set__: + _dict['external_source'] = None + + # set to None if external_id (nullable) is None + # and __fields_set__ contains the field + if self.external_id is None and "external_id" in self.__fields_set__: + _dict['external_id'] = None + + # set to None if created_by (nullable) is None + # and __fields_set__ contains the field + if self.created_by is None and "created_by" in self.__fields_set__: + _dict['created_by'] = None + + # set to None if updated_by (nullable) is None + # and __fields_set__ contains the field + if self.updated_by is None and "updated_by" in self.__fields_set__: + _dict['updated_by'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> State: + """Create an instance of State from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return State.parse_obj(obj) + + _obj = State.parse_obj({ + "id": obj.get("id"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "deleted_at": obj.get("deleted_at"), + "name": obj.get("name"), + "description": obj.get("description"), + "color": obj.get("color"), + "slug": obj.get("slug"), + "sequence": obj.get("sequence"), + "group": obj.get("group"), + "is_triage": obj.get("is_triage"), + "default": obj.get("default"), + "external_source": obj.get("external_source"), + "external_id": obj.get("external_id"), + "created_by": obj.get("created_by"), + "updated_by": obj.get("updated_by"), + "project": obj.get("project"), + "workspace": obj.get("workspace") + }) + return _obj + + diff --git a/plane/models/state_lite.py b/plane/models/state_lite.py new file mode 100644 index 0000000..670afb6 --- /dev/null +++ b/plane/models/state_lite.py @@ -0,0 +1,88 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictStr, validator + +class StateLite(BaseModel): + """ + StateLite + """ + id: StrictStr = Field(...) + name: StrictStr = Field(...) + color: StrictStr = Field(...) + group: StrictStr = Field(default=..., description="* `backlog` - Backlog * `unstarted` - Unstarted * `started` - Started * `completed` - Completed * `cancelled` - Cancelled * `triage` - Triage") + __properties = ["id", "name", "color", "group"] + + @validator('group') + def group_validate_enum(cls, value): + """Validates the enum""" + if value not in ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage',): + raise ValueError("must be one of enum values ('backlog', 'unstarted', 'started', 'completed', 'cancelled', 'triage')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> StateLite: + """Create an instance of StateLite from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "name", + "color", + "group", + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> StateLite: + """Create an instance of StateLite from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return StateLite.parse_obj(obj) + + _obj = StateLite.parse_obj({ + "id": obj.get("id"), + "name": obj.get("name"), + "color": obj.get("color"), + "group": obj.get("group") + }) + return _obj + + diff --git a/plane/models/transfer_cycle_issues200_response.py b/plane/models/transfer_cycle_issues200_response.py new file mode 100644 index 0000000..15906b3 --- /dev/null +++ b/plane/models/transfer_cycle_issues200_response.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + +class TransferCycleIssues200Response(BaseModel): + """ + TransferCycleIssues200Response + """ + message: Optional[StrictStr] = Field(default=None, description="Success message") + __properties = ["message"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> TransferCycleIssues200Response: + """Create an instance of TransferCycleIssues200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> TransferCycleIssues200Response: + """Create an instance of TransferCycleIssues200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return TransferCycleIssues200Response.parse_obj(obj) + + _obj = TransferCycleIssues200Response.parse_obj({ + "message": obj.get("message") + }) + return _obj + + diff --git a/plane/models/transfer_cycle_issues400_response.py b/plane/models/transfer_cycle_issues400_response.py new file mode 100644 index 0000000..a74c4b8 --- /dev/null +++ b/plane/models/transfer_cycle_issues400_response.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + +class TransferCycleIssues400Response(BaseModel): + """ + TransferCycleIssues400Response + """ + error: Optional[StrictStr] = Field(default=None, description="Error message") + __properties = ["error"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> TransferCycleIssues400Response: + """Create an instance of TransferCycleIssues400Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> TransferCycleIssues400Response: + """Create an instance of TransferCycleIssues400Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return TransferCycleIssues400Response.parse_obj(obj) + + _obj = TransferCycleIssues400Response.parse_obj({ + "error": obj.get("error") + }) + return _obj + + diff --git a/plane/models/update_cycle_request.py b/plane/models/update_cycle_request.py new file mode 100644 index 0000000..25fe4f5 --- /dev/null +++ b/plane/models/update_cycle_request.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, constr + +class UpdateCycleRequest(BaseModel): + """ + UpdateCycleRequest + """ + name: Optional[constr(strict=True, max_length=255)] = Field(default=None, description="Cycle Name") + description: Optional[StrictStr] = Field(default=None, description="Cycle Description") + start_date: Optional[datetime] = Field(default=None, description="Start Date") + end_date: Optional[datetime] = Field(default=None, description="End Date") + __properties = ["name", "description", "start_date", "end_date"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UpdateCycleRequest: + """Create an instance of UpdateCycleRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if description (nullable) is None + # and __fields_set__ contains the field + if self.description is None and "description" in self.__fields_set__: + _dict['description'] = None + + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['start_date'] = None + + # set to None if end_date (nullable) is None + # and __fields_set__ contains the field + if self.end_date is None and "end_date" in self.__fields_set__: + _dict['end_date'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UpdateCycleRequest: + """Create an instance of UpdateCycleRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UpdateCycleRequest.parse_obj(obj) + + _obj = UpdateCycleRequest.parse_obj({ + "name": obj.get("name"), + "description": obj.get("description"), + "start_date": obj.get("start_date"), + "end_date": obj.get("end_date") + }) + return _obj + + diff --git a/plane/models/update_label_request.py b/plane/models/update_label_request.py new file mode 100644 index 0000000..d6c80fa --- /dev/null +++ b/plane/models/update_label_request.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, StrictStr + +class UpdateLabelRequest(BaseModel): + """ + UpdateLabelRequest + """ + name: Optional[StrictStr] = None + color: Optional[StrictStr] = None + description: Optional[StrictStr] = None + __properties = ["name", "color", "description"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UpdateLabelRequest: + """Create an instance of UpdateLabelRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UpdateLabelRequest: + """Create an instance of UpdateLabelRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UpdateLabelRequest.parse_obj(obj) + + _obj = UpdateLabelRequest.parse_obj({ + "name": obj.get("name"), + "color": obj.get("color"), + "description": obj.get("description") + }) + return _obj + + diff --git a/plane/models/user_asset_upload.py b/plane/models/user_asset_upload.py new file mode 100644 index 0000000..1033ea9 --- /dev/null +++ b/plane/models/user_asset_upload.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr, validator + +class UserAssetUpload(BaseModel): + """ + Serializer for user asset upload requests # noqa: E501 + """ + name: StrictStr = Field(default=..., description="Original filename of the asset") + type: Optional[StrictStr] = Field(default='image/jpeg', description="MIME type of the file * `image/jpeg` - JPEG * `image/png` - PNG * `image/webp` - WebP * `image/jpg` - JPG * `image/gif` - GIF") + size: StrictInt = Field(default=..., description="File size in bytes") + entity_type: StrictStr = Field(default=..., description="Type of user asset * `USER_AVATAR` - User Avatar * `USER_COVER` - User Cover") + __properties = ["name", "type", "size", "entity_type"] + + @validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('image/jpeg', 'image/png', 'image/webp', 'image/jpg', 'image/gif',): + raise ValueError("must be one of enum values ('image/jpeg', 'image/png', 'image/webp', 'image/jpg', 'image/gif')") + return value + + @validator('entity_type') + def entity_type_validate_enum(cls, value): + """Validates the enum""" + if value not in ('USER_AVATAR', 'USER_COVER',): + raise ValueError("must be one of enum values ('USER_AVATAR', 'USER_COVER')") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UserAssetUpload: + """Create an instance of UserAssetUpload from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UserAssetUpload: + """Create an instance of UserAssetUpload from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UserAssetUpload.parse_obj(obj) + + _obj = UserAssetUpload.parse_obj({ + "name": obj.get("name"), + "type": obj.get("type") if obj.get("type") is not None else 'image/jpeg', + "size": obj.get("size"), + "entity_type": obj.get("entity_type") + }) + return _obj + + diff --git a/plane/models/user_lite.py b/plane/models/user_lite.py new file mode 100644 index 0000000..cbf4490 --- /dev/null +++ b/plane/models/user_lite.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + +class UserLite(BaseModel): + """ + UserLite + """ + id: StrictStr = Field(...) + first_name: StrictStr = Field(...) + last_name: StrictStr = Field(...) + email: Optional[StrictStr] = Field(...) + avatar: Optional[StrictStr] = None + avatar_url: Optional[StrictStr] = Field(default=None, description="Avatar URL") + display_name: StrictStr = Field(...) + __properties = ["id", "first_name", "last_name", "email", "avatar", "avatar_url", "display_name"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UserLite: + """Create an instance of UserLite from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + "id", + "first_name", + "last_name", + "email", + "avatar", + "avatar_url", + "display_name", + }, + exclude_none=True) + # set to None if email (nullable) is None + # and __fields_set__ contains the field + if self.email is None and "email" in self.__fields_set__: + _dict['email'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UserLite: + """Create an instance of UserLite from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UserLite.parse_obj(obj) + + _obj = UserLite.parse_obj({ + "id": obj.get("id"), + "first_name": obj.get("first_name"), + "last_name": obj.get("last_name"), + "email": obj.get("email"), + "avatar": obj.get("avatar"), + "avatar_url": obj.get("avatar_url"), + "display_name": obj.get("display_name") + }) + return _obj + + diff --git a/plane/py.typed b/plane/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/plane/rest.py b/plane/rest.py new file mode 100644 index 0000000..87714fb --- /dev/null +++ b/plane/rest.py @@ -0,0 +1,329 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import io +import json +import logging +import re +import ssl + +from urllib.parse import urlencode, quote_plus +import urllib3 + +from plane.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError, BadRequestException + + +logger = logging.getLogger(__name__) + +SUPPORTED_SOCKS_PROXIES = {"socks5", "socks5h", "socks4", "socks4a"} + + +def is_socks_proxy_url(url): + if url is None: + return False + split_section = url.split("://") + if len(split_section) < 2: + return False + else: + return split_section[0].lower() in SUPPORTED_SOCKS_PROXIES + + +class RESTResponse(io.IOBase): + + def __init__(self, resp) -> None: + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.headers + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.headers.get(name, default) + + +class RESTClientObject: + + def __init__(self, configuration, pools_size=4, maxsize=None) -> None: + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.tls_server_name: + addition_pool_args['server_hostname'] = configuration.tls_server_name + + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy: + if is_socks_proxy_url(configuration.proxy): + from urllib3.contrib.socks import SOCKSProxyManager + self.pool_manager = SOCKSProxyManager( + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args + ) + + def request(self, method, url, query_params=None, headers=None, + body=None, post_params=None, _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', + 'PATCH', 'OPTIONS'] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter." + ) + + post_params = post_params or {} + headers = headers or {} + # url already contains the URL query string + # so reset query_params to empty dict + query_params = {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int,float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) and + len(_request_timeout) == 2): + timeout = urllib3.Timeout( + connect=_request_timeout[0], read=_request_timeout[1]) + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + + # no content type provided or payload is json + if not headers.get('Content-Type') or re.search('json', headers['Content-Type'], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + # Ensures that dict objects are serialized + post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a,b) for a, b in post_params] + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, url, + fields={}, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 400: + raise BadRequestException(http_resp=r) + + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def get_request(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("GET", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def head_request(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("HEAD", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def options_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("OPTIONS", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def delete_request(self, url, headers=None, query_params=None, body=None, + _preload_content=True, _request_timeout=None): + return self.request("DELETE", url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def post_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("POST", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def put_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PUT", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def patch_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PATCH", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) diff --git a/pyproject.toml b/pyproject.toml index 127148a..8fab31b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,124 +1,30 @@ -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[project] -name = "plane-sdk" +[tool.poetry] +name = "plane" version = "1.0.0" -description = "Python SDK for Plane APIs" +description = "Plane API" +authors = ["OpenAPI Generator Community "] +license = "NoLicense" readme = "README.md" -license = { file = "LICENSE" } -authors = [{ name = "Plane", email = "support@plane.so" }] -classifiers = [ - "Development Status :: 4 - Beta", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", -] -requires-python = ">=3.8" -dependencies = ["httpx>=0.24.0", "pydantic>=2.0.0", "typing-extensions>=4.0.0"] - -[project.optional-dependencies] -dev = [ - "pytest>=7.0.0", - "pytest-asyncio>=0.21.0", - "pytest-cov>=4.0.0", - "ruff>=0.0.290", - "isort>=5.12.0", - "flake8>=6.0.0", - "mypy>=1.0.0", -] - -[project.urls] -Homepage = "https://github.com/makeplane/sdk-python" -Documentation = "https://github.com/makeplane/sdk-python" -Repository = "https://github.com/makeplane/sdk-python" -Issues = "https://github.com/makeplane/sdk-python/issues" - -[tool.ruff] -line-length = 88 -target-version = "py38" - -[tool.ruff.format] -# Use double quotes for strings. -quote-style = "double" - -# Indent with spaces, rather than tabs. -indent-style = "space" - -# Respect magic trailing commas. -# skip-magic-trailing-comma = true - -# Automatically detect the appropriate line ending. -line-ending = "auto" - -[tool.ruff.lint] -# Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default. -select = ["E", "F"] -ignore = [] +repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID" +keywords = ["OpenAPI", "OpenAPI-Generator", "Plane API"] +include = ["plane/py.typed"] -# Allow autofix for all enabled rules (when `--fix`) is provided. -fixable = ["ALL"] -unfixable = [] +[tool.poetry.dependencies] +python = "^3.8" -# Allow unused variables when underscore-prefixed. -dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" +urllib3 = ">= 1.25.3" +python-dateutil = ">=2.8.2" +pydantic = "^1.10.5, <2" +aenum = ">=3.1.11" -[tool.ruff.lint.pep8-naming] -# Allow lowercase variables like "id" -classmethod-decorators = ["classmethod", "validator", "root_validator"] +[tool.poetry.dev-dependencies] +pytest = ">=7.2.1" +tox = ">=3.9.0" +flake8 = ">=4.0.0" -[tool.ruff.lint.per-file-ignores] -# Ignore specific rules for tests -"tests/*" = ["E402", "F401", "F811"] -# Ignore imported but unused in __init__.py files -"__init__.py" = ["F401"] - -[tool.ruff.lint.mccabe] -# Unlike Flake8, default to a complexity level of 10. -max-complexity = 10 - -[tool.ruff.lint.isort] -combine-as-imports = true -detect-same-package = true -force-wrap-aliases = true -known-first-party = ["plane"] -known-third-party = ["rest_framework"] -relative-imports-order = "closest-to-furthest" - -[tool.ruff.lint.flake8-tidy-imports] -ban-relative-imports = "parents" - -[tool.ruff.lint.pycodestyle] -ignore-overlong-task-comments = true -max-doc-length = 88 - -[tool.ruff.lint.pydocstyle] -convention = "google" - -[tool.ruff.lint.pylint] -max-args = 8 -max-statements = 50 - - -[tool.isort] -profile = "black" -line_length = 88 - -[tool.mypy] -python_version = "3.8" -warn_return_any = true -warn_unused_configs = true -disallow_untyped_defs = true +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" -[tool.pytest.ini_options] -testpaths = ["tests"] -python_files = ["test_*.py"] -python_classes = ["Test*"] -python_functions = ["test_*"] -addopts = "--cov=src/my_api_sdk --cov-report=html --cov-report=term-missing" +[tool.pylint.'MESSAGES CONTROL'] +extension-pkg-whitelist = "pydantic" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0a8bf96 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +python_dateutil >= 2.5.3 +setuptools >= 21.0.0 +urllib3 >= 1.25.3, < 3.0.0 +pydantic >= 1.10.5, < 2 +aenum >= 3.1.11 diff --git a/schema.yml b/schema.yml new file mode 100644 index 0000000..23af3dc --- /dev/null +++ b/schema.yml @@ -0,0 +1,11151 @@ +openapi: 3.0.3 +info: + title: Plane API + version: 1.0.0 + description: Plane External API +paths: + /assets/user-assets/: + post: + operationId: create_user_asset_upload + description: |- + Generate presigned URL for user asset upload. + + Create a presigned URL for uploading user profile assets (avatar or cover image). + This endpoint generates the necessary credentials for direct S3 upload. + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/UserAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error occurred with the provided data. + summary: Create User Assets + patch: + operationId: update_user_asset + description: |- + Update user asset after upload completion. + + Update the asset status and attributes after the file has been uploaded to S3. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: The requested resource was not found. + summary: Update User Assets + delete: + operationId: delete_user_asset + description: |- + Delete user asset. + + Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. + This performs a soft delete by marking the asset as deleted and updating the user's profile. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset deleted successfully + '404': + description: The requested resource was not found. + summary: Delete User Assets + /assets/user-assets/{asset_id}/: + post: + operationId: create_user_asset_upload_2 + description: |- + Generate presigned URL for user asset upload. + + Create a presigned URL for uploading user profile assets (avatar or cover image). + This endpoint generates the necessary credentials for direct S3 upload. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/UserAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error occurred with the provided data. + summary: Create User Assets + patch: + operationId: update_user_asset_2 + description: |- + Update user asset after upload completion. + + Update the asset status and attributes after the file has been uploaded to S3. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: The requested resource was not found. + summary: Update User Assets + delete: + operationId: delete_user_asset_2 + description: |- + Delete user asset. + + Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. + This performs a soft delete by marking the asset as deleted and updating the user's profile. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset deleted successfully + '404': + description: The requested resource was not found. + summary: Delete User Assets + /assets/user-assets/{asset_id}/server/: + post: + operationId: create_user_server_asset_upload_2 + description: |- + Generate presigned URL for user server asset upload. + + Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. + This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/UserAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error occurred with the provided data. + summary: Create Server + patch: + operationId: update_user_server_asset_2 + description: |- + Update user server asset after upload completion. + + Update the asset status and attributes after the file has been uploaded to S3 using server credentials. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: The requested resource was not found. + summary: Update Server + delete: + operationId: delete_user_server_asset_2 + description: |- + Delete user server asset. + + Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. + This performs a soft delete by marking the asset as deleted and updating the user's profile. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset deleted successfully + '404': + description: The requested resource was not found. + summary: Delete Server + /assets/user-assets/server/: + post: + operationId: create_user_server_asset_upload + description: |- + Generate presigned URL for user server asset upload. + + Create a presigned URL for uploading user profile assets (avatar or cover image) using server credentials. + This endpoint generates the necessary credentials for direct S3 upload with server-side authentication. + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/UserAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error occurred with the provided data. + summary: Create Server + patch: + operationId: update_user_server_asset + description: |- + Update user server asset after upload completion. + + Update the asset status and attributes after the file has been uploaded to S3 using server credentials. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: The requested resource was not found. + summary: Update Server + delete: + operationId: delete_user_server_asset + description: |- + Delete user server asset. + + Delete a user profile asset (avatar or cover image) using server credentials and remove its reference from the user profile. + This performs a soft delete by marking the asset as deleted and updating the user's profile. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset deleted successfully + '404': + description: The requested resource was not found. + summary: Delete Server + /users/me/: + get: + operationId: get_current_user + description: Get the current user + summary: Get User + tags: + - Users + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserLite' + description: User retrieved + '401': + description: Authentication credentials were not provided or are invalid. + /workspaces/{slug}/assets/: + get: + operationId: get_generic_asset + description: |- + Get presigned URL for asset download. + + Generate a presigned URL for downloading a generic asset. + The asset must be uploaded and associated with the specified workspace. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned download URL generated successfully + '400': + description: Bad request + '404': + description: Asset not found + summary: Retrieve Assets + post: + operationId: create_generic_asset_upload + description: |- + Generate presigned URL for generic asset upload. + + Create a presigned URL for uploading generic assets that can be bound to entities like issues. + Supports various file types and includes external source tracking for integrations. + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error + '404': + description: The requested resource was not found. + '409': + description: Asset with same external ID already exists + summary: Create Assets + patch: + operationId: update_generic_asset + description: |- + Update generic asset after upload completion. + + Update the asset status after the file has been uploaded to S3. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded + and trigger metadata extraction. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: Asset not found + summary: Update Assets + /workspaces/{slug}/assets/{asset_id}/: + get: + operationId: get_generic_asset_2 + description: |- + Get presigned URL for asset download. + + Generate a presigned URL for downloading a generic asset. + The asset must be uploaded and associated with the specified workspace. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned download URL generated successfully + '400': + description: Bad request + '404': + description: Asset not found + summary: Retrieve Assets + post: + operationId: create_generic_asset_upload_2 + description: |- + Generate presigned URL for generic asset upload. + + Create a presigned URL for uploading generic assets that can be bound to entities like issues. + Supports various file types and includes external source tracking for integrations. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + multipart/form-data: + schema: + $ref: '#/components/schemas/GenericAssetUpload' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned URL generated successfully + '400': + description: Validation error + '404': + description: The requested resource was not found. + '409': + description: Asset with same external ID already exists + summary: Create Assets + patch: + operationId: update_generic_asset_2 + description: |- + Update generic asset after upload completion. + + Update the asset status after the file has been uploaded to S3. + This endpoint should be called after completing the S3 upload to mark the asset as uploaded + and trigger metadata extraction. + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: UUID of the asset + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug identifier + required: true + examples: + ExampleWorkspaceSlug: + value: my-workspace + summary: Example workspace slug + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdate' + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Asset updated successfully + '404': + description: Asset not found + summary: Update Assets + /workspaces/{slug}/issues/{project__identifier}-{issue__identifier}/: + get: + operationId: workspaces_issues___retrieve + description: This viewset provides `retrieveByIssueId` on workspace level + parameters: + - in: path + name: issue__identifier + schema: + type: string + required: true + - in: path + name: project__identifier + schema: + type: string + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - General + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: '' + summary: Retrieve Issues + /workspaces/{slug}/issues/search/: + get: + operationId: search_issues + description: Search issues + summary: Search issues + parameters: + - in: query + name: limit + schema: + type: integer + description: Limit + - in: query + name: project_id + schema: + type: string + format: uuid + description: Project ID + - in: query + name: search + schema: + type: string + description: Search query + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + - in: query + name: workspace_search + schema: + type: string + description: Workspace search + tags: + - General + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + type: object + properties: + issues: + type: array + items: + type: object + properties: + name: + type: string + description: Issue name + id: + type: string + description: Issue ID + sequence_id: + type: string + description: Issue sequence ID + project__identifier: + type: string + description: Project identifier + project_id: + type: string + description: Project ID + workspace__slug: + type: string + description: Workspace slug + description: Issues + /workspaces/{slug}/members/: + get: + operationId: get_workspace_members + description: Get all the users that are present inside the workspace + summary: Get all the users that are present inside the workspace + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + type: array + items: + allOf: + - $ref: '#/components/schemas/UserLite' + - type: object + properties: + role: + type: integer + description: Member role in the workspace + description: List of workspace members with their roles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + /workspaces/{slug}/projects/: + get: + operationId: list_projects + description: List all projects in a workspace + summary: List Projects + parameters: + - in: path + name: slug + schema: + type: string + required: true + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + description: List of projects or project details + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_project + description: Create a new project + summary: Create Project + parameters: + - in: path + name: slug + schema: + type: string + required: true + tags: + - Projects + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Project name + maxLength: 255 + example: Project 1 + identifier: + type: string + description: Project identifier + maxLength: 255 + example: project-1 + description: + type: string + description: Project description + nullable: true + example: This is a project description + project_lead: + type: string + description: Project lead + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + intake_view: + type: boolean + description: Intake view + example: false + module_view: + type: boolean + description: Module view + example: true + cycle_view: + type: boolean + description: Cycle view + example: true + issue_views_view: + type: boolean + description: Issue views view + example: true + page_view: + type: boolean + description: Page view + example: true + network: + type: integer + description: Network + enum: + - 0 + - 2 + example: 2 + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + description: Project created + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + '409': + description: Project name already taken + /workspaces/{slug}/projects/{id}/: + get: + operationId: list_projects_2 + description: List all projects in a workspace + summary: List Projects + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + description: List of projects or project details + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_project + description: Update an existing project + summary: Update Project + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Projects + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedProject' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedProject' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedProject' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + description: Project updated + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '409': + description: Project name already taken + delete: + operationId: delete_project + description: Delete an existing project + summary: Delete Project + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Project deleted + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/archive/: + post: + operationId: archive_project + description: Archive an existing project + summary: Archive Project + parameters: + - in: path + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Project archived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + delete: + operationId: unarchive_project + description: Unarchive an existing project + summary: Unarchive Project + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Project unarchived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/archived-cycles/: + post: + operationId: archive_cycle + description: Archive cycle + summary: Archive cycle + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Cycle archived + '400': + description: Cycle cannot be archived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/archived-cycles/{id}/unarchive/: + delete: + operationId: unarchive_cycle + description: Unarchive cycle + summary: Unarchive cycle + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Cycle unarchived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/archived-modules/: + get: + operationId: get_archived_modules + description: Get archived modules + summary: Get archived modules + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + description: Archived modules + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/archived-modules/{id}/unarchive/: + delete: + operationId: unarchive_module + description: Unarchive module + summary: Unarchive module + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Module unarchived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + /workspaces/{slug}/projects/{project_id}/cycles/: + get: + operationId: get_cycles + description: Get cycles + summary: Get cycles + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + description: Cycles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_cycle + description: Create cycle + summary: Create cycle + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + requestBody: + content: + application/json: + schema: + type: object + required: + - name + properties: + name: + type: string + description: Cycle Name + maxLength: 255 + example: Cycle 1 + description: + type: string + description: Cycle Description + nullable: true + example: This is a cycle description + start_date: + type: string + format: date-time + description: Start Date + nullable: true + example: '2025-01-01T00:00:00Z' + end_date: + type: string + format: date-time + description: End Date + nullable: true + example: '2025-01-01T00:00:00Z' + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + description: Cycle created + /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/: + post: + operationId: archive_cycle_2 + description: Archive cycle + summary: Archive cycle + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Cycle archived + '400': + description: Cycle cannot be archived + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/: + get: + operationId: get_cycle_issues + description: Get cycle issues + summary: Get cycle issues + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssue' + description: '' + post: + operationId: add_cycle_issues + description: Add cycle issues + summary: Add cycle issues + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + requestBody: + content: + application/json: + schema: + type: object + properties: + issues: + type: array + items: + type: string + format: uuid + description: Issue ID + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssue' + description: Cycle issues added + '400': + description: Issues are required + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/: + get: + operationId: get_cycle_issues_2 + description: Get cycle issues + summary: Get cycle issues + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssue' + description: '' + delete: + operationId: delete_cycle_issue + description: Delete cycle issue + summary: Delete cycle issue + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: No response body + /workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/: + post: + operationId: transfer_cycle_issues + description: Transfer issues from the current cycle to a new cycle + summary: Transfer issues to a new cycle + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + description: Cycle ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Cycles + requestBody: + content: + type: + schema: + type: object + additionalProperties: {} + description: Unspecified request body + required: + schema: + type: object + additionalProperties: {} + description: Unspecified request body + properties: + schema: + new_cycle_id: + type: string + format: uuid + description: ID of the target cycle to transfer issues to + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + type: object + properties: + message: + type: string + description: Success message + description: Issues transferred successfully + '400': + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error message + description: Bad request + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/cycles/{id}/: + get: + operationId: get_cycles_2 + description: Get cycles + summary: Get cycles + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + description: Cycles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_cycle + description: Update cycle + summary: Update cycle + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Cycle Name + maxLength: 255 + example: Cycle 1 + description: + type: string + description: Cycle Description + nullable: true + example: This is a cycle description + start_date: + type: string + format: date-time + description: Start Date + nullable: true + example: '2025-01-01T00:00:00Z' + end_date: + type: string + format: date-time + description: End Date + nullable: true + example: '2025-01-01T00:00:00Z' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + description: Cycle updated + delete: + operationId: delete_cycle + description: Delete cycle + summary: Delete cycle + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Cycle deleted + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Cycle not found + /workspaces/{slug}/projects/{project_id}/intake-issues/: + get: + operationId: get_intake_issues + description: Get intake issues + summary: Get intake issues + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + description: Intake issues + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_intake_issue + description: Create intake issue + summary: Create intake issue + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Intake + requestBody: + content: + application/json: + schema: + type: object + properties: + issue: + type: object + properties: + issue: + type: object + properties: + name: + type: string + description: Issue name + maxLength: 255 + example: Issue 1 + description_html: + type: string + description: Issue description HTML + nullable: true + example:

This is an issue description

+ priority: + type: string + description: Issue priority + enum: + - low + - medium + - high + - urgent + - none + example: low + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + description: Intake issue created + '400': + description: Invalid request + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/: + get: + operationId: get_intake_issues_2 + description: Get intake issues + summary: Get intake issues + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + description: Intake issues + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_intake_issue + description: Update intake issue + summary: Update intake issue + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Intake + requestBody: + content: + application/json: + schema: + type: object + properties: + issue: + type: object + properties: + name: + type: string + description: Issue name + maxLength: 255 + example: Issue 1 + description_html: + type: string + description: Issue description HTML + nullable: true + example:

This is an issue description

+ priority: + type: string + description: Issue priority + enum: + - low + - medium + - high + - urgent + - none + example: low + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + description: '' + delete: + operationId: delete_intake_issue + description: Delete intake issue + summary: Delete intake issue + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Intake issue deleted + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Intake issue not found + /workspaces/{slug}/projects/{project_id}/issues/: + get: + operationId: get_work_item + description: "\n List all work items in a project if pk is None, otherwise\ + \ retrieve a specific work item.\n\n When pk is None:\n Returns\ + \ a list of all work items in the project.\n\n When pk is provided:\n\ + \ Returns the details of a specific work item.\n " + summary: Work Item retrieve endpoints + parameters: + - in: path + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: List of issues or issue details + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + post: + operationId: create_work_item + description: Create a new work item in the project. + summary: Create an work item + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Issue' + multipart/form-data: + schema: + $ref: '#/components/schemas/Issue' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: Work Item created successfully + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/: + get: + operationId: get_issue_activities + description: Get issue activities + summary: Get issue activities + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueActivity' + description: Issue activities + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{id}/: + get: + operationId: get_issue_activities_2 + description: Get issue activities + summary: Get issue activities + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueActivity' + description: Issue activities + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/: + get: + operationId: get_issue_comments + description: Get all comments for an issue. + summary: Get issue comments + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + description: Issue comments + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + post: + operationId: create_issue_comment + description: Create a new comment for an issue. + summary: Create an issue comment + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + type: object + properties: + comment_html: + type: string + required: + - comment_html + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + description: Issue comment created successfully + '400': + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{id}/: + get: + operationId: get_issue_comments_2 + description: Get all comments for an issue. + summary: Get issue comments + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + description: Issue comments + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + patch: + operationId: update_issue_comment + description: Update an existing comment for an issue. + summary: Update an issue comment + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: query + name: pk + schema: + type: string + description: Issue comment ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + type: object + properties: + comment_html: + type: string + required: + - comment_html + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + description: Issue comment updated successfully + '400': + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue comment not found + delete: + operationId: delete_issue_comment + description: Delete an existing comment for an issue. + summary: Delete an issue comment + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: query + name: pk + schema: + type: string + description: Issue comment ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Issue comment deleted successfully + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue comment not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/: + get: + operationId: get_issue_attachment + description: Get an issue attachment + summary: Get an issue attachment + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachment' + description: Issue attachment + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue attachment not found + post: + operationId: get_issue_attachment_2 + description: "\n Get an issue attachment.\n " + summary: Get issue attachment + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Issue Attachment ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Original filename of the asset + type: + type: string + description: MIME type of the file + size: + type: integer + description: File size in bytes + external_id: + type: string + description: External identifier for the asset (for integration + tracking) + external_source: + type: string + description: External source system (for integration tracking) + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: Presigned download URL generated successfully + '400': + description: Validation error + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue or Project or Workspace not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{id}/: + get: + operationId: get_issue_attachment_3 + description: Get an issue attachment + summary: Get an issue attachment + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachment' + description: Issue attachment + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue attachment not found + delete: + operationId: delete_issue_attachment + description: Delete an issue attachment + summary: Delete an issue attachment + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Issue Attachment ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Issue attachment deleted successfully + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue attachment not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/: + get: + operationId: get_issue_links + description: Get all issue links in a project. + summary: Get issue links + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + description: Issue links + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + post: + operationId: create_issue_link + description: Create a new issue link in a project. + summary: Create an issue link + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + type: object + properties: + url: + type: string + title: + type: string + metadata: + type: object + required: + - url + - title + - metadata + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + description: Issue link created successfully + '400': + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + /workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{id}/: + get: + operationId: get_issue_links_2 + description: Get all issue links in a project. + summary: Get issue links + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + description: Issue links + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + patch: + operationId: update_issue_link + description: Update an issue link in a project. + summary: Update an issue link + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: query + name: pk + schema: + type: string + description: Issue link ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + type: object + properties: + url: + type: string + title: + type: string + metadata: + type: object + required: + - url + - title + - metadata + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + description: Issue link updated successfully + '400': + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue link not found + delete: + operationId: delete_issue_link + description: Delete an issue link in a project. + summary: Delete an issue link + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: query + name: issue_id + schema: + type: string + description: Issue ID + required: true + - in: query + name: pk + schema: + type: string + description: Issue link ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Issue link deleted successfully + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue link not found + /workspaces/{slug}/projects/{project_id}/issues/{id}/: + get: + operationId: get_work_item_2 + description: "\n List all work items in a project if pk is None, otherwise\ + \ retrieve a specific work item.\n\n When pk is None:\n Returns\ + \ a list of all work items in the project.\n\n When pk is provided:\n\ + \ Returns the details of a specific work item.\n " + summary: Work Item retrieve endpoints + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: List of issues or issue details + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + patch: + operationId: patch_work_item + description: Patch an existing work item in the project. + summary: Patch an work item + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssue' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssue' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssue' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: Work Item patched successfully + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work Item not found + delete: + operationId: delete_work_item + description: Delete an existing work item in the project. + summary: Delete an work item + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Work Item deleted successfully + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work Item not found + /workspaces/{slug}/projects/{project_id}/labels/: + get: + operationId: get_labels + description: Get all labels in the project. + summary: Get labels + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Labels + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_label + description: Create a new label in the project. + summary: Create a label + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Labels + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + color: + type: string + description: + type: string + required: + - name + - color + - description + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Label created successfully + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/labels/{id}/: + get: + operationId: get_labels_2 + description: Get all labels in the project. + summary: Get labels + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Labels + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_label + description: Update a label in the project. + summary: Update a label + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: query + name: pk + schema: + type: string + description: Label ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Labels + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + color: + type: string + description: + type: string + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Label updated successfully + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + description: Invalid request data + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Label not found + delete: + operationId: delete_label + description: Delete a label in the project. + summary: Delete a label + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: query + name: pk + schema: + type: string + description: Label ID + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: query + name: project_id + schema: + type: string + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: query + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Label deleted successfully + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Label not found + /workspaces/{slug}/projects/{project_id}/members/: + get: + operationId: get_project_members + description: Get all the users that are present inside the project + summary: Get all the users that are present inside the project + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserLite' + description: List of project members with their roles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/modules/: + get: + operationId: get_module + description: Get modules + summary: Get module + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + description: Module + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_module + description: Create module + summary: Create module + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Module name + maxLength: 255 + example: Module 1 + description: + type: string + description: Module description + nullable: true + example: This is a module description + start_date: + type: string + format: date-time + description: Start date + nullable: true + example: '2025-01-01T00:00:00Z' + target_date: + type: string + format: date-time + description: Target date + nullable: true + example: '2025-01-01T00:00:00Z' + status: + type: string + description: Module status + enum: + - backlog + - planned + - in-progress + - paused + - completed + - cancelled + example: planned + lead: + type: string + format: uuid + description: Lead user ID + nullable: true + example: 123e4567-e89b-12d3-a456-426614174000 + members: + type: array + items: + type: string + format: uuid + description: Member user ID + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + description: Module created + '400': + description: Invalid request + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/: + get: + operationId: get_module_issues + description: Get module issues + summary: Get module issues + parameters: + - in: path + name: module_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + description: Module issues + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: add_module_issues + description: Add module issues + summary: Add module issues + parameters: + - in: path + name: module_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + requestBody: + content: + application/json: + schema: + type: object + properties: + issues: + type: array + items: + type: string + format: uuid + description: Issue ID + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleIssue' + description: Module issues added + '400': + description: Invalid request + /workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/: + delete: + operationId: delete_module_issue + description: Delete module issue + summary: Delete module issue + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: module_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Module issue deleted + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module issue not found + /workspaces/{slug}/projects/{project_id}/modules/{id}/: + get: + operationId: get_module_2 + description: Get modules + summary: Get module + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + description: Module + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_module + description: Update module + summary: Update module + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: Module name + maxLength: 255 + example: Module 1 + description: + type: string + description: Module description + nullable: true + example: This is a module description + start_date: + type: string + format: date-time + description: Start date + nullable: true + example: '2025-01-01T00:00:00Z' + target_date: + type: string + format: date-time + description: Target date + nullable: true + example: '2025-01-01T00:00:00Z' + status: + type: string + description: Module status + enum: + - backlog + - planned + - in-progress + - paused + - completed + - cancelled + example: planned + lead: + type: string + format: uuid + description: Lead user ID + nullable: true + example: 123e4567-e89b-12d3-a456-426614174000 + members: + type: array + items: + type: string + format: uuid + description: Member user ID + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + description: '' + delete: + operationId: delete_module + description: Delete module + summary: Delete module + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: No response body + /workspaces/{slug}/projects/{project_id}/modules/{id}/archive/: + post: + operationId: archive_module + description: Archive module + summary: Archive module + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Module archived + '400': + description: Invalid request + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + /workspaces/{slug}/projects/{project_id}/states/: + get: + operationId: get_state + description: Get a state for a project + summary: Get State + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + description: State retrieved + post: + operationId: create_state + description: Create a new state for a project + summary: Create State + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - States + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: State name + maxLength: 255 + example: State 1 + description: + type: string + description: State description + nullable: true + example: This is a state description + color: + type: string + description: State color + example: '#000000' + group: + type: string + description: State group + enum: + - backlog + - unstarted + - started + - completed + - cancelled + - triage + example: backlog + default: + type: boolean + description: Default state + example: false + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + description: State created + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '409': + description: State with the same name already exists + /workspaces/{slug}/projects/{project_id}/states/{state_id}/: + get: + operationId: get_state_2 + description: Get a state for a project + summary: Get State + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: path + name: state_id + schema: + type: string + format: uuid + required: true + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + description: State retrieved + patch: + operationId: update_state + description: Update a state for a project + summary: Update State + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: path + name: state_id + schema: + type: string + format: uuid + required: true + tags: + - States + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: State name + maxLength: 255 + example: State 1 + description: + type: string + description: State description + nullable: true + example: This is a state description + color: + type: string + description: State color + example: '#000000' + group: + type: string + description: State group + enum: + - backlog + - unstarted + - started + - completed + - cancelled + - triage + example: backlog + default: + type: boolean + description: Default state + example: false + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + description: State updated + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: State not found + delete: + operationId: delete_state + description: Delete a state for a project + summary: Delete State + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + - in: path + name: state_id + schema: + type: string + format: uuid + required: true + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: State deleted + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: State not found +components: + schemas: + Cycle: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + total_issues: + type: integer + readOnly: true + cancelled_issues: + type: integer + readOnly: true + completed_issues: + type: integer + readOnly: true + started_issues: + type: integer + readOnly: true + unstarted_issues: + type: integer + readOnly: true + backlog_issues: + type: integer + readOnly: true + total_estimates: + type: number + format: double + readOnly: true + completed_estimates: + type: number + format: double + readOnly: true + started_estimates: + type: number + format: double + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + progress_snapshot: {} + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + timezone: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fort_Nelson + - America/Fort_Wayne + - America/Fortaleza + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Indianapolis + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Acre + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/NSW + - Australia/North + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - CET + - CST6CDT + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - Chile/Continental + - Chile/EasterIsland + - Cuba + - EET + - EST + - EST5EDT + - Egypt + - Eire + - Etc/GMT + - Etc/GMT+0 + - Etc/GMT+1 + - Etc/GMT+10 + - Etc/GMT+11 + - Etc/GMT+12 + - Etc/GMT+2 + - Etc/GMT+3 + - Etc/GMT+4 + - Etc/GMT+5 + - Etc/GMT+6 + - Etc/GMT+7 + - Etc/GMT+8 + - Etc/GMT+9 + - Etc/GMT-0 + - Etc/GMT-1 + - Etc/GMT-10 + - Etc/GMT-11 + - Etc/GMT-12 + - Etc/GMT-13 + - Etc/GMT-14 + - Etc/GMT-2 + - Etc/GMT-3 + - Etc/GMT-4 + - Etc/GMT-5 + - Etc/GMT-6 + - Etc/GMT-7 + - Etc/GMT-8 + - Etc/GMT-9 + - Etc/GMT0 + - Etc/Greenwich + - Etc/UCT + - Etc/UTC + - Etc/Universal + - Etc/Zulu + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Ulyanovsk + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - GB + - GB-Eire + - GMT + - GMT+0 + - GMT-0 + - GMT0 + - Greenwich + - HST + - Hongkong + - Iceland + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Iran + - Israel + - Jamaica + - Japan + - Kwajalein + - Libya + - MET + - MST + - MST7MDT + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - NZ + - NZ-CHAT + - Navajo + - PRC + - PST8PDT + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - Poland + - Portugal + - ROC + - ROK + - Singapore + - Turkey + - UCT + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/East-Indiana + - US/Eastern + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Samoa + - UTC + - Universal + - W-SU + - WET + - Zulu + type: string + description: |- + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `CET` - CET + * `CST6CDT` - CST6CDT + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Cuba` - Cuba + * `EET` - EET + * `EST` - EST + * `EST5EDT` - EST5EDT + * `Egypt` - Egypt + * `Eire` - Eire + * `Etc/GMT` - Etc/GMT + * `Etc/GMT+0` - Etc/GMT+0 + * `Etc/GMT+1` - Etc/GMT+1 + * `Etc/GMT+10` - Etc/GMT+10 + * `Etc/GMT+11` - Etc/GMT+11 + * `Etc/GMT+12` - Etc/GMT+12 + * `Etc/GMT+2` - Etc/GMT+2 + * `Etc/GMT+3` - Etc/GMT+3 + * `Etc/GMT+4` - Etc/GMT+4 + * `Etc/GMT+5` - Etc/GMT+5 + * `Etc/GMT+6` - Etc/GMT+6 + * `Etc/GMT+7` - Etc/GMT+7 + * `Etc/GMT+8` - Etc/GMT+8 + * `Etc/GMT+9` - Etc/GMT+9 + * `Etc/GMT-0` - Etc/GMT-0 + * `Etc/GMT-1` - Etc/GMT-1 + * `Etc/GMT-10` - Etc/GMT-10 + * `Etc/GMT-11` - Etc/GMT-11 + * `Etc/GMT-12` - Etc/GMT-12 + * `Etc/GMT-13` - Etc/GMT-13 + * `Etc/GMT-14` - Etc/GMT-14 + * `Etc/GMT-2` - Etc/GMT-2 + * `Etc/GMT-3` - Etc/GMT-3 + * `Etc/GMT-4` - Etc/GMT-4 + * `Etc/GMT-5` - Etc/GMT-5 + * `Etc/GMT-6` - Etc/GMT-6 + * `Etc/GMT-7` - Etc/GMT-7 + * `Etc/GMT-8` - Etc/GMT-8 + * `Etc/GMT-9` - Etc/GMT-9 + * `Etc/GMT0` - Etc/GMT0 + * `Etc/Greenwich` - Etc/Greenwich + * `Etc/UCT` - Etc/UCT + * `Etc/UTC` - Etc/UTC + * `Etc/Universal` - Etc/Universal + * `Etc/Zulu` - Etc/Zulu + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `GB` - GB + * `GB-Eire` - GB-Eire + * `GMT` - GMT + * `GMT+0` - GMT+0 + * `GMT-0` - GMT-0 + * `GMT0` - GMT0 + * `Greenwich` - Greenwich + * `HST` - HST + * `Hongkong` - Hongkong + * `Iceland` - Iceland + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Iran` - Iran + * `Israel` - Israel + * `Jamaica` - Jamaica + * `Japan` - Japan + * `Kwajalein` - Kwajalein + * `Libya` - Libya + * `MET` - MET + * `MST` - MST + * `MST7MDT` - MST7MDT + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `NZ` - NZ + * `NZ-CHAT` - NZ-CHAT + * `Navajo` - Navajo + * `PRC` - PRC + * `PST8PDT` - PST8PDT + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `Poland` - Poland + * `Portugal` - Portugal + * `ROC` - ROC + * `ROK` - ROK + * `Singapore` - Singapore + * `Turkey` - Turkey + * `UCT` - UCT + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + * `Universal` - Universal + * `W-SU` - W-SU + * `WET` - WET + * `Zulu` - Zulu + x-spec-enum-id: cd9b66101aa181d2 + version: + type: integer + maximum: 2147483647 + minimum: -2147483648 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + owned_by: + type: string + format: uuid + readOnly: true + required: + - backlog_issues + - cancelled_issues + - completed_estimates + - completed_issues + - created_at + - created_by + - deleted_at + - id + - name + - owned_by + - project + - started_estimates + - started_issues + - total_estimates + - total_issues + - unstarted_issues + - updated_at + - updated_by + - workspace + CycleIssue: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + sub_issues_count: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + cycle: + type: string + format: uuid + readOnly: true + required: + - created_at + - cycle + - deleted_at + - id + - issue + - project + - sub_issues_count + - updated_at + - workspace + CycleLite: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + progress_snapshot: {} + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + timezone: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fort_Nelson + - America/Fort_Wayne + - America/Fortaleza + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Indianapolis + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Acre + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/NSW + - Australia/North + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - CET + - CST6CDT + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - Chile/Continental + - Chile/EasterIsland + - Cuba + - EET + - EST + - EST5EDT + - Egypt + - Eire + - Etc/GMT + - Etc/GMT+0 + - Etc/GMT+1 + - Etc/GMT+10 + - Etc/GMT+11 + - Etc/GMT+12 + - Etc/GMT+2 + - Etc/GMT+3 + - Etc/GMT+4 + - Etc/GMT+5 + - Etc/GMT+6 + - Etc/GMT+7 + - Etc/GMT+8 + - Etc/GMT+9 + - Etc/GMT-0 + - Etc/GMT-1 + - Etc/GMT-10 + - Etc/GMT-11 + - Etc/GMT-12 + - Etc/GMT-13 + - Etc/GMT-14 + - Etc/GMT-2 + - Etc/GMT-3 + - Etc/GMT-4 + - Etc/GMT-5 + - Etc/GMT-6 + - Etc/GMT-7 + - Etc/GMT-8 + - Etc/GMT-9 + - Etc/GMT0 + - Etc/Greenwich + - Etc/UCT + - Etc/UTC + - Etc/Universal + - Etc/Zulu + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Ulyanovsk + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - GB + - GB-Eire + - GMT + - GMT+0 + - GMT-0 + - GMT0 + - Greenwich + - HST + - Hongkong + - Iceland + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Iran + - Israel + - Jamaica + - Japan + - Kwajalein + - Libya + - MET + - MST + - MST7MDT + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - NZ + - NZ-CHAT + - Navajo + - PRC + - PST8PDT + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - Poland + - Portugal + - ROC + - ROK + - Singapore + - Turkey + - UCT + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/East-Indiana + - US/Eastern + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Samoa + - UTC + - Universal + - W-SU + - WET + - Zulu + type: string + description: |- + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `CET` - CET + * `CST6CDT` - CST6CDT + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Cuba` - Cuba + * `EET` - EET + * `EST` - EST + * `EST5EDT` - EST5EDT + * `Egypt` - Egypt + * `Eire` - Eire + * `Etc/GMT` - Etc/GMT + * `Etc/GMT+0` - Etc/GMT+0 + * `Etc/GMT+1` - Etc/GMT+1 + * `Etc/GMT+10` - Etc/GMT+10 + * `Etc/GMT+11` - Etc/GMT+11 + * `Etc/GMT+12` - Etc/GMT+12 + * `Etc/GMT+2` - Etc/GMT+2 + * `Etc/GMT+3` - Etc/GMT+3 + * `Etc/GMT+4` - Etc/GMT+4 + * `Etc/GMT+5` - Etc/GMT+5 + * `Etc/GMT+6` - Etc/GMT+6 + * `Etc/GMT+7` - Etc/GMT+7 + * `Etc/GMT+8` - Etc/GMT+8 + * `Etc/GMT+9` - Etc/GMT+9 + * `Etc/GMT-0` - Etc/GMT-0 + * `Etc/GMT-1` - Etc/GMT-1 + * `Etc/GMT-10` - Etc/GMT-10 + * `Etc/GMT-11` - Etc/GMT-11 + * `Etc/GMT-12` - Etc/GMT-12 + * `Etc/GMT-13` - Etc/GMT-13 + * `Etc/GMT-14` - Etc/GMT-14 + * `Etc/GMT-2` - Etc/GMT-2 + * `Etc/GMT-3` - Etc/GMT-3 + * `Etc/GMT-4` - Etc/GMT-4 + * `Etc/GMT-5` - Etc/GMT-5 + * `Etc/GMT-6` - Etc/GMT-6 + * `Etc/GMT-7` - Etc/GMT-7 + * `Etc/GMT-8` - Etc/GMT-8 + * `Etc/GMT-9` - Etc/GMT-9 + * `Etc/GMT0` - Etc/GMT0 + * `Etc/Greenwich` - Etc/Greenwich + * `Etc/UCT` - Etc/UCT + * `Etc/UTC` - Etc/UTC + * `Etc/Universal` - Etc/Universal + * `Etc/Zulu` - Etc/Zulu + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `GB` - GB + * `GB-Eire` - GB-Eire + * `GMT` - GMT + * `GMT+0` - GMT+0 + * `GMT-0` - GMT-0 + * `GMT0` - GMT0 + * `Greenwich` - Greenwich + * `HST` - HST + * `Hongkong` - Hongkong + * `Iceland` - Iceland + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Iran` - Iran + * `Israel` - Israel + * `Jamaica` - Jamaica + * `Japan` - Japan + * `Kwajalein` - Kwajalein + * `Libya` - Libya + * `MET` - MET + * `MST` - MST + * `MST7MDT` - MST7MDT + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `NZ` - NZ + * `NZ-CHAT` - NZ-CHAT + * `Navajo` - Navajo + * `PRC` - PRC + * `PST8PDT` - PST8PDT + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `Poland` - Poland + * `Portugal` - Portugal + * `ROC` - ROC + * `ROK` - ROK + * `Singapore` - Singapore + * `Turkey` - Turkey + * `UCT` - UCT + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + * `Universal` - Universal + * `W-SU` - W-SU + * `WET` - WET + * `Zulu` - Zulu + x-spec-enum-id: cd9b66101aa181d2 + version: + type: integer + maximum: 2147483647 + minimum: -2147483648 + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + workspace: + type: string + format: uuid + owned_by: + type: string + format: uuid + required: + - created_at + - id + - name + - owned_by + - project + - updated_at + - workspace + GenericAssetUpload: + type: object + description: Serializer for generic asset upload requests + properties: + name: + type: string + description: Original filename of the asset + type: + type: string + description: MIME type of the file + size: + type: integer + description: File size in bytes + project_id: + type: string + format: uuid + description: UUID of the project to associate with the asset + external_id: + type: string + description: External identifier for the asset (for integration tracking) + external_source: + type: string + description: External source system (for integration tracking) + required: + - name + - size + IntakeIssue: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + issue_detail: + allOf: + - $ref: '#/components/schemas/IssueExpand' + readOnly: true + inbox: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + status: + enum: + - -2 + - -1 + - 0 + - 1 + - 2 + type: integer + description: |- + * `-2` - Pending + * `-1` - Rejected + * `0` - Snoozed + * `1` - Accepted + * `2` - Duplicate + x-spec-enum-id: 255d1d18a49d93c5 + minimum: -2147483648 + maximum: 2147483647 + snoozed_till: + type: string + format: date-time + nullable: true + source: + type: string + nullable: true + maxLength: 255 + source_email: + type: string + nullable: true + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + extra: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + intake: + type: string + format: uuid + issue: + type: string + format: uuid + readOnly: true + duplicate_to: + type: string + format: uuid + nullable: true + required: + - created_at + - created_by + - id + - inbox + - intake + - issue + - issue_detail + - project + - updated_at + - updated_by + - workspace + Issue: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + assignees: + type: array + items: + type: string + format: uuid + writeOnly: true + labels: + type: array + items: + type: string + format: uuid + writeOnly: true + type_id: + type: string + format: uuid + nullable: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + title: Issue Name + maxLength: 255 + description_html: + type: string + description_binary: + type: string + format: byte + readOnly: true + nullable: true + priority: + enum: + - urgent + - high + - medium + - low + - none + type: string + description: |- + * `urgent` - Urgent + * `high` - High + * `medium` - Medium + * `low` - Low + * `none` - None + x-spec-enum-id: c1fd7437c30830ac + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + completed_at: + type: string + format: date-time + nullable: true + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + parent: + type: string + format: uuid + nullable: true + state: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + required: + - created_at + - description_binary + - id + - name + - project + - updated_at + - updated_by + - workspace + IssueActivity: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + verb: + type: string + title: Action + maxLength: 255 + field: + type: string + nullable: true + title: Field Name + maxLength: 255 + old_value: + type: string + nullable: true + new_value: + type: string + nullable: true + comment: + type: string + attachments: + type: array + items: + type: string + format: uri + maxLength: 200 + maxItems: 10 + old_identifier: + type: string + format: uuid + nullable: true + new_identifier: + type: string + format: uuid + nullable: true + epoch: + type: number + format: double + nullable: true + project: + type: string + format: uuid + workspace: + type: string + format: uuid + issue: + type: string + format: uuid + nullable: true + issue_comment: + type: string + format: uuid + nullable: true + actor: + type: string + format: uuid + nullable: true + required: + - created_at + - id + - project + - updated_at + - workspace + IssueAttachment: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + attributes: {} + asset: + type: string + format: uri + entity_type: + type: string + nullable: true + maxLength: 255 + entity_identifier: + type: string + nullable: true + maxLength: 255 + is_deleted: + type: boolean + is_archived: + type: boolean + external_id: + type: string + nullable: true + maxLength: 255 + external_source: + type: string + nullable: true + maxLength: 255 + size: + type: number + format: double + is_uploaded: + type: boolean + storage_metadata: + nullable: true + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + user: + type: string + format: uuid + nullable: true + workspace: + type: string + format: uuid + readOnly: true + nullable: true + draft_issue: + type: string + format: uuid + nullable: true + project: + type: string + format: uuid + readOnly: true + nullable: true + issue: + type: string + format: uuid + readOnly: true + nullable: true + comment: + type: string + format: uuid + nullable: true + page: + type: string + format: uuid + nullable: true + required: + - asset + - created_at + - id + - issue + - project + - updated_at + - updated_by + - workspace + IssueComment: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + is_member: + type: boolean + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + comment_html: + type: string + attachments: + type: array + items: + type: string + format: uri + maxLength: 200 + maxItems: 10 + access: + enum: + - INTERNAL + - EXTERNAL + type: string + description: |- + * `INTERNAL` - INTERNAL + * `EXTERNAL` - EXTERNAL + x-spec-enum-id: bd43942b53ce5eef + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + edited_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + readOnly: true + actor: + type: string + format: uuid + nullable: true + required: + - created_at + - created_by + - id + - is_member + - issue + - project + - updated_at + - updated_by + - workspace + IssueExpand: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + cycle: + allOf: + - $ref: '#/components/schemas/CycleLite' + readOnly: true + module: + allOf: + - $ref: '#/components/schemas/ModuleLite' + readOnly: true + labels: + type: array + items: + $ref: '#/components/schemas/LabelLite' + readOnly: true + assignees: + type: array + items: + $ref: '#/components/schemas/UserLite' + readOnly: true + state: + allOf: + - $ref: '#/components/schemas/StateLite' + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + title: Issue Name + maxLength: 255 + description: {} + description_html: + type: string + description_stripped: + type: string + nullable: true + description_binary: + type: string + format: byte + readOnly: true + nullable: true + priority: + enum: + - urgent + - high + - medium + - low + - none + type: string + description: |- + * `urgent` - Urgent + * `high` - High + * `medium` - Medium + * `low` - Low + * `none` - None + x-spec-enum-id: c1fd7437c30830ac + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + completed_at: + type: string + format: date-time + nullable: true + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + parent: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + required: + - assignees + - created_at + - created_by + - cycle + - description_binary + - id + - labels + - module + - name + - project + - state + - updated_at + - updated_by + - workspace + IssueLink: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + title: + type: string + nullable: true + maxLength: 255 + url: + type: string + metadata: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + readOnly: true + required: + - created_at + - created_by + - id + - issue + - project + - updated_at + - updated_by + - url + - workspace + Label: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + maxLength: 255 + description: + type: string + color: + type: string + maxLength: 255 + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + workspace: + type: string + format: uuid + readOnly: true + project: + type: string + format: uuid + readOnly: true + nullable: true + parent: + type: string + format: uuid + nullable: true + required: + - created_at + - created_by + - deleted_at + - id + - name + - project + - updated_at + - updated_by + - workspace + LabelLite: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + name: + type: string + maxLength: 255 + color: + type: string + maxLength: 255 + required: + - id + - name + Module: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + members: + type: array + items: + type: string + format: uuid + writeOnly: true + total_issues: + type: integer + readOnly: true + cancelled_issues: + type: integer + readOnly: true + completed_issues: + type: integer + readOnly: true + started_issues: + type: integer + readOnly: true + unstarted_issues: + type: integer + readOnly: true + backlog_issues: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + description_text: + nullable: true + title: Module Description RT + description_html: + nullable: true + title: Module Description HTML + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + enum: + - backlog + - planned + - in-progress + - paused + - completed + - cancelled + type: string + description: |- + * `backlog` - Backlog + * `planned` - Planned + * `in-progress` - In Progress + * `paused` - Paused + * `completed` - Completed + * `cancelled` - Cancelled + x-spec-enum-id: a3d702ffba30a19d + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + lead: + type: string + format: uuid + nullable: true + required: + - backlog_issues + - cancelled_issues + - completed_issues + - created_at + - created_by + - deleted_at + - id + - name + - project + - started_issues + - total_issues + - unstarted_issues + - updated_at + - updated_by + - workspace + ModuleIssue: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + sub_issues_count: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + module: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + required: + - created_at + - created_by + - deleted_at + - id + - issue + - module + - project + - sub_issues_count + - updated_at + - updated_by + - workspace + ModuleLite: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + description_text: + nullable: true + title: Module Description RT + description_html: + nullable: true + title: Module Description HTML + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + enum: + - backlog + - planned + - in-progress + - paused + - completed + - cancelled + type: string + description: |- + * `backlog` - Backlog + * `planned` - Planned + * `in-progress` - In Progress + * `paused` - Paused + * `completed` - Completed + * `cancelled` - Cancelled + x-spec-enum-id: a3d702ffba30a19d + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + workspace: + type: string + format: uuid + lead: + type: string + format: uuid + nullable: true + members: + type: array + items: + type: string + format: uuid + readOnly: true + required: + - created_at + - deleted_at + - id + - members + - name + - project + - updated_at + - workspace + PatchedAssetUpdate: + type: object + description: Serializer for asset update requests after upload + properties: + attributes: + description: Additional attributes to update for the asset + PatchedGenericAssetUpdate: + type: object + description: Serializer for generic asset update requests + properties: + is_uploaded: + type: boolean + default: true + description: Whether the asset has been successfully uploaded + PatchedIssue: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + assignees: + type: array + items: + type: string + format: uuid + writeOnly: true + labels: + type: array + items: + type: string + format: uuid + writeOnly: true + type_id: + type: string + format: uuid + nullable: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + title: Issue Name + maxLength: 255 + description_html: + type: string + description_binary: + type: string + format: byte + readOnly: true + nullable: true + priority: + enum: + - urgent + - high + - medium + - low + - none + type: string + description: |- + * `urgent` - Urgent + * `high` - High + * `medium` - Medium + * `low` - Low + * `none` - None + x-spec-enum-id: c1fd7437c30830ac + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + completed_at: + type: string + format: date-time + nullable: true + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + parent: + type: string + format: uuid + nullable: true + state: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + PatchedProject: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + total_members: + type: integer + readOnly: true + total_cycles: + type: integer + readOnly: true + total_modules: + type: integer + readOnly: true + is_member: + type: boolean + readOnly: true + sort_order: + type: number + format: double + readOnly: true + member_role: + type: integer + readOnly: true + is_deployed: + type: boolean + readOnly: true + cover_image_url: + type: string + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Project Name + maxLength: 255 + description: + type: string + title: Project Description + description_text: + nullable: true + title: Project Description RT + description_html: + nullable: true + title: Project Description HTML + network: + enum: + - 0 + - 2 + type: integer + description: |- + * `0` - Secret + * `2` - Public + x-spec-enum-id: ff6cd64f49ca3db3 + minimum: 0 + maximum: 32767 + identifier: + type: string + title: Project Identifier + maxLength: 12 + emoji: + type: string + readOnly: true + nullable: true + icon_prop: + nullable: true + module_view: + type: boolean + cycle_view: + type: boolean + issue_views_view: + type: boolean + page_view: + type: boolean + intake_view: + type: boolean + is_time_tracking_enabled: + type: boolean + is_issue_type_enabled: + type: boolean + guest_view_all_features: + type: boolean + cover_image: + type: string + nullable: true + archive_in: + type: integer + maximum: 12 + minimum: 0 + close_in: + type: integer + maximum: 12 + minimum: 0 + logo_props: {} + archived_at: + type: string + format: date-time + nullable: true + timezone: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fort_Nelson + - America/Fort_Wayne + - America/Fortaleza + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Indianapolis + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Acre + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/NSW + - Australia/North + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - CET + - CST6CDT + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - Chile/Continental + - Chile/EasterIsland + - Cuba + - EET + - EST + - EST5EDT + - Egypt + - Eire + - Etc/GMT + - Etc/GMT+0 + - Etc/GMT+1 + - Etc/GMT+10 + - Etc/GMT+11 + - Etc/GMT+12 + - Etc/GMT+2 + - Etc/GMT+3 + - Etc/GMT+4 + - Etc/GMT+5 + - Etc/GMT+6 + - Etc/GMT+7 + - Etc/GMT+8 + - Etc/GMT+9 + - Etc/GMT-0 + - Etc/GMT-1 + - Etc/GMT-10 + - Etc/GMT-11 + - Etc/GMT-12 + - Etc/GMT-13 + - Etc/GMT-14 + - Etc/GMT-2 + - Etc/GMT-3 + - Etc/GMT-4 + - Etc/GMT-5 + - Etc/GMT-6 + - Etc/GMT-7 + - Etc/GMT-8 + - Etc/GMT-9 + - Etc/GMT0 + - Etc/Greenwich + - Etc/UCT + - Etc/UTC + - Etc/Universal + - Etc/Zulu + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Ulyanovsk + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - GB + - GB-Eire + - GMT + - GMT+0 + - GMT-0 + - GMT0 + - Greenwich + - HST + - Hongkong + - Iceland + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Iran + - Israel + - Jamaica + - Japan + - Kwajalein + - Libya + - MET + - MST + - MST7MDT + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - NZ + - NZ-CHAT + - Navajo + - PRC + - PST8PDT + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - Poland + - Portugal + - ROC + - ROK + - Singapore + - Turkey + - UCT + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/East-Indiana + - US/Eastern + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Samoa + - UTC + - Universal + - W-SU + - WET + - Zulu + type: string + description: |- + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `CET` - CET + * `CST6CDT` - CST6CDT + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Cuba` - Cuba + * `EET` - EET + * `EST` - EST + * `EST5EDT` - EST5EDT + * `Egypt` - Egypt + * `Eire` - Eire + * `Etc/GMT` - Etc/GMT + * `Etc/GMT+0` - Etc/GMT+0 + * `Etc/GMT+1` - Etc/GMT+1 + * `Etc/GMT+10` - Etc/GMT+10 + * `Etc/GMT+11` - Etc/GMT+11 + * `Etc/GMT+12` - Etc/GMT+12 + * `Etc/GMT+2` - Etc/GMT+2 + * `Etc/GMT+3` - Etc/GMT+3 + * `Etc/GMT+4` - Etc/GMT+4 + * `Etc/GMT+5` - Etc/GMT+5 + * `Etc/GMT+6` - Etc/GMT+6 + * `Etc/GMT+7` - Etc/GMT+7 + * `Etc/GMT+8` - Etc/GMT+8 + * `Etc/GMT+9` - Etc/GMT+9 + * `Etc/GMT-0` - Etc/GMT-0 + * `Etc/GMT-1` - Etc/GMT-1 + * `Etc/GMT-10` - Etc/GMT-10 + * `Etc/GMT-11` - Etc/GMT-11 + * `Etc/GMT-12` - Etc/GMT-12 + * `Etc/GMT-13` - Etc/GMT-13 + * `Etc/GMT-14` - Etc/GMT-14 + * `Etc/GMT-2` - Etc/GMT-2 + * `Etc/GMT-3` - Etc/GMT-3 + * `Etc/GMT-4` - Etc/GMT-4 + * `Etc/GMT-5` - Etc/GMT-5 + * `Etc/GMT-6` - Etc/GMT-6 + * `Etc/GMT-7` - Etc/GMT-7 + * `Etc/GMT-8` - Etc/GMT-8 + * `Etc/GMT-9` - Etc/GMT-9 + * `Etc/GMT0` - Etc/GMT0 + * `Etc/Greenwich` - Etc/Greenwich + * `Etc/UCT` - Etc/UCT + * `Etc/UTC` - Etc/UTC + * `Etc/Universal` - Etc/Universal + * `Etc/Zulu` - Etc/Zulu + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `GB` - GB + * `GB-Eire` - GB-Eire + * `GMT` - GMT + * `GMT+0` - GMT+0 + * `GMT-0` - GMT-0 + * `GMT0` - GMT0 + * `Greenwich` - Greenwich + * `HST` - HST + * `Hongkong` - Hongkong + * `Iceland` - Iceland + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Iran` - Iran + * `Israel` - Israel + * `Jamaica` - Jamaica + * `Japan` - Japan + * `Kwajalein` - Kwajalein + * `Libya` - Libya + * `MET` - MET + * `MST` - MST + * `MST7MDT` - MST7MDT + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `NZ` - NZ + * `NZ-CHAT` - NZ-CHAT + * `Navajo` - Navajo + * `PRC` - PRC + * `PST8PDT` - PST8PDT + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `Poland` - Poland + * `Portugal` - Portugal + * `ROC` - ROC + * `ROK` - ROK + * `Singapore` - Singapore + * `Turkey` - Turkey + * `UCT` - UCT + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + * `Universal` - Universal + * `W-SU` - W-SU + * `WET` - WET + * `Zulu` - Zulu + x-spec-enum-id: cd9b66101aa181d2 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + workspace: + type: string + format: uuid + readOnly: true + default_assignee: + type: string + format: uuid + nullable: true + project_lead: + type: string + format: uuid + nullable: true + cover_image_asset: + type: string + format: uuid + nullable: true + estimate: + type: string + format: uuid + nullable: true + default_state: + type: string + format: uuid + nullable: true + Project: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + total_members: + type: integer + readOnly: true + total_cycles: + type: integer + readOnly: true + total_modules: + type: integer + readOnly: true + is_member: + type: boolean + readOnly: true + sort_order: + type: number + format: double + readOnly: true + member_role: + type: integer + readOnly: true + is_deployed: + type: boolean + readOnly: true + cover_image_url: + type: string + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Project Name + maxLength: 255 + description: + type: string + title: Project Description + description_text: + nullable: true + title: Project Description RT + description_html: + nullable: true + title: Project Description HTML + network: + enum: + - 0 + - 2 + type: integer + description: |- + * `0` - Secret + * `2` - Public + x-spec-enum-id: ff6cd64f49ca3db3 + minimum: 0 + maximum: 32767 + identifier: + type: string + title: Project Identifier + maxLength: 12 + emoji: + type: string + readOnly: true + nullable: true + icon_prop: + nullable: true + module_view: + type: boolean + cycle_view: + type: boolean + issue_views_view: + type: boolean + page_view: + type: boolean + intake_view: + type: boolean + is_time_tracking_enabled: + type: boolean + is_issue_type_enabled: + type: boolean + guest_view_all_features: + type: boolean + cover_image: + type: string + nullable: true + archive_in: + type: integer + maximum: 12 + minimum: 0 + close_in: + type: integer + maximum: 12 + minimum: 0 + logo_props: {} + archived_at: + type: string + format: date-time + nullable: true + timezone: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fort_Nelson + - America/Fort_Wayne + - America/Fortaleza + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Indianapolis + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Acre + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/NSW + - Australia/North + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - CET + - CST6CDT + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - Chile/Continental + - Chile/EasterIsland + - Cuba + - EET + - EST + - EST5EDT + - Egypt + - Eire + - Etc/GMT + - Etc/GMT+0 + - Etc/GMT+1 + - Etc/GMT+10 + - Etc/GMT+11 + - Etc/GMT+12 + - Etc/GMT+2 + - Etc/GMT+3 + - Etc/GMT+4 + - Etc/GMT+5 + - Etc/GMT+6 + - Etc/GMT+7 + - Etc/GMT+8 + - Etc/GMT+9 + - Etc/GMT-0 + - Etc/GMT-1 + - Etc/GMT-10 + - Etc/GMT-11 + - Etc/GMT-12 + - Etc/GMT-13 + - Etc/GMT-14 + - Etc/GMT-2 + - Etc/GMT-3 + - Etc/GMT-4 + - Etc/GMT-5 + - Etc/GMT-6 + - Etc/GMT-7 + - Etc/GMT-8 + - Etc/GMT-9 + - Etc/GMT0 + - Etc/Greenwich + - Etc/UCT + - Etc/UTC + - Etc/Universal + - Etc/Zulu + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Ulyanovsk + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - GB + - GB-Eire + - GMT + - GMT+0 + - GMT-0 + - GMT0 + - Greenwich + - HST + - Hongkong + - Iceland + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Iran + - Israel + - Jamaica + - Japan + - Kwajalein + - Libya + - MET + - MST + - MST7MDT + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - NZ + - NZ-CHAT + - Navajo + - PRC + - PST8PDT + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - Poland + - Portugal + - ROC + - ROK + - Singapore + - Turkey + - UCT + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/East-Indiana + - US/Eastern + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Samoa + - UTC + - Universal + - W-SU + - WET + - Zulu + type: string + description: |- + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `CET` - CET + * `CST6CDT` - CST6CDT + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Cuba` - Cuba + * `EET` - EET + * `EST` - EST + * `EST5EDT` - EST5EDT + * `Egypt` - Egypt + * `Eire` - Eire + * `Etc/GMT` - Etc/GMT + * `Etc/GMT+0` - Etc/GMT+0 + * `Etc/GMT+1` - Etc/GMT+1 + * `Etc/GMT+10` - Etc/GMT+10 + * `Etc/GMT+11` - Etc/GMT+11 + * `Etc/GMT+12` - Etc/GMT+12 + * `Etc/GMT+2` - Etc/GMT+2 + * `Etc/GMT+3` - Etc/GMT+3 + * `Etc/GMT+4` - Etc/GMT+4 + * `Etc/GMT+5` - Etc/GMT+5 + * `Etc/GMT+6` - Etc/GMT+6 + * `Etc/GMT+7` - Etc/GMT+7 + * `Etc/GMT+8` - Etc/GMT+8 + * `Etc/GMT+9` - Etc/GMT+9 + * `Etc/GMT-0` - Etc/GMT-0 + * `Etc/GMT-1` - Etc/GMT-1 + * `Etc/GMT-10` - Etc/GMT-10 + * `Etc/GMT-11` - Etc/GMT-11 + * `Etc/GMT-12` - Etc/GMT-12 + * `Etc/GMT-13` - Etc/GMT-13 + * `Etc/GMT-14` - Etc/GMT-14 + * `Etc/GMT-2` - Etc/GMT-2 + * `Etc/GMT-3` - Etc/GMT-3 + * `Etc/GMT-4` - Etc/GMT-4 + * `Etc/GMT-5` - Etc/GMT-5 + * `Etc/GMT-6` - Etc/GMT-6 + * `Etc/GMT-7` - Etc/GMT-7 + * `Etc/GMT-8` - Etc/GMT-8 + * `Etc/GMT-9` - Etc/GMT-9 + * `Etc/GMT0` - Etc/GMT0 + * `Etc/Greenwich` - Etc/Greenwich + * `Etc/UCT` - Etc/UCT + * `Etc/UTC` - Etc/UTC + * `Etc/Universal` - Etc/Universal + * `Etc/Zulu` - Etc/Zulu + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `GB` - GB + * `GB-Eire` - GB-Eire + * `GMT` - GMT + * `GMT+0` - GMT+0 + * `GMT-0` - GMT-0 + * `GMT0` - GMT0 + * `Greenwich` - Greenwich + * `HST` - HST + * `Hongkong` - Hongkong + * `Iceland` - Iceland + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Iran` - Iran + * `Israel` - Israel + * `Jamaica` - Jamaica + * `Japan` - Japan + * `Kwajalein` - Kwajalein + * `Libya` - Libya + * `MET` - MET + * `MST` - MST + * `MST7MDT` - MST7MDT + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `NZ` - NZ + * `NZ-CHAT` - NZ-CHAT + * `Navajo` - Navajo + * `PRC` - PRC + * `PST8PDT` - PST8PDT + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `Poland` - Poland + * `Portugal` - Portugal + * `ROC` - ROC + * `ROK` - ROK + * `Singapore` - Singapore + * `Turkey` - Turkey + * `UCT` - UCT + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + * `Universal` - Universal + * `W-SU` - W-SU + * `WET` - WET + * `Zulu` - Zulu + x-spec-enum-id: cd9b66101aa181d2 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + workspace: + type: string + format: uuid + readOnly: true + default_assignee: + type: string + format: uuid + nullable: true + project_lead: + type: string + format: uuid + nullable: true + cover_image_asset: + type: string + format: uuid + nullable: true + estimate: + type: string + format: uuid + nullable: true + default_state: + type: string + format: uuid + nullable: true + required: + - cover_image_url + - created_at + - created_by + - deleted_at + - emoji + - id + - identifier + - is_deployed + - is_member + - member_role + - name + - sort_order + - total_cycles + - total_members + - total_modules + - updated_at + - updated_by + - workspace + State: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: State Name + maxLength: 255 + description: + type: string + title: State Description + color: + type: string + title: State Color + maxLength: 255 + slug: + type: string + maxLength: 100 + pattern: ^[-a-zA-Z0-9_]+$ + sequence: + type: number + format: double + group: + enum: + - backlog + - unstarted + - started + - completed + - cancelled + - triage + type: string + description: |- + * `backlog` - Backlog + * `unstarted` - Unstarted + * `started` - Started + * `completed` - Completed + * `cancelled` - Cancelled + * `triage` - Triage + x-spec-enum-id: 8d09e732e922226e + is_triage: + type: boolean + default: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + required: + - color + - created_at + - created_by + - deleted_at + - id + - name + - project + - updated_at + - updated_by + - workspace + StateLite: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + name: + type: string + readOnly: true + title: State Name + color: + type: string + readOnly: true + title: State Color + group: + enum: + - backlog + - unstarted + - started + - completed + - cancelled + - triage + type: string + description: |- + * `backlog` - Backlog + * `unstarted` - Unstarted + * `started` - Started + * `completed` - Completed + * `cancelled` - Cancelled + * `triage` - Triage + x-spec-enum-id: 8d09e732e922226e + readOnly: true + required: + - color + - group + - id + - name + UserAssetUpload: + type: object + description: Serializer for user asset upload requests + properties: + name: + type: string + description: Original filename of the asset + type: + enum: + - image/jpeg + - image/png + - image/webp + - image/jpg + - image/gif + type: string + x-spec-enum-id: c79f3b4ad843519e + default: image/jpeg + description: |- + MIME type of the file + + * `image/jpeg` - JPEG + * `image/png` - PNG + * `image/webp` - WebP + * `image/jpg` - JPG + * `image/gif` - GIF + size: + type: integer + description: File size in bytes + entity_type: + enum: + - USER_AVATAR + - USER_COVER + type: string + x-spec-enum-id: ddb7b8ca3e92601a + description: |- + Type of user asset + + * `USER_AVATAR` - User Avatar + * `USER_COVER` - User Cover + required: + - entity_type + - name + - size + UserLite: + type: object + properties: + id: + type: string + format: uuid + readOnly: true + first_name: + type: string + readOnly: true + last_name: + type: string + readOnly: true + email: + type: string + readOnly: true + nullable: true + avatar: + type: string + readOnly: true + avatar_url: + type: string + readOnly: true + description: Avatar URL + display_name: + type: string + readOnly: true + required: + - display_name + - email + - first_name + - id + - last_name + securitySchemes: + ApiKeyAuthentication: + type: apiKey + in: header + name: X-API-Key + description: API key authentication. Provide your API key in the X-API-Key header. +servers: +- url: /api/v1 + description: API v1 +tags: +- name: Projects + description: Project management endpoints - create, update, delete, and manage projects +- name: Work Items + description: Work item management endpoints - create, update, assign, and track + work items +- name: Cycles + description: Sprint/Cycle management endpoints - manage development cycles and sprints +- name: Modules + description: Module management endpoints - organize work into modules and roadmaps +- name: States + description: Work item state management endpoints - manage workflow states +- name: Labels + description: Issue label management endpoints - categorize and organize issues +- name: Members + description: Project member management endpoints - manage team access and roles +- name: Assets + description: Asset management endpoints - upload, manage, and serve files and media +- name: Users + description: User management endpoints - manage user profiles and preferences +- name: Intake + description: Intake management endpoints - manage intake issues and intake issue + details diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..11433ee --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +max-line-length=99 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..14d11c4 --- /dev/null +++ b/setup.py @@ -0,0 +1,49 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from setuptools import setup, find_packages # noqa: H301 + +# To install the library, run the following +# +# python setup.py install +# +# prerequisite: setuptools +# http://pypi.python.org/pypi/setuptools +NAME = "plane" +VERSION = "1.0.0" +PYTHON_REQUIRES = ">=3.7" +REQUIRES = [ + "urllib3 >= 1.25.3, < 3.0.0", + "python-dateutil", + "pydantic >= 1.10.5, < 2", + "aenum" +] + +setup( + name=NAME, + version=VERSION, + description="Plane API", + author="OpenAPI Generator community", + author_email="team@openapitools.org", + url="", + keywords=["OpenAPI", "OpenAPI-Generator", "Plane API"], + install_requires=REQUIRES, + packages=find_packages(exclude=["test", "tests"]), + include_package_data=True, + long_description_content_type='text/markdown', + long_description="""\ + Plane External API + """, # noqa: E501 + package_data={"plane": ["py.typed"]}, +) diff --git a/src/plane/__init__.py b/src/plane/__init__.py deleted file mode 100644 index 2c45e75..0000000 --- a/src/plane/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -"""Plane SDK - Python client library for Plane APIs.""" - -from .client import Client -from .config import Config -from .exceptions import ( - MyAPIError, - AuthenticationError, - RateLimitError, - ValidationError, - NotFoundError, - ServerError, -) -from .models import User - -__version__ = "1.0.0" -__all__ = [ - "Client", - "Config", - "User", - "MyAPIError", - "AuthenticationError", - "RateLimitError", - "ValidationError", - "NotFoundError", - "ServerError", -] diff --git a/src/plane/client.py b/src/plane/client.py deleted file mode 100644 index b63e66e..0000000 --- a/src/plane/client.py +++ /dev/null @@ -1,193 +0,0 @@ -"""Main API client.""" - -import asyncio -from typing import Optional -import httpx -from .config import Config -from .resources.workspaces import UsersResource -from .resources.projects import ProjectsResource - - -class Client: - """Main API client.""" - - def __init__(self, config: Optional[Config] = None, **kwargs): - """Initialize the client.""" - if config is None: - config = Config.from_env(**kwargs) - - self.config = config - self._http_client = self._create_http_client() - - # Initialize resources - self.users = UsersResource(self) - self.projects = ProjectsResource(self) - - def _create_http_client(self) -> httpx.AsyncClient: - """Create HTTP client with proper configuration.""" - headers = { - "Authorization": f"Bearer {self.config.api_key}", - "User-Agent": self.config.user_agent, - "Content-Type": "application/json", - "Accept": "application/json", - } - - return httpx.AsyncClient( - headers=headers, - timeout=self.config.timeout, - limits=httpx.Limits(max_keepalive_connections=10, max_connections=20), - ) - - async def __aenter__(self): - """Async context manager entry.""" - return self - - async def __aexit__(self, exc_type, exc_val, exc_tb): - """Async context manager exit.""" - await self.close() - - async def close(self): - """Close the HTTP client.""" - if self._http_client: - await self._http_client.aclose() - - async def health_check(self) -> dict: - """Check API health.""" - try: - response = await self._http_client.get(f"{self.config.base_url}/health") - return response.json() - except Exception as e: - return {"status": "error", "message": str(e)} - - -class SyncClient: - """Synchronous wrapper for the async client.""" - - def __init__(self, config: Optional[Config] = None, **kwargs): - """Initialize the sync client.""" - self._async_client = Client(config, **kwargs) - self._loop = None - - def _get_loop(self): - """Get or create event loop.""" - try: - return asyncio.get_event_loop() - except RuntimeError: - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - return loop - - def _run_async(self, coro): - """Run async function synchronously.""" - loop = self._get_loop() - return loop.run_until_complete(coro) - - @property - def users(self): - """Access users resource synchronously.""" - return SyncUsersResource(self._async_client.users) - - @property - def projects(self): - """Access projects resource synchronously.""" - return SyncProjectsResource(self._async_client.projects) - - def health_check(self) -> dict: - """Check API health synchronously.""" - return self._run_async(self._async_client.health_check()) - - def close(self): - """Close the client.""" - self._run_async(self._async_client.close()) - - def __enter__(self): - """Sync context manager entry.""" - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - """Sync context manager exit.""" - self.close() - - -class SyncUsersResource: - """Synchronous wrapper for users resource.""" - - def __init__(self, async_resource: UsersResource): - self._async_resource = async_resource - self._client = async_resource._client - - def _run_async(self, coro): - """Run async function synchronously.""" - try: - loop = asyncio.get_event_loop() - except RuntimeError: - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - return loop.run_until_complete(coro) - - def list(self, page: int = 1, per_page: int = 20, search: Optional[str] = None): - """List users synchronously.""" - return self._run_async(self._async_resource.list(page, per_page, search)) - - def get(self, user_id: str): - """Get user synchronously.""" - return self._run_async(self._async_resource.get(user_id)) - - def create(self, user_data): - """Create user synchronously.""" - return self._run_async(self._async_resource.create(user_data)) - - def update(self, user_id: str, user_data): - """Update user synchronously.""" - return self._run_async(self._async_resource.update(user_id, user_data)) - - def delete(self, user_id: str): - """Delete user synchronously.""" - return self._run_async(self._async_resource.delete(user_id)) - - def search(self, query: str, limit: int = 10): - """Search users synchronously.""" - return self._run_async(self._async_resource.search(query, limit)) - - -class SyncProjectsResource: - """Synchronous wrapper for projects resource.""" - - def __init__(self, async_resource: ProjectsResource): - self._async_resource = async_resource - self._client = async_resource._client - - def _run_async(self, coro): - try: - loop = asyncio.get_event_loop() - except RuntimeError: - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - return loop.run_until_complete(coro) - - def list( - self, - workspace_slug: str, - page: int = 1, - per_page: int = 20, - search: Optional[str] = None, - ): - return self._run_async( - self._async_resource.list(workspace_slug, page, per_page, search) - ) - - def get(self, workspace_slug: str, project_id: str): - return self._run_async(self._async_resource.get(workspace_slug, project_id)) - - def create(self, workspace_slug: str, project_data): - return self._run_async( - self._async_resource.create(workspace_slug, project_data) - ) - - def update(self, workspace_slug: str, project_id: str, project_data): - return self._run_async( - self._async_resource.update(workspace_slug, project_id, project_data) - ) - - def delete(self, workspace_slug: str, project_id: str): - return self._run_async(self._async_resource.delete(workspace_slug, project_id)) diff --git a/src/plane/config.py b/src/plane/config.py deleted file mode 100644 index 1a0e5a8..0000000 --- a/src/plane/config.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Configuration management for the API SDK.""" - -import os -from typing import Optional -from dataclasses import dataclass - - -@dataclass -class Config: - """Configuration class for the API client.""" - - api_key: str - base_url: str = "https://api.plane.so/api/v1" - timeout: int = 30 - max_retries: int = 3 - retry_delay: float = 1.0 - user_agent: Optional[str] = None - - def __post_init__(self): - """Validate configuration after initialization.""" - if not self.api_key: - raise ValueError("API key is required") - - if not self.user_agent: - self.user_agent = f"plane-sdk/1.0.0" - - @classmethod - def from_env(cls, **kwargs) -> "Config": - """Create configuration from environment variables.""" - api_key = os.getenv("PLANE_API_KEY") - if not api_key: - raise ValueError("PLANE_API_KEY environment variable is required") - - base_url = os.getenv("MY_API_BASE_URL", "https://api.example.com/v1") - timeout = int(os.getenv("MY_API_TIMEOUT", "30")) - max_retries = int(os.getenv("MY_API_MAX_RETRIES", "3")) - - return cls( - api_key=api_key, - base_url=base_url, - timeout=timeout, - max_retries=max_retries, - **kwargs, - ) diff --git a/src/plane/exceptions.py b/src/plane/exceptions.py deleted file mode 100644 index 397044d..0000000 --- a/src/plane/exceptions.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Custom exceptions for the Plane SDK.""" - -from typing import Optional, Dict, Any - - -class PlaneError(Exception): - """Base exception for all API errors.""" - - def __init__( - self, - message: str, - status_code: Optional[int] = None, - response_data: Optional[Dict[str, Any]] = None, - ): - super().__init__(message) - self.message = message - self.status_code = status_code - self.response_data = response_data or {} - - def __str__(self) -> str: - if self.status_code: - return f"[{self.status_code}] {self.message}" - return self.message - - -class AuthenticationError(PlaneError): - """Raised when authentication fails (401).""" - - pass - - -class AuthorizationError(PlaneError): - """Raised when authorization fails (403).""" - - pass - - -class NotFoundError(PlaneError): - """Raised when a resource is not found (404).""" - - pass - - -class ValidationError(PlaneError): - """Raised when request validation fails (422).""" - - pass - - -class RateLimitError(PlaneError): - """Raised when rate limit is exceeded (429).""" - - def __init__(self, message: str, retry_after: Optional[int] = None, **kwargs): - super().__init__(message, **kwargs) - self.retry_after = retry_after - - -class ServerError(PlaneError): - """Raised when server errors occur (5xx).""" - - pass - - -class TimeoutError(PlaneError): - """Raised when request times out.""" - - pass - - -class ConnectionError(PlaneError): - """Raised when connection fails.""" - - pass diff --git a/src/plane/models/__init__.py b/src/plane/models/__init__.py deleted file mode 100644 index 862a9d9..0000000 --- a/src/plane/models/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Models package.""" - -from .base import BaseAPIModel, TimestampMixin, PaginatedResponse -from .workspace import Workspace, WorkspaceUpdate - -__all__ = [ - "BaseAPIModel", - "TimestampMixin", - "PaginatedResponse", - "Workspace", - "WorkspaceUpdate", -] diff --git a/src/plane/models/base.py b/src/plane/models/base.py deleted file mode 100644 index 6d0bfa3..0000000 --- a/src/plane/models/base.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Base model classes.""" - -from typing import Dict, Any, Optional -from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field - - -class BaseAPIModel(BaseModel): - """Base model for all API response models.""" - - model_config = ConfigDict( - str_strip_whitespace=True, - validate_assignment=True, - extra="forbid", - populate_by_name=True, - ) - - def to_dict(self) -> Dict[str, Any]: - """Convert model to dictionary.""" - return self.model_dump(by_alias=True, exclude_none=True) - - @classmethod - def from_dict(cls, data: Dict[str, Any]) -> "BaseAPIModel": - """Create model from dictionary.""" - return cls(**data) - - -class TimestampMixin(BaseModel): - """Mixin for models with timestamp fields.""" - - created_at: Optional[datetime] = Field(None, alias="createdAt") - updated_at: Optional[datetime] = Field(None, alias="updatedAt") - - -class PaginatedResponse(BaseAPIModel): - """Model for paginated API responses.""" - - page: int = 1 - per_page: int = Field(default=20, alias="perPage") - total: int - total_pages: int = Field(alias="totalPages") - has_next: bool = Field(alias="hasNext") - has_prev: bool = Field(alias="hasPrev") diff --git a/src/plane/models/project.py b/src/plane/models/project.py deleted file mode 100644 index 645486c..0000000 --- a/src/plane/models/project.py +++ /dev/null @@ -1,100 +0,0 @@ -from typing import Optional -from pydantic import Field -from .base import BaseAPIModel, TimestampMixin - - -class Project(BaseAPIModel, TimestampMixin): - """Project model.""" - - id: str - name: str - description: Optional[str] = None - description_text: Optional[str] = None - description_html: Optional[str] = None - network: Optional[int] = Field(default=2) - workspace: str - identifier: str - default_assignee: Optional[str] = None - project_lead: Optional[str] = None - emoji: Optional[str] = None - icon_prop: Optional[str] = None - module_view: Optional[bool] = Field(default=True) - cycle_view: Optional[bool] = Field(default=True) - issue_views_view: Optional[bool] = Field(default=True) - page_view: Optional[bool] = Field(default=True) - intake_view: Optional[bool] = Field(default=False) - is_time_tracking_enabled: Optional[bool] = Field(default=False) - is_issue_type_enabled: Optional[bool] = Field(default=False) - guest_view_all_features: Optional[bool] = Field(default=False) - cover_image: Optional[str] = None - cover_image_asset: Optional[str] = None - estimate: Optional[str] = None - archive_in: Optional[int] = Field(default=0) - close_in: Optional[int] = Field(default=0) - logo_props: Optional[str] = None - default_state: Optional[str] = None - archived_at: Optional[str] = None - timezone: Optional[str] = Field(default="UTC") - - -class ProjectCreate(BaseAPIModel): - """Project create model.""" - - name: str - description: Optional[str] = None - description_text: Optional[str] = None - description_html: Optional[str] = None - network: Optional[int] = Field(default=2) - workspace: str - identifier: str - - -class ProjectUpdate(BaseAPIModel): - """Project update model.""" - - name: Optional[str] = None - description: Optional[str] = None - description_text: Optional[str] = None - description_html: Optional[str] = None - network: Optional[int] = Field(default=2) - workspace: Optional[str] = None - identifier: Optional[str] = None - default_assignee: Optional[str] = None - project_lead: Optional[str] = None - emoji: Optional[str] = None - icon_prop: Optional[str] = None - module_view: Optional[bool] = Field(default=True) - cycle_view: Optional[bool] = Field(default=True) - issue_views_view: Optional[bool] = Field(default=True) - page_view: Optional[bool] = Field(default=True) - intake_view: Optional[bool] = Field(default=False) - is_time_tracking_enabled: Optional[bool] = Field(default=False) - is_issue_type_enabled: Optional[bool] = Field(default=False) - guest_view_all_features: Optional[bool] = Field(default=False) - cover_image: Optional[str] = None - cover_image_asset: Optional[str] = None - estimate: Optional[str] = None - archive_in: Optional[int] = Field(default=0) - close_in: Optional[int] = Field(default=0) - logo_props: Optional[str] = None - default_state: Optional[str] = None - archived_at: Optional[str] = None - timezone: Optional[str] = Field(default="UTC") - - -class ProjectDelete(BaseAPIModel): - """Project delete model.""" - - id: str - - -class ProjectArchive(BaseAPIModel): - """Project archive model.""" - - id: str - - -class ProjectUnarchive(BaseAPIModel): - """Project unarchive model.""" - - id: str diff --git a/src/plane/models/workspace.py b/src/plane/models/workspace.py deleted file mode 100644 index 7bf0280..0000000 --- a/src/plane/models/workspace.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Optional -from pydantic import Field -from .base import BaseAPIModel, TimestampMixin - - -class Workspace(BaseAPIModel, TimestampMixin): - """Workspace model.""" - - id: str - name: str - logo: Optional[str] = None - logo_asset: Optional[str] = None - owner: str - slug: str - organization_size: Optional[str] = None - timezone: str = Field(default="UTC") - - -class WorkspaceUpdate(BaseAPIModel): - """Model for creating a workspace.""" - - name: str - logo: Optional[str] = None - logo_asset: Optional[str] = None - organization_size: Optional[str] = None - timezone: str = Field(default="UTC") diff --git a/src/plane/resources/__init__.py b/src/plane/resources/__init__.py deleted file mode 100644 index f164c32..0000000 --- a/src/plane/resources/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Resources package.""" - -from .base import BaseResource -from .workspaces import WorkspacesResource -from .projects import ProjectsResource - -__all__ = [ - "BaseResource", - "WorkspacesResource", - "ProjectsResource", -] diff --git a/src/plane/resources/base.py b/src/plane/resources/base.py deleted file mode 100644 index d99b41e..0000000 --- a/src/plane/resources/base.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Base resource class.""" - -from typing import Any, Dict, Optional, Type, TypeVar, Generic, List -import httpx -from ..exceptions import ( - PlaneError, - AuthenticationError, - AuthorizationError, - NotFoundError, - ValidationError, - RateLimitError, - ServerError, - TimeoutError, - ConnectionError, -) -from ..models.base import BaseAPIModel -from ..client import Client - -T = TypeVar("T", bound=BaseAPIModel) - - -class BaseResource(Generic[T]): - """Base class for API resources.""" - - def __init__(self, client: Client): - self._client = client - self._http_client = client._http_client - - def _handle_response(self, response: httpx.Response) -> Dict[str, Any]: - """Handle HTTP response and raise appropriate exceptions.""" - try: - data = response.json() - except Exception: - data = {"message": response.text} - - if response.is_success: - return data - - message = data.get("message", f"HTTP {response.status_code}") - - if response.status_code == 401: - raise AuthenticationError(message, response.status_code, data) - elif response.status_code == 403: - raise AuthorizationError(message, response.status_code, data) - elif response.status_code == 404: - raise NotFoundError(message, response.status_code, data) - elif response.status_code == 422: - raise ValidationError(message, response.status_code, data) - elif response.status_code == 429: - retry_after = response.headers.get("Retry-After") - retry_after_int = int(retry_after) if retry_after else None - raise RateLimitError(message, retry_after_int, response.status_code, data) - elif response.status_code >= 500: - raise ServerError(message, response.status_code, data) - else: - raise PlaneError(message, response.status_code, data) - - async def _request( - self, - method: str, - endpoint: str, - data: Optional[Dict[str, Any]] = None, - params: Optional[Dict[str, Any]] = None, - **kwargs, - ) -> Dict[str, Any]: - """Make HTTP request.""" - url = f"{self._client.config.base_url.rstrip('/')}/{endpoint.lstrip('/')}" - - try: - response = await self._http_client.request( - method=method, url=url, json=data, params=params, **kwargs - ) - return self._handle_response(response) - except httpx.TimeoutException as e: - raise TimeoutError(f"Request timed out: {str(e)}") - except httpx.ConnectError as e: - raise ConnectionError(f"Connection failed: {str(e)}") - except httpx.HTTPError as e: - raise PlaneError(f"HTTP error: {str(e)}") diff --git a/src/plane/resources/projects.py b/src/plane/resources/projects.py deleted file mode 100644 index ded6acc..0000000 --- a/src/plane/resources/projects.py +++ /dev/null @@ -1,69 +0,0 @@ -from typing import List, Optional, Dict, Any -from .base import BaseResource -from ..models.project import Project, ProjectCreate, ProjectUpdate -from ..models.base import PaginatedResponse - - -class ProjectsResource(BaseResource[Project]): - """Resource for managing projects.""" - - async def list( - self, - workspace_slug: str, - page: int = 1, - per_page: int = 20, - search: Optional[str] = None, - ) -> Dict[str, Any]: - """List projects in a workspace with pagination.""" - params = { - "page": page, - "per_page": per_page, - } - if search: - params["search"] = search - - response = await self._request( - "GET", f"api/v1/workspaces/{workspace_slug}/projects/", params=params - ) - - projects_data = response.get("data", []) or response.get("results", []) - projects = [Project.from_dict(project_data) for project_data in projects_data] - pagination = PaginatedResponse.from_dict( - response.get("pagination", {}) or response - ) - - return {"projects": projects, "pagination": pagination} - - async def get(self, workspace_slug: str, project_id: str) -> Project: - """Get a project by ID.""" - response = await self._request( - "GET", f"api/v1/workspaces/{workspace_slug}/projects/{project_id}/" - ) - return Project.from_dict(response) - - async def create(self, workspace_slug: str, project_data: ProjectCreate) -> Project: - """Create a new project in a workspace.""" - response = await self._request( - "POST", - f"api/v1/workspaces/{workspace_slug}/projects/", - data=project_data.to_dict(), - ) - return Project.from_dict(response) - - async def update( - self, workspace_slug: str, project_id: str, project_data: ProjectUpdate - ) -> Project: - """Update a project in a workspace.""" - response = await self._request( - "PATCH", - f"api/v1/workspaces/{workspace_slug}/projects/{project_id}/", - data=project_data.to_dict(), - ) - return Project.from_dict(response) - - async def delete(self, workspace_slug: str, project_id: str) -> bool: - """Delete a project in a workspace.""" - await self._request( - "DELETE", f"api/v1/workspaces/{workspace_slug}/projects/{project_id}/" - ) - return True diff --git a/src/plane/resources/workspaces.py b/src/plane/resources/workspaces.py deleted file mode 100644 index a77e402..0000000 --- a/src/plane/resources/workspaces.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Users resource.""" - -from typing import List, Optional, Dict, Any -from .base import BaseResource -from ..models.workspace import Workspace, WorkspaceUpdate -from ..models.base import PaginatedResponse - - -class WorkspacesResource(BaseResource[Workspace]): - """Resource for managing users.""" - - async def list( - self, page: int = 1, per_page: int = 20, search: Optional[str] = None - ) -> Dict[str, Any]: - """List users with pagination.""" - params = { - "page": page, - "per_page": per_page, - } - if search: - params["search"] = search - - response = await self._request("GET", "workspaces", params=params) - - # Parse users - workspaces_data = response.get("data", []) - workspaces = [ - Workspace.from_dict(workspace_data) for workspace_data in workspaces_data - ] - - # Parse pagination - pagination = PaginatedResponse.from_dict(response.get("pagination", {})) - - return {"workspaces": workspaces, "pagination": pagination} - - async def get(self, workspace_id: str) -> Workspace: - """Get a user by ID.""" - response = await self._request("GET", f"workspaces/{workspace_id}") - return Workspace.from_dict(response) - - async def create(self, workspace_data: WorkspaceUpdate) -> Workspace: - """Create a new user.""" - response = await self._request( - "POST", "workspaces", data=workspace_data.to_dict() - ) - return Workspace.from_dict(response) - - async def update( - self, workspace_id: str, workspace_data: WorkspaceUpdate - ) -> Workspace: - """Update a user.""" - response = await self._request( - "PATCH", f"workspaces/{workspace_id}", data=workspace_data.to_dict() - ) - return Workspace.from_dict(response) - - async def delete(self, workspace_id: str) -> bool: - """Delete a user.""" - await self._request("DELETE", f"workspaces/{workspace_id}") - return True - - async def search(self, query: str, limit: int = 10) -> List[Workspace]: - """Search users.""" - params = {"q": query, "limit": limit} - response = await self._request("GET", "workspaces/search", params=params) - - workspaces_data = response.get("workspaces", []) - return [ - Workspace.from_dict(workspace_data) for workspace_data in workspaces_data - ] diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..3a0d0b9 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +pytest~=7.1.3 +pytest-cov>=2.8.1 +pytest-randomly>=3.12.0 diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_add_cycle_issues_request.py b/test/test_add_cycle_issues_request.py new file mode 100644 index 0000000..b994ba9 --- /dev/null +++ b/test/test_add_cycle_issues_request.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.add_cycle_issues_request import AddCycleIssuesRequest # noqa: E501 + +class TestAddCycleIssuesRequest(unittest.TestCase): + """AddCycleIssuesRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> AddCycleIssuesRequest: + """Test AddCycleIssuesRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `AddCycleIssuesRequest` + """ + model = AddCycleIssuesRequest() # noqa: E501 + if include_optional: + return AddCycleIssuesRequest( + issues = [ + '' + ] + ) + else: + return AddCycleIssuesRequest( + ) + """ + + def testAddCycleIssuesRequest(self): + """Test AddCycleIssuesRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_assets_api.py b/test/test_assets_api.py new file mode 100644 index 0000000..9e1df8a --- /dev/null +++ b/test/test_assets_api.py @@ -0,0 +1,157 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.assets_api import AssetsApi # noqa: E501 + + +class TestAssetsApi(unittest.TestCase): + """AssetsApi unit test stubs""" + + def setUp(self) -> None: + self.api = AssetsApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_create_generic_asset_upload(self) -> None: + """Test case for create_generic_asset_upload + + Create Assets # noqa: E501 + """ + pass + + def test_create_generic_asset_upload2(self) -> None: + """Test case for create_generic_asset_upload2 + + Create Assets # noqa: E501 + """ + pass + + def test_create_user_asset_upload(self) -> None: + """Test case for create_user_asset_upload + + Create User Assets # noqa: E501 + """ + pass + + def test_create_user_asset_upload2(self) -> None: + """Test case for create_user_asset_upload2 + + Create User Assets # noqa: E501 + """ + pass + + def test_create_user_server_asset_upload(self) -> None: + """Test case for create_user_server_asset_upload + + Create Server # noqa: E501 + """ + pass + + def test_create_user_server_asset_upload2(self) -> None: + """Test case for create_user_server_asset_upload2 + + Create Server # noqa: E501 + """ + pass + + def test_delete_user_asset(self) -> None: + """Test case for delete_user_asset + + Delete User Assets # noqa: E501 + """ + pass + + def test_delete_user_asset2(self) -> None: + """Test case for delete_user_asset2 + + Delete User Assets # noqa: E501 + """ + pass + + def test_delete_user_server_asset(self) -> None: + """Test case for delete_user_server_asset + + Delete Server # noqa: E501 + """ + pass + + def test_delete_user_server_asset2(self) -> None: + """Test case for delete_user_server_asset2 + + Delete Server # noqa: E501 + """ + pass + + def test_get_generic_asset(self) -> None: + """Test case for get_generic_asset + + Retrieve Assets # noqa: E501 + """ + pass + + def test_get_generic_asset2(self) -> None: + """Test case for get_generic_asset2 + + Retrieve Assets # noqa: E501 + """ + pass + + def test_update_generic_asset(self) -> None: + """Test case for update_generic_asset + + Update Assets # noqa: E501 + """ + pass + + def test_update_generic_asset2(self) -> None: + """Test case for update_generic_asset2 + + Update Assets # noqa: E501 + """ + pass + + def test_update_user_asset(self) -> None: + """Test case for update_user_asset + + Update User Assets # noqa: E501 + """ + pass + + def test_update_user_asset2(self) -> None: + """Test case for update_user_asset2 + + Update User Assets # noqa: E501 + """ + pass + + def test_update_user_server_asset(self) -> None: + """Test case for update_user_server_asset + + Update Server # noqa: E501 + """ + pass + + def test_update_user_server_asset2(self) -> None: + """Test case for update_user_server_asset2 + + Update Server # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_cycle_request.py b/test/test_create_cycle_request.py new file mode 100644 index 0000000..8fe5261 --- /dev/null +++ b/test/test_create_cycle_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_cycle_request import CreateCycleRequest # noqa: E501 + +class TestCreateCycleRequest(unittest.TestCase): + """CreateCycleRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateCycleRequest: + """Test CreateCycleRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateCycleRequest` + """ + model = CreateCycleRequest() # noqa: E501 + if include_optional: + return CreateCycleRequest( + name = 'Cycle 1', + description = 'This is a cycle description', + start_date = '2025-01-01T00:00Z', + end_date = '2025-01-01T00:00Z' + ) + else: + return CreateCycleRequest( + name = 'Cycle 1', + ) + """ + + def testCreateCycleRequest(self): + """Test CreateCycleRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_intake_issue_request.py b/test/test_create_intake_issue_request.py new file mode 100644 index 0000000..33c0e82 --- /dev/null +++ b/test/test_create_intake_issue_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_intake_issue_request import CreateIntakeIssueRequest # noqa: E501 + +class TestCreateIntakeIssueRequest(unittest.TestCase): + """CreateIntakeIssueRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateIntakeIssueRequest: + """Test CreateIntakeIssueRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateIntakeIssueRequest` + """ + model = CreateIntakeIssueRequest() # noqa: E501 + if include_optional: + return CreateIntakeIssueRequest( + issue = plane.models.create_intake_issue_request_issue.create_intake_issue_request_issue( + issue = plane.models.create_intake_issue_request_issue_issue.create_intake_issue_request_issue_issue( + name = 'Issue 1', + description_html = '

This is an issue description

', + priority = 'low', ), ) + ) + else: + return CreateIntakeIssueRequest( + ) + """ + + def testCreateIntakeIssueRequest(self): + """Test CreateIntakeIssueRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_intake_issue_request_issue.py b/test/test_create_intake_issue_request_issue.py new file mode 100644 index 0000000..46122ad --- /dev/null +++ b/test/test_create_intake_issue_request_issue.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_intake_issue_request_issue import CreateIntakeIssueRequestIssue # noqa: E501 + +class TestCreateIntakeIssueRequestIssue(unittest.TestCase): + """CreateIntakeIssueRequestIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateIntakeIssueRequestIssue: + """Test CreateIntakeIssueRequestIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateIntakeIssueRequestIssue` + """ + model = CreateIntakeIssueRequestIssue() # noqa: E501 + if include_optional: + return CreateIntakeIssueRequestIssue( + issue = plane.models.create_intake_issue_request_issue_issue.create_intake_issue_request_issue_issue( + name = 'Issue 1', + description_html = '

This is an issue description

', + priority = 'low', ) + ) + else: + return CreateIntakeIssueRequestIssue( + ) + """ + + def testCreateIntakeIssueRequestIssue(self): + """Test CreateIntakeIssueRequestIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_intake_issue_request_issue_issue.py b/test/test_create_intake_issue_request_issue_issue.py new file mode 100644 index 0000000..8f57f8f --- /dev/null +++ b/test/test_create_intake_issue_request_issue_issue.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_intake_issue_request_issue_issue import CreateIntakeIssueRequestIssueIssue # noqa: E501 + +class TestCreateIntakeIssueRequestIssueIssue(unittest.TestCase): + """CreateIntakeIssueRequestIssueIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateIntakeIssueRequestIssueIssue: + """Test CreateIntakeIssueRequestIssueIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateIntakeIssueRequestIssueIssue` + """ + model = CreateIntakeIssueRequestIssueIssue() # noqa: E501 + if include_optional: + return CreateIntakeIssueRequestIssueIssue( + name = 'Issue 1', + description_html = '

This is an issue description

', + priority = 'low' + ) + else: + return CreateIntakeIssueRequestIssueIssue( + ) + """ + + def testCreateIntakeIssueRequestIssueIssue(self): + """Test CreateIntakeIssueRequestIssueIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_issue_comment_request.py b/test/test_create_issue_comment_request.py new file mode 100644 index 0000000..853d5f5 --- /dev/null +++ b/test/test_create_issue_comment_request.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_issue_comment_request import CreateIssueCommentRequest # noqa: E501 + +class TestCreateIssueCommentRequest(unittest.TestCase): + """CreateIssueCommentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateIssueCommentRequest: + """Test CreateIssueCommentRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateIssueCommentRequest` + """ + model = CreateIssueCommentRequest() # noqa: E501 + if include_optional: + return CreateIssueCommentRequest( + comment_html = '' + ) + else: + return CreateIssueCommentRequest( + comment_html = '', + ) + """ + + def testCreateIssueCommentRequest(self): + """Test CreateIssueCommentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_issue_link_request.py b/test/test_create_issue_link_request.py new file mode 100644 index 0000000..650e3e9 --- /dev/null +++ b/test/test_create_issue_link_request.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_issue_link_request import CreateIssueLinkRequest # noqa: E501 + +class TestCreateIssueLinkRequest(unittest.TestCase): + """CreateIssueLinkRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateIssueLinkRequest: + """Test CreateIssueLinkRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateIssueLinkRequest` + """ + model = CreateIssueLinkRequest() # noqa: E501 + if include_optional: + return CreateIssueLinkRequest( + url = '', + title = '', + metadata = None + ) + else: + return CreateIssueLinkRequest( + url = '', + title = '', + metadata = None, + ) + """ + + def testCreateIssueLinkRequest(self): + """Test CreateIssueLinkRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_label_request.py b/test/test_create_label_request.py new file mode 100644 index 0000000..67e4b71 --- /dev/null +++ b/test/test_create_label_request.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_label_request import CreateLabelRequest # noqa: E501 + +class TestCreateLabelRequest(unittest.TestCase): + """CreateLabelRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateLabelRequest: + """Test CreateLabelRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateLabelRequest` + """ + model = CreateLabelRequest() # noqa: E501 + if include_optional: + return CreateLabelRequest( + name = '', + color = '', + description = '' + ) + else: + return CreateLabelRequest( + name = '', + color = '', + description = '', + ) + """ + + def testCreateLabelRequest(self): + """Test CreateLabelRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_module_request.py b/test/test_create_module_request.py new file mode 100644 index 0000000..4991c1d --- /dev/null +++ b/test/test_create_module_request.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_module_request import CreateModuleRequest # noqa: E501 + +class TestCreateModuleRequest(unittest.TestCase): + """CreateModuleRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateModuleRequest: + """Test CreateModuleRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateModuleRequest` + """ + model = CreateModuleRequest() # noqa: E501 + if include_optional: + return CreateModuleRequest( + name = 'Module 1', + description = 'This is a module description', + start_date = '2025-01-01T00:00Z', + target_date = '2025-01-01T00:00Z', + status = 'planned', + lead = '123e4567-e89b-12d3-a456-426614174000', + members = [ + '' + ] + ) + else: + return CreateModuleRequest( + ) + """ + + def testCreateModuleRequest(self): + """Test CreateModuleRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_project_request.py b/test/test_create_project_request.py new file mode 100644 index 0000000..7db9aca --- /dev/null +++ b/test/test_create_project_request.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_project_request import CreateProjectRequest # noqa: E501 + +class TestCreateProjectRequest(unittest.TestCase): + """CreateProjectRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateProjectRequest: + """Test CreateProjectRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateProjectRequest` + """ + model = CreateProjectRequest() # noqa: E501 + if include_optional: + return CreateProjectRequest( + name = 'Project 1', + identifier = 'project-1', + description = 'This is a project description', + project_lead = '123e4567-e89b-12d3-a456-426614174000', + intake_view = False, + module_view = True, + cycle_view = True, + issue_views_view = True, + page_view = True, + network = 2 + ) + else: + return CreateProjectRequest( + ) + """ + + def testCreateProjectRequest(self): + """Test CreateProjectRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_create_state_request.py b/test/test_create_state_request.py new file mode 100644 index 0000000..3be4058 --- /dev/null +++ b/test/test_create_state_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.create_state_request import CreateStateRequest # noqa: E501 + +class TestCreateStateRequest(unittest.TestCase): + """CreateStateRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateStateRequest: + """Test CreateStateRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateStateRequest` + """ + model = CreateStateRequest() # noqa: E501 + if include_optional: + return CreateStateRequest( + name = 'State 1', + description = 'This is a state description', + color = '#000000', + group = 'backlog', + default = False + ) + else: + return CreateStateRequest( + ) + """ + + def testCreateStateRequest(self): + """Test CreateStateRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_cycle.py b/test/test_cycle.py new file mode 100644 index 0000000..ce36ceb --- /dev/null +++ b/test/test_cycle.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.cycle import Cycle # noqa: E501 + +class TestCycle(unittest.TestCase): + """Cycle unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Cycle: + """Test Cycle + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Cycle` + """ + model = Cycle() # noqa: E501 + if include_optional: + return Cycle( + id = '', + total_issues = 56, + cancelled_issues = 56, + completed_issues = 56, + started_issues = 56, + unstarted_issues = 56, + backlog_issues = 56, + total_estimates = 1.337, + completed_estimates = 1.337, + started_estimates = 1.337, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + view_props = None, + sort_order = 1.337, + external_source = '', + external_id = '', + progress_snapshot = None, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = None, + timezone = 'Africa/Abidjan', + version = -2147483648, + created_by = '', + updated_by = '', + project = '', + workspace = '', + owned_by = '' + ) + else: + return Cycle( + id = '', + total_issues = 56, + cancelled_issues = 56, + completed_issues = 56, + started_issues = 56, + unstarted_issues = 56, + backlog_issues = 56, + total_estimates = 1.337, + completed_estimates = 1.337, + started_estimates = 1.337, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + owned_by = '', + ) + """ + + def testCycle(self): + """Test Cycle""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_cycle_issue.py b/test/test_cycle_issue.py new file mode 100644 index 0000000..d988f25 --- /dev/null +++ b/test/test_cycle_issue.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.cycle_issue import CycleIssue # noqa: E501 + +class TestCycleIssue(unittest.TestCase): + """CycleIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CycleIssue: + """Test CycleIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CycleIssue` + """ + model = CycleIssue() # noqa: E501 + if include_optional: + return CycleIssue( + id = '', + sub_issues_count = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + issue = '', + cycle = '' + ) + else: + return CycleIssue( + id = '', + sub_issues_count = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + project = '', + workspace = '', + issue = '', + cycle = '', + ) + """ + + def testCycleIssue(self): + """Test CycleIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_cycle_lite.py b/test/test_cycle_lite.py new file mode 100644 index 0000000..bd2a655 --- /dev/null +++ b/test/test_cycle_lite.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.cycle_lite import CycleLite # noqa: E501 + +class TestCycleLite(unittest.TestCase): + """CycleLite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CycleLite: + """Test CycleLite + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CycleLite` + """ + model = CycleLite() # noqa: E501 + if include_optional: + return CycleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + view_props = None, + sort_order = 1.337, + external_source = '', + external_id = '', + progress_snapshot = None, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = None, + timezone = 'Africa/Abidjan', + version = -2147483648, + created_by = '', + updated_by = '', + project = '', + workspace = '', + owned_by = '' + ) + else: + return CycleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + project = '', + workspace = '', + owned_by = '', + ) + """ + + def testCycleLite(self): + """Test CycleLite""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_cycles_api.py b/test/test_cycles_api.py new file mode 100644 index 0000000..ca1ec84 --- /dev/null +++ b/test/test_cycles_api.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.cycles_api import CyclesApi # noqa: E501 + + +class TestCyclesApi(unittest.TestCase): + """CyclesApi unit test stubs""" + + def setUp(self) -> None: + self.api = CyclesApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_add_cycle_issues(self) -> None: + """Test case for add_cycle_issues + + Add cycle issues # noqa: E501 + """ + pass + + def test_archive_cycle(self) -> None: + """Test case for archive_cycle + + Archive cycle # noqa: E501 + """ + pass + + def test_archive_cycle2(self) -> None: + """Test case for archive_cycle2 + + Archive cycle # noqa: E501 + """ + pass + + def test_create_cycle(self) -> None: + """Test case for create_cycle + + Create cycle # noqa: E501 + """ + pass + + def test_delete_cycle(self) -> None: + """Test case for delete_cycle + + Delete cycle # noqa: E501 + """ + pass + + def test_delete_cycle_issue(self) -> None: + """Test case for delete_cycle_issue + + Delete cycle issue # noqa: E501 + """ + pass + + def test_get_cycle_issues(self) -> None: + """Test case for get_cycle_issues + + Get cycle issues # noqa: E501 + """ + pass + + def test_get_cycle_issues2(self) -> None: + """Test case for get_cycle_issues2 + + Get cycle issues # noqa: E501 + """ + pass + + def test_get_cycles(self) -> None: + """Test case for get_cycles + + Get cycles # noqa: E501 + """ + pass + + def test_get_cycles2(self) -> None: + """Test case for get_cycles2 + + Get cycles # noqa: E501 + """ + pass + + def test_transfer_cycle_issues(self) -> None: + """Test case for transfer_cycle_issues + + Transfer issues to a new cycle # noqa: E501 + """ + pass + + def test_unarchive_cycle(self) -> None: + """Test case for unarchive_cycle + + Unarchive cycle # noqa: E501 + """ + pass + + def test_update_cycle(self) -> None: + """Test case for update_cycle + + Update cycle # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_general_api.py b/test/test_general_api.py new file mode 100644 index 0000000..5f7bbf3 --- /dev/null +++ b/test/test_general_api.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.general_api import GeneralApi # noqa: E501 + + +class TestGeneralApi(unittest.TestCase): + """GeneralApi unit test stubs""" + + def setUp(self) -> None: + self.api = GeneralApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_search_issues(self) -> None: + """Test case for search_issues + + Search issues # noqa: E501 + """ + pass + + def test_workspaces_issues_retrieve(self) -> None: + """Test case for workspaces_issues_retrieve + + Retrieve Issues # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_generic_asset_upload.py b/test/test_generic_asset_upload.py new file mode 100644 index 0000000..3487447 --- /dev/null +++ b/test/test_generic_asset_upload.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.generic_asset_upload import GenericAssetUpload # noqa: E501 + +class TestGenericAssetUpload(unittest.TestCase): + """GenericAssetUpload unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GenericAssetUpload: + """Test GenericAssetUpload + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GenericAssetUpload` + """ + model = GenericAssetUpload() # noqa: E501 + if include_optional: + return GenericAssetUpload( + name = '', + type = '', + size = 56, + project_id = '', + external_id = '', + external_source = '' + ) + else: + return GenericAssetUpload( + name = '', + size = 56, + ) + """ + + def testGenericAssetUpload(self): + """Test GenericAssetUpload""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_get_issue_attachment2_request.py b/test/test_get_issue_attachment2_request.py new file mode 100644 index 0000000..dcf7959 --- /dev/null +++ b/test/test_get_issue_attachment2_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.get_issue_attachment2_request import GetIssueAttachment2Request # noqa: E501 + +class TestGetIssueAttachment2Request(unittest.TestCase): + """GetIssueAttachment2Request unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetIssueAttachment2Request: + """Test GetIssueAttachment2Request + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetIssueAttachment2Request` + """ + model = GetIssueAttachment2Request() # noqa: E501 + if include_optional: + return GetIssueAttachment2Request( + name = '', + type = '', + size = 56, + external_id = '', + external_source = '' + ) + else: + return GetIssueAttachment2Request( + ) + """ + + def testGetIssueAttachment2Request(self): + """Test GetIssueAttachment2Request""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_get_workspace_members200_response_inner.py b/test/test_get_workspace_members200_response_inner.py new file mode 100644 index 0000000..88563c8 --- /dev/null +++ b/test/test_get_workspace_members200_response_inner.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.get_workspace_members200_response_inner import GetWorkspaceMembers200ResponseInner # noqa: E501 + +class TestGetWorkspaceMembers200ResponseInner(unittest.TestCase): + """GetWorkspaceMembers200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetWorkspaceMembers200ResponseInner: + """Test GetWorkspaceMembers200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetWorkspaceMembers200ResponseInner` + """ + model = GetWorkspaceMembers200ResponseInner() # noqa: E501 + if include_optional: + return GetWorkspaceMembers200ResponseInner( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '', + role = 56 + ) + else: + return GetWorkspaceMembers200ResponseInner( + id = '', + first_name = '', + last_name = '', + email = '', + display_name = '', + ) + """ + + def testGetWorkspaceMembers200ResponseInner(self): + """Test GetWorkspaceMembers200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_intake_api.py b/test/test_intake_api.py new file mode 100644 index 0000000..7b3e6cc --- /dev/null +++ b/test/test_intake_api.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.intake_api import IntakeApi # noqa: E501 + + +class TestIntakeApi(unittest.TestCase): + """IntakeApi unit test stubs""" + + def setUp(self) -> None: + self.api = IntakeApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_create_intake_issue(self) -> None: + """Test case for create_intake_issue + + Create intake issue # noqa: E501 + """ + pass + + def test_delete_intake_issue(self) -> None: + """Test case for delete_intake_issue + + Delete intake issue # noqa: E501 + """ + pass + + def test_get_intake_issues(self) -> None: + """Test case for get_intake_issues + + Get intake issues # noqa: E501 + """ + pass + + def test_get_intake_issues2(self) -> None: + """Test case for get_intake_issues2 + + Get intake issues # noqa: E501 + """ + pass + + def test_update_intake_issue(self) -> None: + """Test case for update_intake_issue + + Update intake issue # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_intake_issue.py b/test/test_intake_issue.py new file mode 100644 index 0000000..4980c68 --- /dev/null +++ b/test/test_intake_issue.py @@ -0,0 +1,174 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.intake_issue import IntakeIssue # noqa: E501 + +class TestIntakeIssue(unittest.TestCase): + """IntakeIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IntakeIssue: + """Test IntakeIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IntakeIssue` + """ + model = IntakeIssue() # noqa: E501 + if include_optional: + return IntakeIssue( + id = '', + issue_detail = plane.models.issue_expand.IssueExpand( + id = '', + cycle = null, + module = null, + labels = [ + plane.models.label_lite.LabelLite( + id = '', + name = '', + color = '', ) + ], + assignees = [ + plane.models.user_lite.UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '', ) + ], + state = null, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + point = 0, + name = '', + description = null, + description_html = '', + description_stripped = '', + description_binary = 'YQ==', + priority = 'urgent', + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + sequence_id = -2147483648, + sort_order = 1.337, + completed_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + archived_at = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + is_draft = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + parent = '', + estimate_point = '', + type = '', ), + inbox = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + status = -2, + snoozed_till = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + source = '', + source_email = '', + external_source = '', + external_id = '', + extra = None, + created_by = '', + updated_by = '', + project = '', + workspace = '', + intake = '', + issue = '', + duplicate_to = '' + ) + else: + return IntakeIssue( + id = '', + issue_detail = plane.models.issue_expand.IssueExpand( + id = '', + cycle = null, + module = null, + labels = [ + plane.models.label_lite.LabelLite( + id = '', + name = '', + color = '', ) + ], + assignees = [ + plane.models.user_lite.UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '', ) + ], + state = null, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + point = 0, + name = '', + description = null, + description_html = '', + description_stripped = '', + description_binary = 'YQ==', + priority = 'urgent', + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + sequence_id = -2147483648, + sort_order = 1.337, + completed_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + archived_at = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + is_draft = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + parent = '', + estimate_point = '', + type = '', ), + inbox = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + intake = '', + issue = '', + ) + """ + + def testIntakeIssue(self): + """Test IntakeIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue.py b/test/test_issue.py new file mode 100644 index 0000000..917f65b --- /dev/null +++ b/test/test_issue.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue import Issue # noqa: E501 + +class TestIssue(unittest.TestCase): + """Issue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Issue: + """Test Issue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Issue` + """ + model = Issue() # noqa: E501 + if include_optional: + return Issue( + id = '', + assignees = [ + '' + ], + labels = [ + '' + ], + type_id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + point = 0, + name = '', + description_html = '', + description_binary = 'YQ==', + priority = 'urgent', + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + sequence_id = -2147483648, + sort_order = 1.337, + completed_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + archived_at = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + is_draft = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + parent = '', + state = '', + estimate_point = '', + type = '' + ) + else: + return Issue( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description_binary = 'YQ==', + updated_by = '', + project = '', + workspace = '', + ) + """ + + def testIssue(self): + """Test Issue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue_activity.py b/test/test_issue_activity.py new file mode 100644 index 0000000..407a439 --- /dev/null +++ b/test/test_issue_activity.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue_activity import IssueActivity # noqa: E501 + +class TestIssueActivity(unittest.TestCase): + """IssueActivity unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IssueActivity: + """Test IssueActivity + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IssueActivity` + """ + model = IssueActivity() # noqa: E501 + if include_optional: + return IssueActivity( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + verb = '', + field = '', + old_value = '', + new_value = '', + comment = '', + attachments = [ + '' + ], + old_identifier = '', + new_identifier = '', + epoch = 1.337, + project = '', + workspace = '', + issue = '', + issue_comment = '', + actor = '' + ) + else: + return IssueActivity( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + project = '', + workspace = '', + ) + """ + + def testIssueActivity(self): + """Test IssueActivity""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue_attachment.py b/test/test_issue_attachment.py new file mode 100644 index 0000000..2f331eb --- /dev/null +++ b/test/test_issue_attachment.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue_attachment import IssueAttachment # noqa: E501 + +class TestIssueAttachment(unittest.TestCase): + """IssueAttachment unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IssueAttachment: + """Test IssueAttachment + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IssueAttachment` + """ + model = IssueAttachment() # noqa: E501 + if include_optional: + return IssueAttachment( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + attributes = None, + asset = '', + entity_type = '', + entity_identifier = '', + is_deleted = True, + is_archived = True, + external_id = '', + external_source = '', + size = 1.337, + is_uploaded = True, + storage_metadata = None, + created_by = '', + updated_by = '', + user = '', + workspace = '', + draft_issue = '', + project = '', + issue = '', + comment = '', + page = '' + ) + else: + return IssueAttachment( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + asset = '', + updated_by = '', + workspace = '', + project = '', + issue = '', + ) + """ + + def testIssueAttachment(self): + """Test IssueAttachment""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue_comment.py b/test/test_issue_comment.py new file mode 100644 index 0000000..a197af0 --- /dev/null +++ b/test/test_issue_comment.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue_comment import IssueComment # noqa: E501 + +class TestIssueComment(unittest.TestCase): + """IssueComment unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IssueComment: + """Test IssueComment + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IssueComment` + """ + model = IssueComment() # noqa: E501 + if include_optional: + return IssueComment( + id = '', + is_member = True, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + comment_html = '', + attachments = [ + '' + ], + access = 'INTERNAL', + external_source = '', + external_id = '', + edited_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + issue = '', + actor = '' + ) + else: + return IssueComment( + id = '', + is_member = True, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + issue = '', + ) + """ + + def testIssueComment(self): + """Test IssueComment""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue_expand.py b/test/test_issue_expand.py new file mode 100644 index 0000000..6adf299 --- /dev/null +++ b/test/test_issue_expand.py @@ -0,0 +1,227 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue_expand import IssueExpand # noqa: E501 + +class TestIssueExpand(unittest.TestCase): + """IssueExpand unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IssueExpand: + """Test IssueExpand + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IssueExpand` + """ + model = IssueExpand() # noqa: E501 + if include_optional: + return IssueExpand( + id = '', + cycle = plane.models.cycle_lite.CycleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + view_props = null, + sort_order = 1.337, + external_source = '', + external_id = '', + progress_snapshot = null, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = null, + timezone = 'Africa/Abidjan', + version = -2147483648, + created_by = '', + updated_by = '', + project = '', + workspace = '', + owned_by = '', ), + module = plane.models.module_lite.ModuleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = null, + description_html = null, + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + status = 'backlog', + view_props = null, + sort_order = 1.337, + external_source = '', + external_id = '', + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = null, + created_by = '', + updated_by = '', + project = '', + workspace = '', + lead = '', + members = [ + '' + ], ), + labels = [ + plane.models.label_lite.LabelLite( + id = '', + name = '', + color = '', ) + ], + assignees = [ + plane.models.user_lite.UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '', ) + ], + state = plane.models.state_lite.StateLite( + id = '', + name = '', + color = '', + group = 'backlog', ), + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + point = 0, + name = '', + description = None, + description_html = '', + description_stripped = '', + description_binary = 'YQ==', + priority = 'urgent', + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + sequence_id = -2147483648, + sort_order = 1.337, + completed_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + archived_at = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + is_draft = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + parent = '', + estimate_point = '', + type = '' + ) + else: + return IssueExpand( + id = '', + cycle = plane.models.cycle_lite.CycleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + view_props = null, + sort_order = 1.337, + external_source = '', + external_id = '', + progress_snapshot = null, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = null, + timezone = 'Africa/Abidjan', + version = -2147483648, + created_by = '', + updated_by = '', + project = '', + workspace = '', + owned_by = '', ), + module = plane.models.module_lite.ModuleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = null, + description_html = null, + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + status = 'backlog', + view_props = null, + sort_order = 1.337, + external_source = '', + external_id = '', + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = null, + created_by = '', + updated_by = '', + project = '', + workspace = '', + lead = '', + members = [ + '' + ], ), + labels = [ + plane.models.label_lite.LabelLite( + id = '', + name = '', + color = '', ) + ], + assignees = [ + plane.models.user_lite.UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '', ) + ], + state = plane.models.state_lite.StateLite( + id = '', + name = '', + color = '', + group = 'backlog', ), + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description_binary = 'YQ==', + created_by = '', + updated_by = '', + project = '', + workspace = '', + ) + """ + + def testIssueExpand(self): + """Test IssueExpand""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_issue_link.py b/test/test_issue_link.py new file mode 100644 index 0000000..d4b0425 --- /dev/null +++ b/test/test_issue_link.py @@ -0,0 +1,72 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.issue_link import IssueLink # noqa: E501 + +class TestIssueLink(unittest.TestCase): + """IssueLink unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> IssueLink: + """Test IssueLink + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `IssueLink` + """ + model = IssueLink() # noqa: E501 + if include_optional: + return IssueLink( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + title = '', + url = '', + metadata = None, + created_by = '', + updated_by = '', + project = '', + workspace = '', + issue = '' + ) + else: + return IssueLink( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + url = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + issue = '', + ) + """ + + def testIssueLink(self): + """Test IssueLink""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_label.py b/test/test_label.py new file mode 100644 index 0000000..858592e --- /dev/null +++ b/test/test_label.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.label import Label # noqa: E501 + +class TestLabel(unittest.TestCase): + """Label unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Label: + """Test Label + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Label` + """ + model = Label() # noqa: E501 + if include_optional: + return Label( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + color = '', + sort_order = 1.337, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + workspace = '', + project = '', + parent = '' + ) + else: + return Label( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + created_by = '', + updated_by = '', + workspace = '', + project = '', + ) + """ + + def testLabel(self): + """Test Label""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_label_lite.py b/test/test_label_lite.py new file mode 100644 index 0000000..1bf87e0 --- /dev/null +++ b/test/test_label_lite.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.label_lite import LabelLite # noqa: E501 + +class TestLabelLite(unittest.TestCase): + """LabelLite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> LabelLite: + """Test LabelLite + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `LabelLite` + """ + model = LabelLite() # noqa: E501 + if include_optional: + return LabelLite( + id = '', + name = '', + color = '' + ) + else: + return LabelLite( + id = '', + name = '', + ) + """ + + def testLabelLite(self): + """Test LabelLite""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_labels_api.py b/test/test_labels_api.py new file mode 100644 index 0000000..e5a6617 --- /dev/null +++ b/test/test_labels_api.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.labels_api import LabelsApi # noqa: E501 + + +class TestLabelsApi(unittest.TestCase): + """LabelsApi unit test stubs""" + + def setUp(self) -> None: + self.api = LabelsApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_create_label(self) -> None: + """Test case for create_label + + Create a label # noqa: E501 + """ + pass + + def test_delete_label(self) -> None: + """Test case for delete_label + + Delete a label # noqa: E501 + """ + pass + + def test_get_labels(self) -> None: + """Test case for get_labels + + Get labels # noqa: E501 + """ + pass + + def test_get_labels2(self) -> None: + """Test case for get_labels2 + + Get labels # noqa: E501 + """ + pass + + def test_update_label(self) -> None: + """Test case for update_label + + Update a label # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_members_api.py b/test/test_members_api.py new file mode 100644 index 0000000..ffc8bad --- /dev/null +++ b/test/test_members_api.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.members_api import MembersApi # noqa: E501 + + +class TestMembersApi(unittest.TestCase): + """MembersApi unit test stubs""" + + def setUp(self) -> None: + self.api = MembersApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_get_project_members(self) -> None: + """Test case for get_project_members + + Get all the users that are present inside the project # noqa: E501 + """ + pass + + def test_get_workspace_members(self) -> None: + """Test case for get_workspace_members + + Get all the users that are present inside the workspace # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_module.py b/test/test_module.py new file mode 100644 index 0000000..09e6f4c --- /dev/null +++ b/test/test_module.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.module import Module # noqa: E501 + +class TestModule(unittest.TestCase): + """Module unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Module: + """Test Module + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Module` + """ + model = Module() # noqa: E501 + if include_optional: + return Module( + id = '', + members = [ + '' + ], + total_issues = 56, + cancelled_issues = 56, + completed_issues = 56, + started_issues = 56, + unstarted_issues = 56, + backlog_issues = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = None, + description_html = None, + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + status = 'backlog', + view_props = None, + sort_order = 1.337, + external_source = '', + external_id = '', + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = None, + created_by = '', + updated_by = '', + project = '', + workspace = '', + lead = '' + ) + else: + return Module( + id = '', + total_issues = 56, + cancelled_issues = 56, + completed_issues = 56, + started_issues = 56, + unstarted_issues = 56, + backlog_issues = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + ) + """ + + def testModule(self): + """Test Module""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_module_issue.py b/test/test_module_issue.py new file mode 100644 index 0000000..25af6eb --- /dev/null +++ b/test/test_module_issue.py @@ -0,0 +1,73 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.module_issue import ModuleIssue # noqa: E501 + +class TestModuleIssue(unittest.TestCase): + """ModuleIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ModuleIssue: + """Test ModuleIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ModuleIssue` + """ + model = ModuleIssue() # noqa: E501 + if include_optional: + return ModuleIssue( + id = '', + sub_issues_count = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + module = '', + issue = '' + ) + else: + return ModuleIssue( + id = '', + sub_issues_count = 56, + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + created_by = '', + updated_by = '', + project = '', + workspace = '', + module = '', + issue = '', + ) + """ + + def testModuleIssue(self): + """Test ModuleIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_module_lite.py b/test/test_module_lite.py new file mode 100644 index 0000000..ecdaf89 --- /dev/null +++ b/test/test_module_lite.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.module_lite import ModuleLite # noqa: E501 + +class TestModuleLite(unittest.TestCase): + """ModuleLite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ModuleLite: + """Test ModuleLite + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ModuleLite` + """ + model = ModuleLite() # noqa: E501 + if include_optional: + return ModuleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = None, + description_html = None, + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + status = 'backlog', + view_props = None, + sort_order = 1.337, + external_source = '', + external_id = '', + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + logo_props = None, + created_by = '', + updated_by = '', + project = '', + workspace = '', + lead = '', + members = [ + '' + ] + ) + else: + return ModuleLite( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + project = '', + workspace = '', + members = [ + '' + ], + ) + """ + + def testModuleLite(self): + """Test ModuleLite""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_modules_api.py b/test/test_modules_api.py new file mode 100644 index 0000000..4d89427 --- /dev/null +++ b/test/test_modules_api.py @@ -0,0 +1,108 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.modules_api import ModulesApi # noqa: E501 + + +class TestModulesApi(unittest.TestCase): + """ModulesApi unit test stubs""" + + def setUp(self) -> None: + self.api = ModulesApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_add_module_issues(self) -> None: + """Test case for add_module_issues + + Add module issues # noqa: E501 + """ + pass + + def test_archive_module(self) -> None: + """Test case for archive_module + + Archive module # noqa: E501 + """ + pass + + def test_create_module(self) -> None: + """Test case for create_module + + Create module # noqa: E501 + """ + pass + + def test_delete_module(self) -> None: + """Test case for delete_module + + Delete module # noqa: E501 + """ + pass + + def test_delete_module_issue(self) -> None: + """Test case for delete_module_issue + + Delete module issue # noqa: E501 + """ + pass + + def test_get_archived_modules(self) -> None: + """Test case for get_archived_modules + + Get archived modules # noqa: E501 + """ + pass + + def test_get_module(self) -> None: + """Test case for get_module + + Get module # noqa: E501 + """ + pass + + def test_get_module2(self) -> None: + """Test case for get_module2 + + Get module # noqa: E501 + """ + pass + + def test_get_module_issues(self) -> None: + """Test case for get_module_issues + + Get module issues # noqa: E501 + """ + pass + + def test_unarchive_module(self) -> None: + """Test case for unarchive_module + + Unarchive module # noqa: E501 + """ + pass + + def test_update_module(self) -> None: + """Test case for update_module + + Update module # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_patched_asset_update.py b/test/test_patched_asset_update.py new file mode 100644 index 0000000..9774f84 --- /dev/null +++ b/test/test_patched_asset_update.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.patched_asset_update import PatchedAssetUpdate # noqa: E501 + +class TestPatchedAssetUpdate(unittest.TestCase): + """PatchedAssetUpdate unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> PatchedAssetUpdate: + """Test PatchedAssetUpdate + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PatchedAssetUpdate` + """ + model = PatchedAssetUpdate() # noqa: E501 + if include_optional: + return PatchedAssetUpdate( + attributes = None + ) + else: + return PatchedAssetUpdate( + ) + """ + + def testPatchedAssetUpdate(self): + """Test PatchedAssetUpdate""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_patched_generic_asset_update.py b/test/test_patched_generic_asset_update.py new file mode 100644 index 0000000..f10aff3 --- /dev/null +++ b/test/test_patched_generic_asset_update.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.patched_generic_asset_update import PatchedGenericAssetUpdate # noqa: E501 + +class TestPatchedGenericAssetUpdate(unittest.TestCase): + """PatchedGenericAssetUpdate unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> PatchedGenericAssetUpdate: + """Test PatchedGenericAssetUpdate + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PatchedGenericAssetUpdate` + """ + model = PatchedGenericAssetUpdate() # noqa: E501 + if include_optional: + return PatchedGenericAssetUpdate( + is_uploaded = True + ) + else: + return PatchedGenericAssetUpdate( + ) + """ + + def testPatchedGenericAssetUpdate(self): + """Test PatchedGenericAssetUpdate""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_patched_issue.py b/test/test_patched_issue.py new file mode 100644 index 0000000..6d2676a --- /dev/null +++ b/test/test_patched_issue.py @@ -0,0 +1,84 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.patched_issue import PatchedIssue # noqa: E501 + +class TestPatchedIssue(unittest.TestCase): + """PatchedIssue unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> PatchedIssue: + """Test PatchedIssue + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PatchedIssue` + """ + model = PatchedIssue() # noqa: E501 + if include_optional: + return PatchedIssue( + id = '', + assignees = [ + '' + ], + labels = [ + '' + ], + type_id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + point = 0, + name = '', + description_html = '', + description_binary = 'YQ==', + priority = 'urgent', + start_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + target_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + sequence_id = -2147483648, + sort_order = 1.337, + completed_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + archived_at = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), + is_draft = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + parent = '', + state = '', + estimate_point = '', + type = '' + ) + else: + return PatchedIssue( + ) + """ + + def testPatchedIssue(self): + """Test PatchedIssue""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_patched_project.py b/test/test_patched_project.py new file mode 100644 index 0000000..4a08ec3 --- /dev/null +++ b/test/test_patched_project.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.patched_project import PatchedProject # noqa: E501 + +class TestPatchedProject(unittest.TestCase): + """PatchedProject unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> PatchedProject: + """Test PatchedProject + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PatchedProject` + """ + model = PatchedProject() # noqa: E501 + if include_optional: + return PatchedProject( + id = '', + total_members = 56, + total_cycles = 56, + total_modules = 56, + is_member = True, + sort_order = 1.337, + member_role = 56, + is_deployed = True, + cover_image_url = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = None, + description_html = None, + network = 0, + identifier = '', + emoji = '', + icon_prop = None, + module_view = True, + cycle_view = True, + issue_views_view = True, + page_view = True, + intake_view = True, + is_time_tracking_enabled = True, + is_issue_type_enabled = True, + guest_view_all_features = True, + cover_image = '', + archive_in = 0, + close_in = 0, + logo_props = None, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + timezone = 'Africa/Abidjan', + created_by = '', + updated_by = '', + workspace = '', + default_assignee = '', + project_lead = '', + cover_image_asset = '', + estimate = '', + default_state = '' + ) + else: + return PatchedProject( + ) + """ + + def testPatchedProject(self): + """Test PatchedProject""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_project.py b/test/test_project.py new file mode 100644 index 0000000..fb25543 --- /dev/null +++ b/test/test_project.py @@ -0,0 +1,111 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.project import Project # noqa: E501 + +class TestProject(unittest.TestCase): + """Project unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Project: + """Test Project + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Project` + """ + model = Project() # noqa: E501 + if include_optional: + return Project( + id = '', + total_members = 56, + total_cycles = 56, + total_modules = 56, + is_member = True, + sort_order = 1.337, + member_role = 56, + is_deployed = True, + cover_image_url = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + description_text = None, + description_html = None, + network = 0, + identifier = '', + emoji = '', + icon_prop = None, + module_view = True, + cycle_view = True, + issue_views_view = True, + page_view = True, + intake_view = True, + is_time_tracking_enabled = True, + is_issue_type_enabled = True, + guest_view_all_features = True, + cover_image = '', + archive_in = 0, + close_in = 0, + logo_props = None, + archived_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + timezone = 'Africa/Abidjan', + created_by = '', + updated_by = '', + workspace = '', + default_assignee = '', + project_lead = '', + cover_image_asset = '', + estimate = '', + default_state = '' + ) + else: + return Project( + id = '', + total_members = 56, + total_cycles = 56, + total_modules = 56, + is_member = True, + sort_order = 1.337, + member_role = 56, + is_deployed = True, + cover_image_url = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + identifier = '', + emoji = '', + created_by = '', + updated_by = '', + workspace = '', + ) + """ + + def testProject(self): + """Test Project""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_projects_api.py b/test/test_projects_api.py new file mode 100644 index 0000000..285007b --- /dev/null +++ b/test/test_projects_api.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.projects_api import ProjectsApi # noqa: E501 + + +class TestProjectsApi(unittest.TestCase): + """ProjectsApi unit test stubs""" + + def setUp(self) -> None: + self.api = ProjectsApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_archive_project(self) -> None: + """Test case for archive_project + + Archive Project # noqa: E501 + """ + pass + + def test_create_project(self) -> None: + """Test case for create_project + + Create Project # noqa: E501 + """ + pass + + def test_delete_project(self) -> None: + """Test case for delete_project + + Delete Project # noqa: E501 + """ + pass + + def test_list_projects(self) -> None: + """Test case for list_projects + + List Projects # noqa: E501 + """ + pass + + def test_list_projects2(self) -> None: + """Test case for list_projects2 + + List Projects # noqa: E501 + """ + pass + + def test_unarchive_project(self) -> None: + """Test case for unarchive_project + + Unarchive Project # noqa: E501 + """ + pass + + def test_update_project(self) -> None: + """Test case for update_project + + Update Project # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_search_issues200_response.py b/test/test_search_issues200_response.py new file mode 100644 index 0000000..3a08f59 --- /dev/null +++ b/test/test_search_issues200_response.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.search_issues200_response import SearchIssues200Response # noqa: E501 + +class TestSearchIssues200Response(unittest.TestCase): + """SearchIssues200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SearchIssues200Response: + """Test SearchIssues200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SearchIssues200Response` + """ + model = SearchIssues200Response() # noqa: E501 + if include_optional: + return SearchIssues200Response( + issues = [ + plane.models.search_issues_200_response_issues_inner.search_issues_200_response_issues_inner( + name = '', + id = '', + sequence_id = '', + project__identifier = '', + project_id = '', + workspace__slug = '', ) + ] + ) + else: + return SearchIssues200Response( + ) + """ + + def testSearchIssues200Response(self): + """Test SearchIssues200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_search_issues200_response_issues_inner.py b/test/test_search_issues200_response_issues_inner.py new file mode 100644 index 0000000..0b88a19 --- /dev/null +++ b/test/test_search_issues200_response_issues_inner.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.search_issues200_response_issues_inner import SearchIssues200ResponseIssuesInner # noqa: E501 + +class TestSearchIssues200ResponseIssuesInner(unittest.TestCase): + """SearchIssues200ResponseIssuesInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SearchIssues200ResponseIssuesInner: + """Test SearchIssues200ResponseIssuesInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SearchIssues200ResponseIssuesInner` + """ + model = SearchIssues200ResponseIssuesInner() # noqa: E501 + if include_optional: + return SearchIssues200ResponseIssuesInner( + name = '', + id = '', + sequence_id = '', + project__identifier = '', + project_id = '', + workspace__slug = '' + ) + else: + return SearchIssues200ResponseIssuesInner( + ) + """ + + def testSearchIssues200ResponseIssuesInner(self): + """Test SearchIssues200ResponseIssuesInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_state.py b/test/test_state.py new file mode 100644 index 0000000..cd361bb --- /dev/null +++ b/test/test_state.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.state import State # noqa: E501 + +class TestState(unittest.TestCase): + """State unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> State: + """Test State + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `State` + """ + model = State() # noqa: E501 + if include_optional: + return State( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + description = '', + color = '', + slug = 'z', + sequence = 1.337, + group = 'backlog', + is_triage = True, + default = True, + external_source = '', + external_id = '', + created_by = '', + updated_by = '', + project = '', + workspace = '' + ) + else: + return State( + id = '', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + deleted_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + name = '', + color = '', + created_by = '', + updated_by = '', + project = '', + workspace = '', + ) + """ + + def testState(self): + """Test State""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_state_lite.py b/test/test_state_lite.py new file mode 100644 index 0000000..f7c86ca --- /dev/null +++ b/test/test_state_lite.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.state_lite import StateLite # noqa: E501 + +class TestStateLite(unittest.TestCase): + """StateLite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> StateLite: + """Test StateLite + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `StateLite` + """ + model = StateLite() # noqa: E501 + if include_optional: + return StateLite( + id = '', + name = '', + color = '', + group = 'backlog' + ) + else: + return StateLite( + id = '', + name = '', + color = '', + group = 'backlog', + ) + """ + + def testStateLite(self): + """Test StateLite""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_states_api.py b/test/test_states_api.py new file mode 100644 index 0000000..cff300d --- /dev/null +++ b/test/test_states_api.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.states_api import StatesApi # noqa: E501 + + +class TestStatesApi(unittest.TestCase): + """StatesApi unit test stubs""" + + def setUp(self) -> None: + self.api = StatesApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_create_state(self) -> None: + """Test case for create_state + + Create State # noqa: E501 + """ + pass + + def test_delete_state(self) -> None: + """Test case for delete_state + + Delete State # noqa: E501 + """ + pass + + def test_get_state(self) -> None: + """Test case for get_state + + Get State # noqa: E501 + """ + pass + + def test_get_state2(self) -> None: + """Test case for get_state2 + + Get State # noqa: E501 + """ + pass + + def test_update_state(self) -> None: + """Test case for update_state + + Update State # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_transfer_cycle_issues200_response.py b/test/test_transfer_cycle_issues200_response.py new file mode 100644 index 0000000..68fd125 --- /dev/null +++ b/test/test_transfer_cycle_issues200_response.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.transfer_cycle_issues200_response import TransferCycleIssues200Response # noqa: E501 + +class TestTransferCycleIssues200Response(unittest.TestCase): + """TransferCycleIssues200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TransferCycleIssues200Response: + """Test TransferCycleIssues200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `TransferCycleIssues200Response` + """ + model = TransferCycleIssues200Response() # noqa: E501 + if include_optional: + return TransferCycleIssues200Response( + message = '' + ) + else: + return TransferCycleIssues200Response( + ) + """ + + def testTransferCycleIssues200Response(self): + """Test TransferCycleIssues200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_transfer_cycle_issues400_response.py b/test/test_transfer_cycle_issues400_response.py new file mode 100644 index 0000000..3e7c71f --- /dev/null +++ b/test/test_transfer_cycle_issues400_response.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.transfer_cycle_issues400_response import TransferCycleIssues400Response # noqa: E501 + +class TestTransferCycleIssues400Response(unittest.TestCase): + """TransferCycleIssues400Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TransferCycleIssues400Response: + """Test TransferCycleIssues400Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `TransferCycleIssues400Response` + """ + model = TransferCycleIssues400Response() # noqa: E501 + if include_optional: + return TransferCycleIssues400Response( + error = '' + ) + else: + return TransferCycleIssues400Response( + ) + """ + + def testTransferCycleIssues400Response(self): + """Test TransferCycleIssues400Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_update_cycle_request.py b/test/test_update_cycle_request.py new file mode 100644 index 0000000..318cdf3 --- /dev/null +++ b/test/test_update_cycle_request.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.update_cycle_request import UpdateCycleRequest # noqa: E501 + +class TestUpdateCycleRequest(unittest.TestCase): + """UpdateCycleRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateCycleRequest: + """Test UpdateCycleRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UpdateCycleRequest` + """ + model = UpdateCycleRequest() # noqa: E501 + if include_optional: + return UpdateCycleRequest( + name = 'Cycle 1', + description = 'This is a cycle description', + start_date = '2025-01-01T00:00Z', + end_date = '2025-01-01T00:00Z' + ) + else: + return UpdateCycleRequest( + ) + """ + + def testUpdateCycleRequest(self): + """Test UpdateCycleRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_update_label_request.py b/test/test_update_label_request.py new file mode 100644 index 0000000..9b802a9 --- /dev/null +++ b/test/test_update_label_request.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.update_label_request import UpdateLabelRequest # noqa: E501 + +class TestUpdateLabelRequest(unittest.TestCase): + """UpdateLabelRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateLabelRequest: + """Test UpdateLabelRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UpdateLabelRequest` + """ + model = UpdateLabelRequest() # noqa: E501 + if include_optional: + return UpdateLabelRequest( + name = '', + color = '', + description = '' + ) + else: + return UpdateLabelRequest( + ) + """ + + def testUpdateLabelRequest(self): + """Test UpdateLabelRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_user_asset_upload.py b/test/test_user_asset_upload.py new file mode 100644 index 0000000..061b38a --- /dev/null +++ b/test/test_user_asset_upload.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.user_asset_upload import UserAssetUpload # noqa: E501 + +class TestUserAssetUpload(unittest.TestCase): + """UserAssetUpload unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UserAssetUpload: + """Test UserAssetUpload + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UserAssetUpload` + """ + model = UserAssetUpload() # noqa: E501 + if include_optional: + return UserAssetUpload( + name = '', + type = 'image/jpeg', + size = 56, + entity_type = 'USER_AVATAR' + ) + else: + return UserAssetUpload( + name = '', + size = 56, + entity_type = 'USER_AVATAR', + ) + """ + + def testUserAssetUpload(self): + """Test UserAssetUpload""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_user_lite.py b/test/test_user_lite.py new file mode 100644 index 0000000..dc2893a --- /dev/null +++ b/test/test_user_lite.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +from plane.models.user_lite import UserLite # noqa: E501 + +class TestUserLite(unittest.TestCase): + """UserLite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UserLite: + """Test UserLite + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UserLite` + """ + model = UserLite() # noqa: E501 + if include_optional: + return UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + avatar = '', + avatar_url = '', + display_name = '' + ) + else: + return UserLite( + id = '', + first_name = '', + last_name = '', + email = '', + display_name = '', + ) + """ + + def testUserLite(self): + """Test UserLite""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_users_api.py b/test/test_users_api.py new file mode 100644 index 0000000..251af84 --- /dev/null +++ b/test/test_users_api.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.users_api import UsersApi # noqa: E501 + + +class TestUsersApi(unittest.TestCase): + """UsersApi unit test stubs""" + + def setUp(self) -> None: + self.api = UsersApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_get_current_user(self) -> None: + """Test case for get_current_user + + Get User # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_work_items_api.py b/test/test_work_items_api.py new file mode 100644 index 0000000..b8eeaea --- /dev/null +++ b/test/test_work_items_api.py @@ -0,0 +1,178 @@ +# coding: utf-8 + +""" + Plane API + + Plane External API + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from plane.api.work_items_api import WorkItemsApi # noqa: E501 + + +class TestWorkItemsApi(unittest.TestCase): + """WorkItemsApi unit test stubs""" + + def setUp(self) -> None: + self.api = WorkItemsApi() + + def tearDown(self) -> None: + self.api.api_client.close() + + def test_create_issue_comment(self) -> None: + """Test case for create_issue_comment + + Create an issue comment # noqa: E501 + """ + pass + + def test_create_issue_link(self) -> None: + """Test case for create_issue_link + + Create an issue link # noqa: E501 + """ + pass + + def test_create_work_item(self) -> None: + """Test case for create_work_item + + Create an work item # noqa: E501 + """ + pass + + def test_delete_issue_attachment(self) -> None: + """Test case for delete_issue_attachment + + Delete an issue attachment # noqa: E501 + """ + pass + + def test_delete_issue_comment(self) -> None: + """Test case for delete_issue_comment + + Delete an issue comment # noqa: E501 + """ + pass + + def test_delete_issue_link(self) -> None: + """Test case for delete_issue_link + + Delete an issue link # noqa: E501 + """ + pass + + def test_delete_work_item(self) -> None: + """Test case for delete_work_item + + Delete an work item # noqa: E501 + """ + pass + + def test_get_issue_activities(self) -> None: + """Test case for get_issue_activities + + Get issue activities # noqa: E501 + """ + pass + + def test_get_issue_activities2(self) -> None: + """Test case for get_issue_activities2 + + Get issue activities # noqa: E501 + """ + pass + + def test_get_issue_attachment(self) -> None: + """Test case for get_issue_attachment + + Get an issue attachment # noqa: E501 + """ + pass + + def test_get_issue_attachment2(self) -> None: + """Test case for get_issue_attachment2 + + Get issue attachment # noqa: E501 + """ + pass + + def test_get_issue_attachment3(self) -> None: + """Test case for get_issue_attachment3 + + Get an issue attachment # noqa: E501 + """ + pass + + def test_get_issue_comments(self) -> None: + """Test case for get_issue_comments + + Get issue comments # noqa: E501 + """ + pass + + def test_get_issue_comments2(self) -> None: + """Test case for get_issue_comments2 + + Get issue comments # noqa: E501 + """ + pass + + def test_get_issue_links(self) -> None: + """Test case for get_issue_links + + Get issue links # noqa: E501 + """ + pass + + def test_get_issue_links2(self) -> None: + """Test case for get_issue_links2 + + Get issue links # noqa: E501 + """ + pass + + def test_get_work_item(self) -> None: + """Test case for get_work_item + + Work Item retrieve endpoints # noqa: E501 + """ + pass + + def test_get_work_item2(self) -> None: + """Test case for get_work_item2 + + Work Item retrieve endpoints # noqa: E501 + """ + pass + + def test_patch_work_item(self) -> None: + """Test case for patch_work_item + + Patch an work item # noqa: E501 + """ + pass + + def test_update_issue_comment(self) -> None: + """Test case for update_issue_comment + + Update an issue comment # noqa: E501 + """ + pass + + def test_update_issue_link(self) -> None: + """Test case for update_issue_link + + Update an issue link # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/client.py b/tests/client.py deleted file mode 100644 index e557101..0000000 --- a/tests/client.py +++ /dev/null @@ -1,60 +0,0 @@ -import pytest -from unittest.mock import AsyncMock, MagicMock -import httpx -from plane import Client, Config -from plane.exceptions import AuthenticationError - - -class TestClient: - """Test the main client.""" - - def test_client_initialization(self): - """Test client initialization.""" - config = Config(api_key="test-key") - client = Client(config) - - assert client.config == config - assert client.users is not None - assert isinstance(client._http_client, httpx.AsyncClient) - - def test_client_from_env(self, monkeypatch): - """Test client initialization from environment.""" - monkeypatch.setenv("MY_API_KEY", "env-test-key") - monkeypatch.setenv("MY_API_BASE_URL", "https://env.api.com") - - client = Client() - - assert client.config.api_key == "env-test-key" - assert client.config.base_url == "https://env.api.com" - - @pytest.mark.asyncio - async def test_health_check_success(self, client, mock_http_client): - """Test successful health check.""" - mock_response = MagicMock() - mock_response.json.return_value = {"status": "ok"} - mock_http_client.get.return_value = mock_response - - result = await client.health_check() - - assert result == {"status": "ok"} - mock_http_client.get.assert_called_once_with(f"{client.config.base_url}/health") - - @pytest.mark.asyncio - async def test_health_check_error(self, client, mock_http_client): - """Test health check with error.""" - mock_http_client.get.side_effect = Exception("Connection failed") - - result = await client.health_check() - - assert result["status"] == "error" - assert "Connection failed" in result["message"] - - @pytest.mark.asyncio - async def test_context_manager(self, config): - """Test client as async context manager.""" - async with Client(config) as client: - assert client is not None - assert client._http_client is not None - - # Client should be closed after context - assert client._http_client.is_closed diff --git a/tests/conf_test.py b/tests/conf_test.py deleted file mode 100644 index 273974b..0000000 --- a/tests/conf_test.py +++ /dev/null @@ -1,57 +0,0 @@ -import pytest -import httpx -from unittest.mock import AsyncMock -from plane import Client, Config - - -@pytest.fixture -def config(): - """Test configuration.""" - return Config(api_key="x-api-key", base_url="https://api.plane.so/api/v1") - - -@pytest.fixture -def mock_http_client(): - """Mock HTTP client.""" - return AsyncMock(spec=httpx.AsyncClient) - - -@pytest.fixture -async def client(config, mock_http_client): - """Test client.""" - client = Client(config) - client._http_client = mock_http_client - yield client - await client.close() - - -@pytest.fixture -def sample_user_data(): - """Sample user data for testing.""" - return { - "id": "123", - "email": "test@example.com", - "firstName": "John", - "lastName": "Doe", - "username": "johndoe", - "isActive": True, - "createdAt": "2023-01-01T00:00:00Z", - "updatedAt": "2023-01-01T00:00:00Z", - } - - -@pytest.fixture -def sample_workspace_data(): - """Sample workspace data for testing.""" - return { - "id": "ws-123", - "name": "Test Workspace", - "logo": "https://logo.url/logo.png", - "logo_asset": "https://logo.url/asset.png", - "owner": "user-123", - "slug": "test-workspace", - "organization_size": "small", - "timezone": "UTC", - "createdAt": "2023-01-01T00:00:00Z", - "updatedAt": "2023-01-01T00:00:00Z", - } diff --git a/tests/workspace.py b/tests/workspace.py deleted file mode 100644 index 30aea34..0000000 --- a/tests/workspace.py +++ /dev/null @@ -1,141 +0,0 @@ -import pytest -from unittest.mock import MagicMock -import httpx -from plane.models.workspace import Workspace, WorkspaceUpdate -from plane.exceptions import NotFoundError - - -class TestWorkspacesResource: - """Test workspaces resource.""" - - @pytest.mark.asyncio - async def test_list_workspaces( - self, client, mock_http_client, sample_workspace_data - ): - """Test listing workspaces.""" - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = { - "data": [sample_workspace_data], - "pagination": { - "page": 1, - "perPage": 20, - "total": 1, - "totalPages": 1, - "hasNext": False, - "hasPrev": False, - }, - } - mock_http_client.request.return_value = mock_response - - result = await client.workspaces.list() - - assert len(result["workspaces"]) == 1 - assert isinstance(result["workspaces"][0], Workspace) - assert result["workspaces"][0].name == "Test Workspace" - assert result["pagination"].total == 1 - - @pytest.mark.asyncio - async def test_get_workspace(self, client, mock_http_client, sample_workspace_data): - """Test getting a workspace.""" - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = sample_workspace_data - mock_http_client.request.return_value = mock_response - - workspace = await client.workspaces.get("ws-123") - - assert isinstance(workspace, Workspace) - assert workspace.id == "ws-123" - assert workspace.name == "Test Workspace" - assert workspace.slug == "test-workspace" - - @pytest.mark.asyncio - async def test_get_workspace_not_found(self, client, mock_http_client): - """Test getting a non-existent workspace.""" - mock_response = MagicMock() - mock_response.is_success = False - mock_response.status_code = 404 - mock_response.json.return_value = {"message": "Workspace not found"} - mock_http_client.request.return_value = mock_response - - with pytest.raises(NotFoundError): - await client.workspaces.get("ws-999") - - @pytest.mark.asyncio - async def test_create_workspace( - self, client, mock_http_client, sample_workspace_data - ): - """Test creating a workspace.""" - workspace_create = WorkspaceUpdate( - name="New Workspace", - logo="https://logo.url/newlogo.png", - logo_asset="https://logo.url/newasset.png", - organization_size="medium", - timezone="UTC", - ) - - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = { - **sample_workspace_data, - "name": "New Workspace", - "logo": "https://logo.url/newlogo.png", - "logo_asset": "https://logo.url/newasset.png", - "organization_size": "medium", - } - mock_http_client.request.return_value = mock_response - - workspace = await client.workspaces.create(workspace_create) - - assert isinstance(workspace, Workspace) - assert workspace.name == "New Workspace" - assert workspace.logo == "https://logo.url/newlogo.png" - - @pytest.mark.asyncio - async def test_update_workspace( - self, client, mock_http_client, sample_workspace_data - ): - """Test updating a workspace.""" - workspace_update = WorkspaceUpdate(name="Updated Workspace") - - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = { - **sample_workspace_data, - "name": "Updated Workspace", - } - mock_http_client.request.return_value = mock_response - - workspace = await client.workspaces.update("ws-123", workspace_update) - - assert isinstance(workspace, Workspace) - assert workspace.name == "Updated Workspace" - - @pytest.mark.asyncio - async def test_delete_workspace(self, client, mock_http_client): - """Test deleting a workspace.""" - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = {} - mock_http_client.request.return_value = mock_response - - result = await client.workspaces.delete("ws-123") - - assert result is True - - @pytest.mark.asyncio - async def test_search_workspaces( - self, client, mock_http_client, sample_workspace_data - ): - """Test searching workspaces.""" - mock_response = MagicMock() - mock_response.is_success = True - mock_response.json.return_value = {"workspaces": [sample_workspace_data]} - mock_http_client.request.return_value = mock_response - - workspaces = await client.workspaces.search("test", limit=5) - - assert len(workspaces) == 1 - assert isinstance(workspaces[0], Workspace) - assert workspaces[0].name == "Test Workspace" diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..c8c555a --- /dev/null +++ b/tox.ini @@ -0,0 +1,9 @@ +[tox] +envlist = py3 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + pytest --cov=plane