devrev-Python-SDK 2.12.2__tar.gz → 2.13.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.12.2 → devrev_python_sdk-2.13.0}/PKG-INFO +1 -1
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/changelog.md +15 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/pyproject.toml +1 -1
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/articles.py +112 -13
- devrev_python_sdk-2.13.0/src/devrev/utils/__init__.py +34 -0
- devrev_python_sdk-2.13.0/src/devrev/utils/content_converter.py +831 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/articles.py +12 -2
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_content_converter.py +287 -1
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/uv.lock +1 -1
- devrev_python_sdk-2.12.2/src/devrev/utils/__init__.py +0 -16
- devrev_python_sdk-2.12.2/src/devrev/utils/content_converter.py +0 -358
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/foreman.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/commands/foreman-work.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.dockerignore +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.env.sample +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/api-check.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/ci.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/deploy.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/docs.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/release.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.gitignore +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/CLAUDE.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/Dockerfile +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/SECURITY.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/augment-settings.json +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/benchmarks/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/context7.json +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/audit-logging-setup.sh +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/cloudbuild.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/monitoring/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/monitoring/alert-policies.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/monitoring/dashboard.json +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/monitoring/validate-config.sh +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/deploy/service.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docker-compose.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/search.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/client.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/config.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/models/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/models/works.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/api/services/works.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/examples/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/hooks/copy_llms.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/mcp/deployment.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/mcp/index.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/mcp/quickstart.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/mcp/tools-reference.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/docs/stylesheets/extra.css +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/llms-ctx-full.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/llms-ctx.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/llms-mcp.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/llms.txt +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/mkdocs.yml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/openapi-public.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/scripts/debug_articles.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/client.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/config.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/articles.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/artifacts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/parts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/search.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/models/works.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/artifacts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/search.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/services/works.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/config.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/middleware/audit.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/middleware/auth.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/server_info.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/server.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/parts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/question_answers.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/server_info.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/conftest.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_articles_lifecycle.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_mcp_articles.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_specialized_services_phase3.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/performance/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/performance/test_articles_performance.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_audit.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_server_info.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_articles.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_parts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_question_answers.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_articles.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_search.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/services/test_works.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_articles_unified.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_artifacts.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_backward_compatibility.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_client.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_error_handling.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.0}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-2.12.2 → devrev_python_sdk-2.13.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.13.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
|
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.13.0] - 2026-04-08
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Article content format detection and bidirectional conversion** (#160, PR #205)
|
|
15
|
+
- `detect_content_format()` — detects `devrev/rt`, `text/markdown`, `text/html`, or `text/plain`
|
|
16
|
+
- `devrev_rt_to_markdown()` — converts ProseMirror JSON to Markdown
|
|
17
|
+
- `devrev_rt_to_html()` — converts ProseMirror JSON to HTML with XSS-safe escaping
|
|
18
|
+
- `OutputFormat` type alias (`Literal["text/markdown", "text/html", "devrev/rt"]`)
|
|
19
|
+
- Four format constants: `CONTENT_FORMAT_DEVREV_RT`, `CONTENT_FORMAT_MARKDOWN`, `CONTENT_FORMAT_HTML`, `CONTENT_FORMAT_PLAIN`
|
|
20
|
+
- `get_with_content()` (sync + async) now accepts optional `output_format` parameter for automatic content conversion
|
|
21
|
+
- MCP tool `devrev_articles_get` accepts `output_format` when `include_content=True`
|
|
22
|
+
- `_convert_content()` validates output format and raises `ValueError` for invalid values
|
|
23
|
+
- All HTML output uses `html.escape()` for text and attributes; links include `rel="noopener noreferrer"`
|
|
24
|
+
|
|
10
25
|
## [2.12.2] - 2026-04-08
|
|
11
26
|
|
|
12
27
|
### Maintenance
|
|
@@ -35,15 +35,16 @@ from devrev.models.artifacts import (
|
|
|
35
35
|
)
|
|
36
36
|
from devrev.models.base import SetTagWithValue
|
|
37
37
|
from devrev.services.base import AsyncBaseService, BaseService
|
|
38
|
-
from devrev.utils.content_converter import
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
from devrev.utils.content_converter import (
|
|
39
|
+
CONTENT_FORMAT_DEVREV_RT,
|
|
40
|
+
CONTENT_FORMAT_HTML,
|
|
41
|
+
CONTENT_FORMAT_MARKDOWN,
|
|
42
|
+
OutputFormat,
|
|
43
|
+
detect_content_format,
|
|
44
|
+
devrev_rt_to_html,
|
|
45
|
+
devrev_rt_to_markdown,
|
|
46
|
+
html_to_devrev_rt,
|
|
47
|
+
)
|
|
47
48
|
|
|
48
49
|
|
|
49
50
|
def _extract_content_artifact_id(resource: dict[str, object]) -> str | None:
|
|
@@ -101,6 +102,69 @@ def _extract_content_format(resource: dict[str, object]) -> str:
|
|
|
101
102
|
return "text/plain"
|
|
102
103
|
|
|
103
104
|
|
|
105
|
+
def _convert_content(
|
|
106
|
+
content: str,
|
|
107
|
+
source_format: str,
|
|
108
|
+
target_format: str,
|
|
109
|
+
) -> tuple[str, str]:
|
|
110
|
+
"""Convert article content between formats.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
content: The raw content string.
|
|
114
|
+
source_format: The MIME type of *content* (e.g. ``"devrev/rt"``).
|
|
115
|
+
target_format: The desired output MIME type.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
A ``(converted_content, actual_format)`` tuple. If no conversion
|
|
119
|
+
is necessary (source == target, or conversion is not possible)
|
|
120
|
+
the original content and format are returned.
|
|
121
|
+
Raises:
|
|
122
|
+
ValueError: If *target_format* is not a recognised format.
|
|
123
|
+
"""
|
|
124
|
+
_VALID_FORMATS = {
|
|
125
|
+
CONTENT_FORMAT_MARKDOWN,
|
|
126
|
+
CONTENT_FORMAT_HTML,
|
|
127
|
+
CONTENT_FORMAT_DEVREV_RT,
|
|
128
|
+
}
|
|
129
|
+
if target_format not in _VALID_FORMATS:
|
|
130
|
+
raise ValueError(
|
|
131
|
+
f"Invalid output_format {target_format!r}. Accepted values: {sorted(_VALID_FORMATS)}"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
if source_format == target_format:
|
|
135
|
+
return content, source_format
|
|
136
|
+
|
|
137
|
+
# Auto-detect source format when unknown / generic
|
|
138
|
+
if source_format in ("text/plain", ""):
|
|
139
|
+
source_format = detect_content_format(content)
|
|
140
|
+
|
|
141
|
+
if target_format == CONTENT_FORMAT_MARKDOWN:
|
|
142
|
+
if source_format == CONTENT_FORMAT_DEVREV_RT:
|
|
143
|
+
return devrev_rt_to_markdown(content), CONTENT_FORMAT_MARKDOWN
|
|
144
|
+
# HTML or unknown → convert to devrev/rt first, then to markdown
|
|
145
|
+
if source_format == CONTENT_FORMAT_HTML:
|
|
146
|
+
rt = html_to_devrev_rt(content)
|
|
147
|
+
return devrev_rt_to_markdown(rt), CONTENT_FORMAT_MARKDOWN
|
|
148
|
+
# Already markdown or plain text
|
|
149
|
+
return content, source_format
|
|
150
|
+
|
|
151
|
+
if target_format == CONTENT_FORMAT_HTML:
|
|
152
|
+
if source_format == CONTENT_FORMAT_DEVREV_RT:
|
|
153
|
+
return devrev_rt_to_html(content), CONTENT_FORMAT_HTML
|
|
154
|
+
if source_format == CONTENT_FORMAT_MARKDOWN:
|
|
155
|
+
rt = html_to_devrev_rt(content)
|
|
156
|
+
return devrev_rt_to_html(rt), CONTENT_FORMAT_HTML
|
|
157
|
+
return content, source_format
|
|
158
|
+
|
|
159
|
+
if target_format == CONTENT_FORMAT_DEVREV_RT:
|
|
160
|
+
if source_format != CONTENT_FORMAT_DEVREV_RT:
|
|
161
|
+
return html_to_devrev_rt(content), CONTENT_FORMAT_DEVREV_RT
|
|
162
|
+
return content, source_format
|
|
163
|
+
|
|
164
|
+
# Unknown target format – return unchanged
|
|
165
|
+
return content, source_format
|
|
166
|
+
|
|
167
|
+
|
|
104
168
|
class ArticlesService(BaseService):
|
|
105
169
|
"""Service for managing DevRev Articles."""
|
|
106
170
|
|
|
@@ -313,17 +377,27 @@ class ArticlesService(BaseService):
|
|
|
313
377
|
# Re-raise the original error
|
|
314
378
|
raise DevRevError(f"Failed to create article with content: {e}") from e
|
|
315
379
|
|
|
316
|
-
def get_with_content(
|
|
380
|
+
def get_with_content(
|
|
381
|
+
self,
|
|
382
|
+
id: str,
|
|
383
|
+
*,
|
|
384
|
+
output_format: OutputFormat | None = None,
|
|
385
|
+
) -> ArticleWithContent:
|
|
317
386
|
"""Get an article with its content loaded.
|
|
318
387
|
|
|
319
388
|
This is a high-level method that:
|
|
320
389
|
1. Fetches article metadata
|
|
321
390
|
2. Locates the content artifact
|
|
322
391
|
3. Downloads artifact content
|
|
323
|
-
4.
|
|
392
|
+
4. Optionally converts to the requested output format
|
|
393
|
+
5. Returns combined model
|
|
324
394
|
|
|
325
395
|
Args:
|
|
326
396
|
id: Article ID
|
|
397
|
+
output_format: Desired output format for the content. Accepted
|
|
398
|
+
values: ``"text/markdown"``, ``"text/html"``, ``"devrev/rt"``.
|
|
399
|
+
When ``None`` (the default) the raw stored content is returned
|
|
400
|
+
as-is.
|
|
327
401
|
|
|
328
402
|
Returns:
|
|
329
403
|
ArticleWithContent with metadata and content
|
|
@@ -336,6 +410,9 @@ class ArticlesService(BaseService):
|
|
|
336
410
|
>>> article_with_content = client.articles.get_with_content("ART-123")
|
|
337
411
|
>>> print(article_with_content.article.title)
|
|
338
412
|
>>> print(article_with_content.content)
|
|
413
|
+
>>> # Get content as Markdown
|
|
414
|
+
>>> md = client.articles.get_with_content("ART-123", output_format="text/markdown")
|
|
415
|
+
>>> print(md.content)
|
|
339
416
|
"""
|
|
340
417
|
if not self._parent_client:
|
|
341
418
|
raise DevRevError(
|
|
@@ -364,12 +441,18 @@ class ArticlesService(BaseService):
|
|
|
364
441
|
# Get content format from resource metadata (more reliable than artifact.get)
|
|
365
442
|
content_format = _extract_content_format(article.resource)
|
|
366
443
|
|
|
444
|
+
# Step 4: Convert to requested output format if specified
|
|
445
|
+
if output_format is not None:
|
|
446
|
+
content, content_format = _convert_content(content, content_format, output_format)
|
|
447
|
+
|
|
367
448
|
return ArticleWithContent(
|
|
368
449
|
article=article,
|
|
369
450
|
content=content,
|
|
370
451
|
content_format=content_format,
|
|
371
452
|
content_version=None,
|
|
372
453
|
)
|
|
454
|
+
except DevRevError:
|
|
455
|
+
raise
|
|
373
456
|
except Exception as e:
|
|
374
457
|
raise DevRevError(f"Failed to download content for article {id}: {e}") from e
|
|
375
458
|
|
|
@@ -772,17 +855,27 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
772
855
|
# Re-raise the original error
|
|
773
856
|
raise DevRevError(f"Failed to create article with content: {e}") from e
|
|
774
857
|
|
|
775
|
-
async def get_with_content(
|
|
858
|
+
async def get_with_content(
|
|
859
|
+
self,
|
|
860
|
+
id: str,
|
|
861
|
+
*,
|
|
862
|
+
output_format: OutputFormat | None = None,
|
|
863
|
+
) -> ArticleWithContent:
|
|
776
864
|
"""Get an article with its content loaded (async).
|
|
777
865
|
|
|
778
866
|
This is a high-level method that:
|
|
779
867
|
1. Fetches article metadata
|
|
780
868
|
2. Locates the content artifact
|
|
781
869
|
3. Downloads artifact content
|
|
782
|
-
4.
|
|
870
|
+
4. Optionally converts to the requested output format
|
|
871
|
+
5. Returns combined model
|
|
783
872
|
|
|
784
873
|
Args:
|
|
785
874
|
id: Article ID
|
|
875
|
+
output_format: Desired output format for the content. Accepted
|
|
876
|
+
values: ``"text/markdown"``, ``"text/html"``, ``"devrev/rt"``.
|
|
877
|
+
When ``None`` (the default) the raw stored content is returned
|
|
878
|
+
as-is.
|
|
786
879
|
|
|
787
880
|
Returns:
|
|
788
881
|
ArticleWithContent with metadata and content
|
|
@@ -818,12 +911,18 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
818
911
|
# Get content format from resource metadata (more reliable than artifact.get)
|
|
819
912
|
content_format = _extract_content_format(article.resource)
|
|
820
913
|
|
|
914
|
+
# Step 4: Convert to requested output format if specified
|
|
915
|
+
if output_format is not None:
|
|
916
|
+
content, content_format = _convert_content(content, content_format, output_format)
|
|
917
|
+
|
|
821
918
|
return ArticleWithContent(
|
|
822
919
|
article=article,
|
|
823
920
|
content=content,
|
|
824
921
|
content_format=content_format,
|
|
825
922
|
content_version=None,
|
|
826
923
|
)
|
|
924
|
+
except DevRevError:
|
|
925
|
+
raise
|
|
827
926
|
except Exception as e:
|
|
828
927
|
raise DevRevError(f"Failed to download content for article {id}: {e}") from e
|
|
829
928
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""DevRev SDK Utilities.
|
|
2
|
+
|
|
3
|
+
This module contains utility functions and classes used throughout the SDK.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from devrev.utils.content_converter import (
|
|
7
|
+
CONTENT_FORMAT_DEVREV_RT,
|
|
8
|
+
CONTENT_FORMAT_HTML,
|
|
9
|
+
CONTENT_FORMAT_MARKDOWN,
|
|
10
|
+
CONTENT_FORMAT_PLAIN,
|
|
11
|
+
OutputFormat,
|
|
12
|
+
detect_content_format,
|
|
13
|
+
devrev_rt_to_html,
|
|
14
|
+
devrev_rt_to_markdown,
|
|
15
|
+
html_to_devrev_rt,
|
|
16
|
+
)
|
|
17
|
+
from devrev.utils.deprecation import deprecated
|
|
18
|
+
from devrev.utils.logging import ColoredFormatter, configure_logging, get_logger
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"CONTENT_FORMAT_DEVREV_RT",
|
|
22
|
+
"CONTENT_FORMAT_HTML",
|
|
23
|
+
"CONTENT_FORMAT_MARKDOWN",
|
|
24
|
+
"CONTENT_FORMAT_PLAIN",
|
|
25
|
+
"OutputFormat",
|
|
26
|
+
"ColoredFormatter",
|
|
27
|
+
"configure_logging",
|
|
28
|
+
"deprecated",
|
|
29
|
+
"detect_content_format",
|
|
30
|
+
"devrev_rt_to_html",
|
|
31
|
+
"devrev_rt_to_markdown",
|
|
32
|
+
"get_logger",
|
|
33
|
+
"html_to_devrev_rt",
|
|
34
|
+
]
|