devrev-Python-SDK 2.10.0__tar.gz → 2.10.2__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.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/api-check.yml +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/ci.yml +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/deploy.yml +2 -2
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/docs.yml +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/release.yml +4 -4
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/PKG-INFO +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/changelog.md +28 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-mcp.txt +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms.txt +1 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/pyproject.toml +1 -1
- devrev_python_sdk-2.10.2/scripts/debug_articles.py +200 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/articles.py +70 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/parts.py +16 -1
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/articles.py +27 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/articles.py +36 -8
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/parts.py +10 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_articles.py +27 -2
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_parts.py +79 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/uv.lock +32 -4
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/foreman.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/foreman-work.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.dockerignore +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.env.sample +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.gitignore +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CLAUDE.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/Dockerfile +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/SECURITY.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-settings.json +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/context7.json +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/audit-logging-setup.sh +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/cloudbuild.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/alert-policies.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/dashboard.json +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/validate-config.sh +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/service.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docker-compose.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/search.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/client.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/config.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/works.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/works.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/hooks/copy_llms.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/deployment.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/index.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/quickstart.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/tools-reference.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/stylesheets/extra.css +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-ctx-full.txt +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-ctx.txt +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/mkdocs.yml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-public.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/client.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/config.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/artifacts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/search.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/works.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/artifacts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/search.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/works.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/content_converter.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/config.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/audit.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/auth.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/server_info.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/server.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/server_info.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/conftest.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_articles_lifecycle.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_mcp_articles.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_specialized_services_phase3.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/performance/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/performance/test_articles_performance.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_audit.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_server_info.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_articles.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_search.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_works.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_articles_unified.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_artifacts.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_backward_compatibility.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_client.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_content_converter.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_error_handling.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_pagination.py +0 -0
|
@@ -42,13 +42,13 @@ jobs:
|
|
|
42
42
|
echo "Deploying version: $VERSION"
|
|
43
43
|
|
|
44
44
|
- name: Authenticate to Google Cloud (WIF)
|
|
45
|
-
uses: google-github-actions/auth@
|
|
45
|
+
uses: google-github-actions/auth@v3
|
|
46
46
|
with:
|
|
47
47
|
workload_identity_provider: ${{ secrets.WIF_PROVIDER }}
|
|
48
48
|
service_account: ${{ secrets.WIF_SERVICE_ACCOUNT }}
|
|
49
49
|
|
|
50
50
|
- name: Set up Cloud SDK
|
|
51
|
-
uses: google-github-actions/setup-gcloud@
|
|
51
|
+
uses: google-github-actions/setup-gcloud@v3
|
|
52
52
|
|
|
53
53
|
- name: Configure Docker for Artifact Registry
|
|
54
54
|
run: |
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
python-version: '3.12'
|
|
33
33
|
|
|
34
34
|
- name: Install uv
|
|
35
|
-
uses: astral-sh/setup-uv@
|
|
35
|
+
uses: astral-sh/setup-uv@v7
|
|
36
36
|
|
|
37
37
|
- name: Install dependencies
|
|
38
38
|
run: uv sync --frozen --all-extras
|
|
@@ -77,7 +77,7 @@ jobs:
|
|
|
77
77
|
python -c "import devrev; print(f'Installed: devrev')"
|
|
78
78
|
|
|
79
79
|
- name: Upload artifacts
|
|
80
|
-
uses: actions/upload-artifact@
|
|
80
|
+
uses: actions/upload-artifact@v7
|
|
81
81
|
with:
|
|
82
82
|
name: dist
|
|
83
83
|
path: dist/
|
|
@@ -93,7 +93,7 @@ jobs:
|
|
|
93
93
|
url: https://pypi.org/project/py-devrev/
|
|
94
94
|
steps:
|
|
95
95
|
- name: Download artifacts
|
|
96
|
-
uses: actions/download-artifact@
|
|
96
|
+
uses: actions/download-artifact@v8
|
|
97
97
|
with:
|
|
98
98
|
name: dist
|
|
99
99
|
path: dist/
|
|
@@ -115,7 +115,7 @@ jobs:
|
|
|
115
115
|
fetch-depth: 0
|
|
116
116
|
|
|
117
117
|
- name: Download artifacts
|
|
118
|
-
uses: actions/download-artifact@
|
|
118
|
+
uses: actions/download-artifact@v8
|
|
119
119
|
with:
|
|
120
120
|
name: dist
|
|
121
121
|
path: dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devrev-Python-SDK
|
|
3
|
-
Version: 2.10.
|
|
3
|
+
Version: 2.10.2
|
|
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,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.10.2] - 2026-03-11
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Parts API missing parameters** (#158) — Added `owned_by`, `parent_part`, and `tags` parameters to `devrev_parts_create` MCP tool for full API compatibility.
|
|
15
|
+
- **Article API missing properties** (#159) — Added missing `access_level`, `authored_by`, `extracted_content`, `owned_by`, `published_at`, `scope`, `shared_with`, `tags`, and `verified_by` fields to article models.
|
|
16
|
+
|
|
17
|
+
### Maintenance
|
|
18
|
+
|
|
19
|
+
- **Dependency updates** (#182) — Consolidated Dependabot updates (March 2026):
|
|
20
|
+
- Multiple dependency version updates via automated security scanning
|
|
21
|
+
- **Documentation** — Updated `llms.txt` and `llms-mcp.txt` version references to 2.10.1.
|
|
22
|
+
|
|
23
|
+
## [2.10.1] - 2026-03-10
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- **MCP articles_list bug** (#170) — Fixed `'tuple' object has no attribute 'model_dump'` error in `devrev_articles_list` MCP tool by correctly accessing `response.articles` instead of calling `list()` on the Pydantic response model. Added `paginated_response()` helper for consistent pagination handling.
|
|
28
|
+
- **CI formatting** (#175) — Resolved formatting check failures in `scripts/debug_articles.py`.
|
|
29
|
+
|
|
30
|
+
### Maintenance
|
|
31
|
+
|
|
32
|
+
- **Dependency updates** (#177) — Consolidated Dependabot updates:
|
|
33
|
+
- `actions/download-artifact` v7 → v8
|
|
34
|
+
- `codecov/codecov-action` v3 → v5
|
|
35
|
+
- `google-github-actions/auth` v2 → v3
|
|
36
|
+
- `authlib` 1.6.6 → 1.6.9 (security fix: removes "none" algorithm from default JWT instance)
|
|
37
|
+
|
|
10
38
|
## [2.10.0] - 2026-03-09
|
|
11
39
|
|
|
12
40
|
### Added
|
|
@@ -10,7 +10,7 @@ Key information:
|
|
|
10
10
|
- Both sync and async clients available (DevRevClient, AsyncDevRevClient)
|
|
11
11
|
- Uses Pydantic v2 for all request/response models
|
|
12
12
|
- MCP Server command: `devrev-mcp-server`
|
|
13
|
-
- Version 2.
|
|
13
|
+
- Version 2.10.1 (current)
|
|
14
14
|
|
|
15
15
|
## SDK Quick Start
|
|
16
16
|
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Debug script for article content creation and inspection.
|
|
3
|
+
|
|
4
|
+
Usage: python3 scripts/debug_articles.py
|
|
5
|
+
Requires: DEVREV_API_TOKEN environment variable
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
# Add src to path
|
|
13
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
|
|
14
|
+
|
|
15
|
+
from devrev.client import DevRevClient # noqa: E402
|
|
16
|
+
from devrev.models.articles import ( # noqa: E402
|
|
17
|
+
ArticlesGetRequest,
|
|
18
|
+
ArticleStatus,
|
|
19
|
+
)
|
|
20
|
+
from devrev.models.artifacts import ArtifactGetRequest # noqa: E402
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def inspect_article(client: DevRevClient, article_id: str) -> None:
|
|
24
|
+
"""Inspect an article and its artifact content."""
|
|
25
|
+
print("\n" + "=" * 60)
|
|
26
|
+
print(f"INSPECTING ARTICLE: {article_id}")
|
|
27
|
+
print("=" * 60)
|
|
28
|
+
|
|
29
|
+
# Get article metadata
|
|
30
|
+
article = client.articles.get(ArticlesGetRequest(id=article_id))
|
|
31
|
+
print(f"\nTitle: {article.title}")
|
|
32
|
+
print(f"Status: {article.status}")
|
|
33
|
+
print(f"Description: {article.description}")
|
|
34
|
+
print(f"Resource: {json.dumps(article.resource, indent=2, default=str)}")
|
|
35
|
+
|
|
36
|
+
# Try to get content artifact
|
|
37
|
+
if article.resource:
|
|
38
|
+
# Check for artifacts array (how DevRev stores them)
|
|
39
|
+
artifacts = article.resource.get("artifacts", [])
|
|
40
|
+
if artifacts:
|
|
41
|
+
for art_info in artifacts:
|
|
42
|
+
art_id = art_info.get("id", "")
|
|
43
|
+
file_info = art_info.get("file", {})
|
|
44
|
+
print(f"\n--- Artifact: {art_id} ---")
|
|
45
|
+
print(f" File name: {file_info.get('name')}")
|
|
46
|
+
print(f" File type: {file_info.get('type')}")
|
|
47
|
+
print(f" File size: {file_info.get('size')}")
|
|
48
|
+
|
|
49
|
+
# Get full artifact metadata
|
|
50
|
+
try:
|
|
51
|
+
artifact = client.artifacts.get(ArtifactGetRequest(id=art_id))
|
|
52
|
+
print(f" Artifact metadata - file_name: {artifact.file_name}")
|
|
53
|
+
print(f" Artifact metadata - file_type: {artifact.file_type}")
|
|
54
|
+
print(f" Artifact metadata - version: {artifact.version}")
|
|
55
|
+
except Exception as e:
|
|
56
|
+
print(f" Error getting artifact metadata: {e}")
|
|
57
|
+
|
|
58
|
+
# Download content
|
|
59
|
+
try:
|
|
60
|
+
content_bytes = client.artifacts.download(art_id)
|
|
61
|
+
content = content_bytes.decode("utf-8")
|
|
62
|
+
print(f" Content length: {len(content)}")
|
|
63
|
+
print(" Content preview (first 2000 chars):")
|
|
64
|
+
print(f" {content[:2000]}")
|
|
65
|
+
if len(content) > 2000:
|
|
66
|
+
print(f" ... ({len(content) - 2000} more chars)")
|
|
67
|
+
except Exception as e:
|
|
68
|
+
print(f" Error downloading content: {e}")
|
|
69
|
+
|
|
70
|
+
# Check for content_artifact reference (how our SDK stores them)
|
|
71
|
+
content_artifact_id = article.resource.get("content_artifact")
|
|
72
|
+
if content_artifact_id:
|
|
73
|
+
print(f"\n--- Content Artifact (SDK style): {content_artifact_id} ---")
|
|
74
|
+
try:
|
|
75
|
+
content_bytes = client.artifacts.download(content_artifact_id)
|
|
76
|
+
content = content_bytes.decode("utf-8")
|
|
77
|
+
print(f" Content length: {len(content)}")
|
|
78
|
+
print(f" Content preview: {content[:1000]}")
|
|
79
|
+
except Exception as e:
|
|
80
|
+
print(f" Error: {e}")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_create_article(client: DevRevClient, owner_id: str) -> None:
|
|
84
|
+
"""Test creating an article with HTML content."""
|
|
85
|
+
print("\n" + "=" * 60)
|
|
86
|
+
print("TEST: Creating article with HTML content")
|
|
87
|
+
print("=" * 60)
|
|
88
|
+
|
|
89
|
+
html_content = """<h1>Test Article from py-dev-rev SDK</h1>
|
|
90
|
+
<p>This is a <strong>test article</strong> created via the py-dev-rev SDK.</p>
|
|
91
|
+
<h2>Features</h2>
|
|
92
|
+
<ul>
|
|
93
|
+
<li>Rich <em>formatted</em> text</li>
|
|
94
|
+
<li>Lists and headings</li>
|
|
95
|
+
<li>Code: <code>print("hello")</code></li>
|
|
96
|
+
</ul>
|
|
97
|
+
<p>Created at: 2026-03-07 for debugging purposes.</p>"""
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
article = client.articles.create_with_content(
|
|
101
|
+
title="SDK Test - Rich Content Article",
|
|
102
|
+
content=html_content,
|
|
103
|
+
owned_by=[owner_id],
|
|
104
|
+
description="Test article created by py-dev-rev SDK debug script",
|
|
105
|
+
status=ArticleStatus.DRAFT,
|
|
106
|
+
content_format="text/html",
|
|
107
|
+
)
|
|
108
|
+
print(f"✅ Article created: {article.id} (display: {article.display_id})")
|
|
109
|
+
print(f" Title: {article.title}")
|
|
110
|
+
print(f" Resource: {json.dumps(article.resource, indent=2, default=str)}")
|
|
111
|
+
|
|
112
|
+
# Now test get_with_content on the new article
|
|
113
|
+
test_get_with_content(client, article.id)
|
|
114
|
+
|
|
115
|
+
# Now test update_content
|
|
116
|
+
test_update_content(client, article.id)
|
|
117
|
+
|
|
118
|
+
except Exception as e:
|
|
119
|
+
print(f"❌ Failed to create article: {e}")
|
|
120
|
+
import traceback
|
|
121
|
+
|
|
122
|
+
traceback.print_exc()
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def test_get_with_content(client: DevRevClient, article_id: str) -> None:
|
|
126
|
+
"""Test the get_with_content method."""
|
|
127
|
+
print("\n" + "=" * 60)
|
|
128
|
+
print(f"TEST: get_with_content for {article_id}")
|
|
129
|
+
print("=" * 60)
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
result = client.articles.get_with_content(article_id)
|
|
133
|
+
print("✅ get_with_content succeeded!")
|
|
134
|
+
print(f" Title: {result.article.title}")
|
|
135
|
+
print(f" Content format: {result.content_format}")
|
|
136
|
+
print(f" Content version: {result.content_version}")
|
|
137
|
+
print(f" Content length: {len(result.content)}")
|
|
138
|
+
print(f" Content preview: {result.content[:500]}")
|
|
139
|
+
except Exception as e:
|
|
140
|
+
print(f"❌ get_with_content failed: {e}")
|
|
141
|
+
import traceback
|
|
142
|
+
|
|
143
|
+
traceback.print_exc()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def test_update_content(client: DevRevClient, article_id: str) -> None:
|
|
147
|
+
"""Test updating article content."""
|
|
148
|
+
print("\n" + "=" * 60)
|
|
149
|
+
print(f"TEST: update_content for {article_id}")
|
|
150
|
+
print("=" * 60)
|
|
151
|
+
|
|
152
|
+
updated_html = """<h1>Updated Article</h1>
|
|
153
|
+
<p>This content was <strong>updated</strong> by the py-dev-rev SDK.</p>
|
|
154
|
+
<p>Updated at: 2026-03-07</p>"""
|
|
155
|
+
|
|
156
|
+
try:
|
|
157
|
+
article = client.articles.update_content(article_id, updated_html)
|
|
158
|
+
print("✅ update_content succeeded!")
|
|
159
|
+
print(f" Title: {article.title}")
|
|
160
|
+
print(f" Resource: {json.dumps(article.resource, indent=2, default=str)}")
|
|
161
|
+
|
|
162
|
+
# Verify by re-reading
|
|
163
|
+
result = client.articles.get_with_content(article_id)
|
|
164
|
+
print(f" Verified content length: {len(result.content)}")
|
|
165
|
+
print(f" Verified content: {result.content[:300]}")
|
|
166
|
+
except Exception as e:
|
|
167
|
+
print(f"❌ update_content failed: {e}")
|
|
168
|
+
import traceback
|
|
169
|
+
|
|
170
|
+
traceback.print_exc()
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def main() -> None:
|
|
174
|
+
"""Run article diagnostics."""
|
|
175
|
+
token = os.environ.get("DEVREV_API_TOKEN")
|
|
176
|
+
if not token:
|
|
177
|
+
print("ERROR: DEVREV_API_TOKEN environment variable not set")
|
|
178
|
+
sys.exit(1)
|
|
179
|
+
|
|
180
|
+
client = DevRevClient()
|
|
181
|
+
|
|
182
|
+
# 1. Inspect the known working article ART-2817
|
|
183
|
+
art_2817_id = "don:core:dvrv-us-1:devo/11Ca9baGrM:article/2817"
|
|
184
|
+
inspect_article(client, art_2817_id)
|
|
185
|
+
|
|
186
|
+
# 2. Test get_with_content on ART-2817
|
|
187
|
+
test_get_with_content(client, art_2817_id)
|
|
188
|
+
|
|
189
|
+
# 3. Get owner ID for creating test articles
|
|
190
|
+
owner_id = "don:identity:dvrv-us-1:devo/11Ca9baGrM:devu/4" # MGM
|
|
191
|
+
|
|
192
|
+
# 4. Try creating a new article with HTML content
|
|
193
|
+
test_create_article(client, owner_id)
|
|
194
|
+
|
|
195
|
+
# 5. Test get_with_content on the newly created article
|
|
196
|
+
# (test_create_article already inspects it, but let's also test the unified method)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
if __name__ == "__main__":
|
|
200
|
+
main()
|
|
@@ -94,6 +94,29 @@ class ArticleParentSummary(DevRevResponseModel):
|
|
|
94
94
|
display_id: str | None = Field(default=None, description="Display ID")
|
|
95
95
|
|
|
96
96
|
|
|
97
|
+
class ArtifactSummary(DevRevResponseModel):
|
|
98
|
+
"""Summary of an artifact (used for extracted_content)."""
|
|
99
|
+
|
|
100
|
+
id: str = Field(..., description="Artifact DON ID")
|
|
101
|
+
display_id: str | None = Field(default=None, description="Display ID")
|
|
102
|
+
file: dict[str, Any] | None = Field(default=None, description="File metadata")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class SyncMetadata(DevRevResponseModel):
|
|
106
|
+
"""Sync information for records synced into/from DevRev."""
|
|
107
|
+
|
|
108
|
+
external_reference: str | None = Field(default=None, description="External record URL")
|
|
109
|
+
origin_system: str | None = Field(
|
|
110
|
+
default=None, description="Where the record was first created"
|
|
111
|
+
)
|
|
112
|
+
last_sync_in: dict[str, Any] | None = Field(
|
|
113
|
+
default=None, description="Information about the sync to DevRev"
|
|
114
|
+
)
|
|
115
|
+
last_sync_out: dict[str, Any] | None = Field(
|
|
116
|
+
default=None, description="Information about the sync from DevRev"
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
97
120
|
class Article(DevRevResponseModel):
|
|
98
121
|
"""DevRev Article model.
|
|
99
122
|
|
|
@@ -106,13 +129,29 @@ class Article(DevRevResponseModel):
|
|
|
106
129
|
title: str = Field(..., description="Article title")
|
|
107
130
|
description: str | None = Field(default=None, description="Article description/body")
|
|
108
131
|
status: ArticleStatus | None = Field(default=None, description="Article status")
|
|
132
|
+
access_level: ArticleAccessLevel | None = Field(
|
|
133
|
+
default=None, description="Access level (external, internal, private, public, restricted)"
|
|
134
|
+
)
|
|
135
|
+
aliases: list[str] | None = Field(default=None, description="Aliases of the article")
|
|
109
136
|
article_type: str | None = Field(default=None, description="Article type (article, page, etc.)")
|
|
110
137
|
authored_by: list[UserSummary] | None = Field(
|
|
111
138
|
default=None, description="Authors of the article (API returns array, not single object)"
|
|
112
139
|
)
|
|
140
|
+
brand: dict[str, Any] | None = Field(
|
|
141
|
+
default=None, description="Brand associated with the article"
|
|
142
|
+
)
|
|
113
143
|
owned_by: list[UserSummary] | None = Field(default=None, description="Owners of the article")
|
|
114
144
|
created_date: datetime | None = Field(default=None, description="Creation date")
|
|
115
145
|
modified_date: datetime | None = Field(default=None, description="Last modified")
|
|
146
|
+
extracted_content: list[ArtifactSummary] | None = Field(
|
|
147
|
+
default=None, description="Extracted content artifacts"
|
|
148
|
+
)
|
|
149
|
+
num_downvotes: int | None = Field(
|
|
150
|
+
default=None, description="Number of downvotes on the article"
|
|
151
|
+
)
|
|
152
|
+
num_upvotes: int | None = Field(default=None, description="Number of upvotes on the article")
|
|
153
|
+
published_at: datetime | None = Field(default=None, description="Published date of the article")
|
|
154
|
+
rank: str | None = Field(default=None, description="Rank of the article")
|
|
116
155
|
resource: dict[str, Any] | None = Field(
|
|
117
156
|
default=None, description="Resource configuration including artifact references"
|
|
118
157
|
)
|
|
@@ -122,6 +161,9 @@ class Article(DevRevResponseModel):
|
|
|
122
161
|
scope: ArticleScope | None = Field(
|
|
123
162
|
default=None, description="Visibility scope (internal/external)"
|
|
124
163
|
)
|
|
164
|
+
sync_metadata: SyncMetadata | None = Field(
|
|
165
|
+
default=None, description="Sync information for records synced into/from DevRev"
|
|
166
|
+
)
|
|
125
167
|
tags: list[ArticleTagWithValue] | None = Field(
|
|
126
168
|
default=None, description="Tags applied to the article"
|
|
127
169
|
)
|
|
@@ -129,6 +171,7 @@ class Article(DevRevResponseModel):
|
|
|
129
171
|
default=None, description="Parent directory/collection"
|
|
130
172
|
)
|
|
131
173
|
language: str | None = Field(default=None, description="Language code (e.g., 'en')")
|
|
174
|
+
url: str | None = Field(default=None, description="URL of the external article")
|
|
132
175
|
|
|
133
176
|
|
|
134
177
|
class ArticleSummary(DevRevResponseModel):
|
|
@@ -168,6 +211,28 @@ class ArticlesCreateRequest(DevRevBaseModel):
|
|
|
168
211
|
title: str = Field(..., description="Article title")
|
|
169
212
|
description: str | None = Field(default=None, description="Article description/body")
|
|
170
213
|
status: ArticleStatus | None = Field(default=None, description="Article status")
|
|
214
|
+
access_level: ArticleAccessLevel | None = Field(
|
|
215
|
+
default=None, description="Access level (external, internal, private, public, restricted)"
|
|
216
|
+
)
|
|
217
|
+
aliases: list[str] | None = Field(default=None, description="Aliases of the article (max 5)")
|
|
218
|
+
authored_by: list[str] | None = Field(
|
|
219
|
+
default=None, description="List of user IDs who author the article"
|
|
220
|
+
)
|
|
221
|
+
brand: str | None = Field(default=None, description="Brand ID associated with the article")
|
|
222
|
+
content_format: ArticleContentFormat | None = Field(
|
|
223
|
+
default=None, description="Content format (drdfv2, rt)"
|
|
224
|
+
)
|
|
225
|
+
custom_fields: dict[str, Any] | None = Field(
|
|
226
|
+
default=None, description="Application-defined custom fields"
|
|
227
|
+
)
|
|
228
|
+
custom_schema_spec: CustomSchemaSpec | None = Field(
|
|
229
|
+
default=None, description="Custom schema spec"
|
|
230
|
+
)
|
|
231
|
+
extracted_content: list[str] | None = Field(
|
|
232
|
+
default=None, description="IDs of extracted content artifacts"
|
|
233
|
+
)
|
|
234
|
+
language: str | None = Field(default=None, description="Language of the article")
|
|
235
|
+
notify: bool | None = Field(default=None, description="Whether to notify users when published")
|
|
171
236
|
owned_by: list[str] = Field(..., description="List of dev user IDs who own the article")
|
|
172
237
|
resource: dict[str, Any] = Field(
|
|
173
238
|
default_factory=dict, description="Resource configuration for the article"
|
|
@@ -176,6 +241,9 @@ class ArticlesCreateRequest(DevRevBaseModel):
|
|
|
176
241
|
default=None, description="List of part IDs this article applies to"
|
|
177
242
|
)
|
|
178
243
|
scope: int | None = Field(default=None, description="Visibility scope: 1=internal, 2=external")
|
|
244
|
+
shared_with: list[SetSharedWithMembership] | None = Field(
|
|
245
|
+
default=None, description="Users/groups to share the article with"
|
|
246
|
+
)
|
|
179
247
|
tags: list[SetTagWithValue] | None = Field(
|
|
180
248
|
default=None, description="Tags to apply (list of {'id': 'tag_id', 'value': ...})"
|
|
181
249
|
)
|
|
@@ -183,6 +251,8 @@ class ArticlesCreateRequest(DevRevBaseModel):
|
|
|
183
251
|
article_type: str | None = Field(
|
|
184
252
|
default=None, description="Article type: 'article' (default), 'page', 'content_block'"
|
|
185
253
|
)
|
|
254
|
+
published_at: datetime | None = Field(default=None, description="Published date of the article")
|
|
255
|
+
release_notes: str | None = Field(default=None, description="Release notes for the article")
|
|
186
256
|
|
|
187
257
|
|
|
188
258
|
class ArticlesGetRequest(DevRevBaseModel):
|
|
@@ -53,11 +53,26 @@ class PartSummary(DevRevResponseModel):
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class PartsCreateRequest(DevRevBaseModel):
|
|
56
|
-
"""Request to create a part.
|
|
56
|
+
"""Request to create a part.
|
|
57
|
+
|
|
58
|
+
For non-product parts (capability, feature, enhancement), the parent_part
|
|
59
|
+
parameter is required to specify the parent part in the hierarchy.
|
|
60
|
+
"""
|
|
57
61
|
|
|
58
62
|
name: str = Field(..., description="Part name")
|
|
59
63
|
type: PartType = Field(..., description="Part type")
|
|
60
64
|
description: str | None = Field(default=None, description="Description")
|
|
65
|
+
owned_by: list[str] | None = Field(
|
|
66
|
+
default=None,
|
|
67
|
+
description="List of owner user IDs (e.g., ['DEVU-4'] or full DON IDs)",
|
|
68
|
+
)
|
|
69
|
+
parent_part: list[str] | None = Field(
|
|
70
|
+
default=None,
|
|
71
|
+
description="Parent part ID (required for capability/feature/enhancement). "
|
|
72
|
+
"Array with at most 1 element.",
|
|
73
|
+
max_length=1,
|
|
74
|
+
)
|
|
75
|
+
tags: list[str] | None = Field(default=None, description="List of tag IDs")
|
|
61
76
|
|
|
62
77
|
|
|
63
78
|
class PartsGetRequest(DevRevBaseModel):
|
|
@@ -196,12 +196,15 @@ class ArticlesService(BaseService):
|
|
|
196
196
|
owned_by: builtins.list[str],
|
|
197
197
|
description: str | None = None,
|
|
198
198
|
status: ArticleStatus | None = None,
|
|
199
|
+
access_level: ArticleAccessLevel | None = None,
|
|
199
200
|
content_format: str = "text/plain",
|
|
200
201
|
applies_to_parts: builtins.list[str] | None = None,
|
|
201
202
|
scope: int | None = None,
|
|
202
203
|
tags: builtins.list[SetTagWithValue] | None = None,
|
|
203
204
|
parent: str | None = None,
|
|
204
205
|
article_type: str | None = None,
|
|
206
|
+
language: str | None = None,
|
|
207
|
+
authored_by: builtins.list[str] | None = None,
|
|
205
208
|
) -> Article:
|
|
206
209
|
"""Create an article with content in a single operation.
|
|
207
210
|
|
|
@@ -218,12 +221,15 @@ class ArticlesService(BaseService):
|
|
|
218
221
|
owned_by: List of dev user IDs who own the article
|
|
219
222
|
description: Optional short metadata description (NOT the article content)
|
|
220
223
|
status: Optional article status (draft, published, archived)
|
|
224
|
+
access_level: Optional access level (external, internal, private, public, restricted)
|
|
221
225
|
content_format: Content MIME type (default: text/plain)
|
|
222
226
|
applies_to_parts: Optional list of part IDs to associate with
|
|
223
227
|
scope: Optional visibility scope (1=internal, 2=external)
|
|
224
228
|
tags: Optional tags (list of SetTagWithValue)
|
|
225
229
|
parent: Optional parent directory/collection DON ID
|
|
226
230
|
article_type: Optional article type ('article', 'page', 'content_block')
|
|
231
|
+
language: Optional language code (e.g., 'en')
|
|
232
|
+
authored_by: Optional list of user IDs who author the article
|
|
227
233
|
|
|
228
234
|
Returns:
|
|
229
235
|
Created article
|
|
@@ -239,6 +245,7 @@ class ArticlesService(BaseService):
|
|
|
239
245
|
... content_format="text/html",
|
|
240
246
|
... applies_to_parts=["don:core:...:feature/30"],
|
|
241
247
|
... scope=2, # external
|
|
248
|
+
... access_level=ArticleAccessLevel.EXTERNAL,
|
|
242
249
|
... )
|
|
243
250
|
"""
|
|
244
251
|
if not self._parent_client:
|
|
@@ -275,6 +282,7 @@ class ArticlesService(BaseService):
|
|
|
275
282
|
title=title,
|
|
276
283
|
description=description,
|
|
277
284
|
status=status,
|
|
285
|
+
access_level=access_level,
|
|
278
286
|
owned_by=owned_by,
|
|
279
287
|
resource={"content_artifact": artifact_id},
|
|
280
288
|
applies_to_parts=applies_to_parts,
|
|
@@ -282,6 +290,8 @@ class ArticlesService(BaseService):
|
|
|
282
290
|
tags=tags,
|
|
283
291
|
parent=parent,
|
|
284
292
|
article_type=article_type,
|
|
293
|
+
language=language,
|
|
294
|
+
authored_by=authored_by,
|
|
285
295
|
)
|
|
286
296
|
return self.create(article_req)
|
|
287
297
|
|
|
@@ -443,6 +453,7 @@ class ArticlesService(BaseService):
|
|
|
443
453
|
applies_to_parts: builtins.list[str] | None = None,
|
|
444
454
|
access_level: ArticleAccessLevel | None = None,
|
|
445
455
|
tags: builtins.list[SetTagWithValue] | None = None,
|
|
456
|
+
language: str | None = None,
|
|
446
457
|
) -> Article:
|
|
447
458
|
"""Update article metadata and/or content.
|
|
448
459
|
|
|
@@ -460,6 +471,7 @@ class ArticlesService(BaseService):
|
|
|
460
471
|
applies_to_parts: Optional list of part IDs to associate with
|
|
461
472
|
access_level: Optional access level (internal, external, private, public)
|
|
462
473
|
tags: Optional list of tags to apply (list of SetTagWithValue objects)
|
|
474
|
+
language: Optional language code (e.g., 'en')
|
|
463
475
|
|
|
464
476
|
Returns:
|
|
465
477
|
Updated article
|
|
@@ -528,6 +540,7 @@ class ArticlesService(BaseService):
|
|
|
528
540
|
or applies_to_parts is not None
|
|
529
541
|
or access_level is not None
|
|
530
542
|
or tags is not None
|
|
543
|
+
or language is not None
|
|
531
544
|
)
|
|
532
545
|
if has_metadata:
|
|
533
546
|
update_req = ArticlesUpdateRequest(
|
|
@@ -538,6 +551,7 @@ class ArticlesService(BaseService):
|
|
|
538
551
|
applies_to_parts=applies_to_parts_req,
|
|
539
552
|
access_level=access_level,
|
|
540
553
|
tags=tags_req,
|
|
554
|
+
language=language,
|
|
541
555
|
)
|
|
542
556
|
return self.update(update_req)
|
|
543
557
|
|
|
@@ -642,12 +656,15 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
642
656
|
owned_by: builtins.list[str],
|
|
643
657
|
description: str | None = None,
|
|
644
658
|
status: ArticleStatus | None = None,
|
|
659
|
+
access_level: ArticleAccessLevel | None = None,
|
|
645
660
|
content_format: str = "text/plain",
|
|
646
661
|
applies_to_parts: builtins.list[str] | None = None,
|
|
647
662
|
scope: int | None = None,
|
|
648
663
|
tags: builtins.list[SetTagWithValue] | None = None,
|
|
649
664
|
parent: str | None = None,
|
|
650
665
|
article_type: str | None = None,
|
|
666
|
+
language: str | None = None,
|
|
667
|
+
authored_by: builtins.list[str] | None = None,
|
|
651
668
|
) -> Article:
|
|
652
669
|
"""Create an article with content in a single operation (async).
|
|
653
670
|
|
|
@@ -664,12 +681,15 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
664
681
|
owned_by: List of dev user IDs who own the article
|
|
665
682
|
description: Optional short metadata description (NOT the article content)
|
|
666
683
|
status: Optional article status (draft, published, archived)
|
|
684
|
+
access_level: Optional access level (external, internal, private, public, restricted)
|
|
667
685
|
content_format: Content MIME type (default: text/plain)
|
|
668
686
|
applies_to_parts: Optional list of part IDs to associate with
|
|
669
687
|
scope: Optional visibility scope (1=internal, 2=external)
|
|
670
688
|
tags: Optional tags (list of SetTagWithValue)
|
|
671
689
|
parent: Optional parent directory/collection DON ID
|
|
672
690
|
article_type: Optional article type ('article', 'page', 'content_block')
|
|
691
|
+
language: Optional language code (e.g., 'en')
|
|
692
|
+
authored_by: Optional list of user IDs who author the article
|
|
673
693
|
|
|
674
694
|
Returns:
|
|
675
695
|
Created article
|
|
@@ -710,6 +730,7 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
710
730
|
title=title,
|
|
711
731
|
description=description,
|
|
712
732
|
status=status,
|
|
733
|
+
access_level=access_level,
|
|
713
734
|
owned_by=owned_by,
|
|
714
735
|
resource={"content_artifact": artifact_id},
|
|
715
736
|
applies_to_parts=applies_to_parts,
|
|
@@ -717,6 +738,8 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
717
738
|
tags=tags,
|
|
718
739
|
parent=parent,
|
|
719
740
|
article_type=article_type,
|
|
741
|
+
language=language,
|
|
742
|
+
authored_by=authored_by,
|
|
720
743
|
)
|
|
721
744
|
return await self.create(article_req)
|
|
722
745
|
|
|
@@ -867,6 +890,7 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
867
890
|
applies_to_parts: builtins.list[str] | None = None,
|
|
868
891
|
access_level: ArticleAccessLevel | None = None,
|
|
869
892
|
tags: builtins.list[SetTagWithValue] | None = None,
|
|
893
|
+
language: str | None = None,
|
|
870
894
|
) -> Article:
|
|
871
895
|
"""Update article metadata and/or content (async).
|
|
872
896
|
|
|
@@ -884,6 +908,7 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
884
908
|
applies_to_parts: Optional list of part IDs to associate with
|
|
885
909
|
access_level: Optional access level (internal, external, private, public)
|
|
886
910
|
tags: Optional list of tags to apply (list of SetTagWithValue objects)
|
|
911
|
+
language: Optional language code (e.g., 'en')
|
|
887
912
|
|
|
888
913
|
Returns:
|
|
889
914
|
Updated article
|
|
@@ -919,6 +944,7 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
919
944
|
or applies_to_parts is not None
|
|
920
945
|
or access_level is not None
|
|
921
946
|
or tags is not None
|
|
947
|
+
or language is not None
|
|
922
948
|
)
|
|
923
949
|
if has_metadata:
|
|
924
950
|
update_req = ArticlesUpdateRequest(
|
|
@@ -929,6 +955,7 @@ class AsyncArticlesService(AsyncBaseService):
|
|
|
929
955
|
applies_to_parts=applies_to_parts_req,
|
|
930
956
|
access_level=access_level,
|
|
931
957
|
tags=tags_req,
|
|
958
|
+
language=language,
|
|
932
959
|
)
|
|
933
960
|
return await self.update(update_req)
|
|
934
961
|
|