devrev-Python-SDK 2.11.0__tar.gz → 2.12.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/PKG-INFO +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/cloudbuild.yaml +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/search.md +2 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/changelog.md +10 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/pyproject.toml +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/search.py +4 -4
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/search.py +4 -4
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/parts.py +6 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_specialized_services_phase3.py +2 -2
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_parts.py +52 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_articles.py +77 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_search.py +2 -2
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/uv.lock +1 -1
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/foreman.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/foreman-work.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.dockerignore +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.env.sample +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/api-check.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/ci.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/deploy.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/docs.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/release.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.gitignore +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CLAUDE.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/Dockerfile +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/SECURITY.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-settings.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/context7.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/audit-logging-setup.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/alert-policies.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/dashboard.json +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/validate-config.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/service.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docker-compose.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/client.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/config.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/works.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/works.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/hooks/copy_llms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/deployment.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/index.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/quickstart.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/tools-reference.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/stylesheets/extra.css +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-ctx-full.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-ctx.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-mcp.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms.txt +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/mkdocs.yml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-public.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/debug_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/content_converter.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/audit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/auth.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/server.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_articles_lifecycle.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_mcp_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/performance/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/performance/test_articles_performance.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_audit.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_server_info.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_articles.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_works.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_articles_unified.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_artifacts.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_backward_compatibility.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_client.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_content_converter.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_error_handling.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/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.1
|
|
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
|
|
@@ -90,7 +90,7 @@ from devrev.models.search import CoreSearchRequest, HybridSearchRequest, SearchN
|
|
|
90
90
|
# Core search with request object
|
|
91
91
|
request = CoreSearchRequest(
|
|
92
92
|
query="type:incident AND severity:sev0",
|
|
93
|
-
|
|
93
|
+
namespaces=[SearchNamespace.WORK],
|
|
94
94
|
limit=50,
|
|
95
95
|
)
|
|
96
96
|
results = client.search.core(request)
|
|
@@ -98,6 +98,7 @@ results = client.search.core(request)
|
|
|
98
98
|
# Hybrid search with request object
|
|
99
99
|
request = HybridSearchRequest(
|
|
100
100
|
query="database performance issues",
|
|
101
|
+
namespaces=[SearchNamespace.WORK],
|
|
101
102
|
semantic_weight=0.8,
|
|
102
103
|
limit=20,
|
|
103
104
|
)
|
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.12.1] - 2026-04-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Search API Bad Request error** (#204) — Fixed `devrev_search_core_devrev` and `devrev_search_hybrid_devrev` MCP tools returning "Validation error: Bad Request" by changing `CoreSearchRequest` and `HybridSearchRequest` models to send `namespaces` (plural, array) instead of `namespace` (singular, string), matching the DevRev API specification.
|
|
15
|
+
|
|
16
|
+
### Maintenance
|
|
17
|
+
|
|
18
|
+
- **Cloud Build machine type** — Updated Cloud Build machine type from `N1_HIGHCPU_8` to `E2_HIGHCPU_8`.
|
|
19
|
+
|
|
10
20
|
## [2.10.2] - 2026-03-11
|
|
11
21
|
|
|
12
22
|
### Fixed
|
|
@@ -93,8 +93,8 @@ class CoreSearchRequest(DevRevBaseModel):
|
|
|
93
93
|
"""Request model for core search."""
|
|
94
94
|
|
|
95
95
|
query: str = Field(..., description="Search query")
|
|
96
|
-
|
|
97
|
-
..., description="
|
|
96
|
+
namespaces: list[SearchNamespace] = Field(
|
|
97
|
+
..., description="Namespaces to search in (e.g. ['account'], ['work', 'ticket'])"
|
|
98
98
|
)
|
|
99
99
|
limit: int | None = Field(
|
|
100
100
|
default=None,
|
|
@@ -109,8 +109,8 @@ class HybridSearchRequest(DevRevBaseModel):
|
|
|
109
109
|
"""Request model for hybrid search."""
|
|
110
110
|
|
|
111
111
|
query: str = Field(..., description="Search query")
|
|
112
|
-
|
|
113
|
-
..., description="
|
|
112
|
+
namespaces: list[SearchNamespace] = Field(
|
|
113
|
+
..., description="Namespaces to search in (e.g. ['account'], ['work', 'ticket'])"
|
|
114
114
|
)
|
|
115
115
|
semantic_weight: float | None = Field(
|
|
116
116
|
default=None, description="Weight for semantic search (0-1)"
|
|
@@ -94,7 +94,7 @@ class SearchService(BaseService):
|
|
|
94
94
|
)
|
|
95
95
|
request = CoreSearchRequest(
|
|
96
96
|
query=request_or_query,
|
|
97
|
-
|
|
97
|
+
namespaces=[namespace],
|
|
98
98
|
limit=limit,
|
|
99
99
|
cursor=cursor,
|
|
100
100
|
)
|
|
@@ -180,7 +180,7 @@ class SearchService(BaseService):
|
|
|
180
180
|
)
|
|
181
181
|
request = HybridSearchRequest(
|
|
182
182
|
query=request_or_query,
|
|
183
|
-
|
|
183
|
+
namespaces=[namespace],
|
|
184
184
|
semantic_weight=semantic_weight,
|
|
185
185
|
limit=limit,
|
|
186
186
|
cursor=cursor,
|
|
@@ -266,7 +266,7 @@ class AsyncSearchService(AsyncBaseService):
|
|
|
266
266
|
)
|
|
267
267
|
request = CoreSearchRequest(
|
|
268
268
|
query=request_or_query,
|
|
269
|
-
|
|
269
|
+
namespaces=[namespace],
|
|
270
270
|
limit=limit,
|
|
271
271
|
cursor=cursor,
|
|
272
272
|
)
|
|
@@ -352,7 +352,7 @@ class AsyncSearchService(AsyncBaseService):
|
|
|
352
352
|
)
|
|
353
353
|
request = HybridSearchRequest(
|
|
354
354
|
query=request_or_query,
|
|
355
|
-
|
|
355
|
+
namespaces=[namespace],
|
|
356
356
|
semantic_weight=semantic_weight,
|
|
357
357
|
limit=limit,
|
|
358
358
|
cursor=cursor,
|
|
@@ -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,
|
|
@@ -69,7 +69,7 @@ class TestSearchEndpoints:
|
|
|
69
69
|
)
|
|
70
70
|
def test_search_core_with_request(self, beta_client: DevRevClient) -> None:
|
|
71
71
|
"""Test search.core endpoint with request object."""
|
|
72
|
-
request = CoreSearchRequest(query="test",
|
|
72
|
+
request = CoreSearchRequest(query="test", namespaces=[SearchNamespace.WORK], limit=5)
|
|
73
73
|
result = beta_client.search.core(request)
|
|
74
74
|
assert result is not None
|
|
75
75
|
assert hasattr(result, "results")
|
|
@@ -96,7 +96,7 @@ class TestSearchEndpoints:
|
|
|
96
96
|
def test_search_hybrid_with_request(self, beta_client: DevRevClient) -> None:
|
|
97
97
|
"""Test search.hybrid endpoint with request object."""
|
|
98
98
|
request = HybridSearchRequest(
|
|
99
|
-
query="test",
|
|
99
|
+
query="test", namespaces=[SearchNamespace.WORK], limit=5, semantic_weight=0.5
|
|
100
100
|
)
|
|
101
101
|
result = beta_client.search.hybrid(request)
|
|
102
102
|
assert result is not None
|
|
@@ -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
|
|
@@ -46,7 +46,7 @@ class TestSearchService:
|
|
|
46
46
|
service = SearchService(mock_http_client)
|
|
47
47
|
request = CoreSearchRequest(
|
|
48
48
|
query="type:ticket AND status:open",
|
|
49
|
-
|
|
49
|
+
namespaces=[SearchNamespace.WORK],
|
|
50
50
|
limit=20,
|
|
51
51
|
)
|
|
52
52
|
result = service.core(request)
|
|
@@ -101,7 +101,7 @@ class TestSearchService:
|
|
|
101
101
|
service = SearchService(mock_http_client)
|
|
102
102
|
request = HybridSearchRequest(
|
|
103
103
|
query="authentication issues",
|
|
104
|
-
|
|
104
|
+
namespaces=[SearchNamespace.CONVERSATION],
|
|
105
105
|
semantic_weight=0.7,
|
|
106
106
|
limit=10,
|
|
107
107
|
)
|
|
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.1}/.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.1}/.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.1}/.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
|
{devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/authentication.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|