devrev-Python-SDK 2.11.0__tar.gz → 2.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/PKG-INFO +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/pyproject.toml +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/parts.py +6 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_parts.py +52 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_articles.py +77 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/uv.lock +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/foreman.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/commands/foreman-work.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.dockerignore +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.env.sample +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/api-check.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/ci.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/deploy.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/docs.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/release.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.gitignore +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/CLAUDE.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/Dockerfile +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/SECURITY.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/augment-settings.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/benchmarks/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/context7.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/audit-logging-setup.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/cloudbuild.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/monitoring/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/monitoring/alert-policies.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/monitoring/dashboard.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/monitoring/validate-config.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/deploy/service.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docker-compose.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/search.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/client.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/config.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/models/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/models/works.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/api/services/works.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/changelog.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/examples/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/hooks/copy_llms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/mcp/deployment.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/mcp/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/mcp/quickstart.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/mcp/tools-reference.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/stylesheets/extra.css +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/llms-ctx-full.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/llms-ctx.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/llms-mcp.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/llms.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/mkdocs.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/openapi-public.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/scripts/debug_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/models/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/services/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/content_converter.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/middleware/audit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/middleware/auth.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/server.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_articles_lifecycle.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_mcp_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_specialized_services_phase3.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/performance/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/performance/test_articles_performance.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_audit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/services/test_works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_articles_unified.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_backward_compatibility.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_content_converter.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_error_handling.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/tests/unit/test_pagination.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devrev-Python-SDK
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.12.0
|
|
4
4
|
Summary: A modern, type-safe Python SDK for the DevRev API
|
|
5
5
|
Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
|
|
6
6
|
Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
|
|
@@ -117,6 +117,12 @@ if _config.enable_destructive_tools:
|
|
|
117
117
|
f"Invalid part type: {e.args[0]}. "
|
|
118
118
|
f"Valid types: {', '.join(t.name for t in PartType)}"
|
|
119
119
|
) from e
|
|
120
|
+
# Validate parent_part is provided for non-product parts
|
|
121
|
+
if part_type != PartType.PRODUCT and not parent_part:
|
|
122
|
+
raise RuntimeError(
|
|
123
|
+
f"parent_part is required when creating a {part_type.name} part. "
|
|
124
|
+
"Only PRODUCT parts can be created without a parent."
|
|
125
|
+
)
|
|
120
126
|
request = PartsCreateRequest(
|
|
121
127
|
name=name,
|
|
122
128
|
type=part_type,
|
|
@@ -150,7 +150,12 @@ class TestPartsCreateTool:
|
|
|
150
150
|
mock_part = _make_mock_part(id="FEAT-789", name="New Feature", type="feature")
|
|
151
151
|
mock_client.parts.create.return_value = mock_part
|
|
152
152
|
|
|
153
|
-
result = await devrev_parts_create(
|
|
153
|
+
result = await devrev_parts_create(
|
|
154
|
+
mock_ctx,
|
|
155
|
+
name="New Feature",
|
|
156
|
+
type="FEATURE",
|
|
157
|
+
parent_part=["don:core:dvrv-us-1:devo/1:part/1"],
|
|
158
|
+
)
|
|
154
159
|
|
|
155
160
|
assert result["id"] == "FEAT-789"
|
|
156
161
|
call_args = mock_client.parts.create.call_args[0][0]
|
|
@@ -245,6 +250,52 @@ class TestPartsCreateTool:
|
|
|
245
250
|
type="invalid",
|
|
246
251
|
)
|
|
247
252
|
|
|
253
|
+
@pytest.mark.asyncio
|
|
254
|
+
async def test_create_capability_without_parent_part_raises(self, mock_ctx, mock_client):
|
|
255
|
+
"""Test that creating a CAPABILITY without parent_part raises RuntimeError. (#184)"""
|
|
256
|
+
with pytest.raises(RuntimeError, match="parent_part is required"):
|
|
257
|
+
await devrev_parts_create(
|
|
258
|
+
mock_ctx,
|
|
259
|
+
name="Orphan Capability",
|
|
260
|
+
type="capability",
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
@pytest.mark.asyncio
|
|
264
|
+
async def test_create_feature_without_parent_part_raises(self, mock_ctx, mock_client):
|
|
265
|
+
"""Test that creating a FEATURE without parent_part raises RuntimeError. (#184)"""
|
|
266
|
+
with pytest.raises(RuntimeError, match="parent_part is required"):
|
|
267
|
+
await devrev_parts_create(
|
|
268
|
+
mock_ctx,
|
|
269
|
+
name="Orphan Feature",
|
|
270
|
+
type="feature",
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
@pytest.mark.asyncio
|
|
274
|
+
async def test_create_enhancement_without_parent_part_raises(self, mock_ctx, mock_client):
|
|
275
|
+
"""Test that creating an ENHANCEMENT without parent_part raises RuntimeError. (#184)"""
|
|
276
|
+
with pytest.raises(RuntimeError, match="parent_part is required"):
|
|
277
|
+
await devrev_parts_create(
|
|
278
|
+
mock_ctx,
|
|
279
|
+
name="Orphan Enhancement",
|
|
280
|
+
type="enhancement",
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
@pytest.mark.asyncio
|
|
284
|
+
async def test_create_product_without_parent_part_succeeds(self, mock_ctx, mock_client):
|
|
285
|
+
"""Test that creating a PRODUCT without parent_part succeeds. (#184)"""
|
|
286
|
+
mock_part = _make_mock_part(id="PROD-999", name="Standalone Product")
|
|
287
|
+
mock_client.parts.create.return_value = mock_part
|
|
288
|
+
|
|
289
|
+
result = await devrev_parts_create(
|
|
290
|
+
mock_ctx,
|
|
291
|
+
name="Standalone Product",
|
|
292
|
+
type="product",
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
assert result["id"] == "PROD-999"
|
|
296
|
+
call_args = mock_client.parts.create.call_args[0][0]
|
|
297
|
+
assert call_args.parent_part is None
|
|
298
|
+
|
|
248
299
|
|
|
249
300
|
class TestPartsUpdateTool:
|
|
250
301
|
"""Tests for devrev_parts_update tool."""
|
|
@@ -15,6 +15,7 @@ from devrev.models.articles import (
|
|
|
15
15
|
ArticlesUpdateRequestOwnedBy,
|
|
16
16
|
ArticlesUpdateRequestTags,
|
|
17
17
|
ArticleType,
|
|
18
|
+
SetSharedWithMembership,
|
|
18
19
|
)
|
|
19
20
|
from devrev.models.base import SetTagWithValue
|
|
20
21
|
from devrev.services.articles import ArticlesService
|
|
@@ -355,3 +356,79 @@ class TestArticlesService:
|
|
|
355
356
|
call_data = mock_http_client.post.call_args.kwargs["data"]
|
|
356
357
|
assert call_data["language"] == "fr"
|
|
357
358
|
assert call_data["authored_by"] == ["author-1", "author-2"]
|
|
359
|
+
|
|
360
|
+
def test_update_with_content_shared_with_serialization(
|
|
361
|
+
self,
|
|
362
|
+
mock_http_client: MagicMock,
|
|
363
|
+
sample_article_data: dict[str, Any],
|
|
364
|
+
) -> None:
|
|
365
|
+
"""Test that shared_with is wrapped in ArticlesUpdateRequestSharedWith for updates.
|
|
366
|
+
|
|
367
|
+
The update path wraps shared_with in {"set": [...]} unlike the create path
|
|
368
|
+
which passes a raw list. This test asserts the serialized payload shape.
|
|
369
|
+
"""
|
|
370
|
+
mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
|
|
371
|
+
|
|
372
|
+
mock_parent = MagicMock()
|
|
373
|
+
service = ArticlesService(mock_http_client, parent_client=mock_parent)
|
|
374
|
+
|
|
375
|
+
memberships = [
|
|
376
|
+
SetSharedWithMembership(member="don:identity:user:100"),
|
|
377
|
+
SetSharedWithMembership(member="don:identity:user:200", role="editor"),
|
|
378
|
+
]
|
|
379
|
+
service.update_with_content(
|
|
380
|
+
"don:core:article:123",
|
|
381
|
+
shared_with=memberships,
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
# update_with_content calls update -> _post, so check the serialized payload
|
|
385
|
+
mock_http_client.post.assert_called_once()
|
|
386
|
+
call_data = mock_http_client.post.call_args.kwargs["data"]
|
|
387
|
+
assert "shared_with" in call_data
|
|
388
|
+
assert "set" in call_data["shared_with"]
|
|
389
|
+
assert len(call_data["shared_with"]["set"]) == 2
|
|
390
|
+
assert call_data["shared_with"]["set"][0]["member"] == "don:identity:user:100"
|
|
391
|
+
assert call_data["shared_with"]["set"][1]["member"] == "don:identity:user:200"
|
|
392
|
+
assert call_data["shared_with"]["set"][1]["role"] == "editor"
|
|
393
|
+
|
|
394
|
+
def test_update_with_content_empty_shared_with_clears_sharing(
|
|
395
|
+
self,
|
|
396
|
+
mock_http_client: MagicMock,
|
|
397
|
+
sample_article_data: dict[str, Any],
|
|
398
|
+
) -> None:
|
|
399
|
+
"""Test that an empty shared_with list serializes as {"set": []} to clear sharing."""
|
|
400
|
+
mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
|
|
401
|
+
|
|
402
|
+
mock_parent = MagicMock()
|
|
403
|
+
service = ArticlesService(mock_http_client, parent_client=mock_parent)
|
|
404
|
+
|
|
405
|
+
service.update_with_content(
|
|
406
|
+
"don:core:article:123",
|
|
407
|
+
shared_with=[],
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
mock_http_client.post.assert_called_once()
|
|
411
|
+
call_data = mock_http_client.post.call_args.kwargs["data"]
|
|
412
|
+
assert "shared_with" in call_data
|
|
413
|
+
assert call_data["shared_with"] == {"set": []}
|
|
414
|
+
|
|
415
|
+
def test_update_with_content_without_shared_with_omits_field(
|
|
416
|
+
self,
|
|
417
|
+
mock_http_client: MagicMock,
|
|
418
|
+
sample_article_data: dict[str, Any],
|
|
419
|
+
) -> None:
|
|
420
|
+
"""Test that shared_with is omitted from payload when not provided."""
|
|
421
|
+
mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
|
|
422
|
+
|
|
423
|
+
mock_parent = MagicMock()
|
|
424
|
+
service = ArticlesService(mock_http_client, parent_client=mock_parent)
|
|
425
|
+
|
|
426
|
+
service.update_with_content(
|
|
427
|
+
"don:core:article:123",
|
|
428
|
+
title="Updated Title",
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
mock_http_client.post.assert_called_once()
|
|
432
|
+
call_data = mock_http_client.post.call_args.kwargs["data"]
|
|
433
|
+
# shared_with should be truly absent from the payload, not just None
|
|
434
|
+
assert "shared_with" not in call_data
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/claude-code-review.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/.github/workflows/integration-tests.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/docs/getting-started/authentication.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/cloud_functions/main.py
RENAMED
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/fastapi/README.md
RENAMED
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/fastapi/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.0}/examples/integrations/flask/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|