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.
Files changed (364) hide show
  1. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/api-check.yml +1 -1
  2. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/ci.yml +1 -1
  3. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/deploy.yml +2 -2
  4. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/docs.yml +1 -1
  5. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/release.yml +4 -4
  6. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/PKG-INFO +1 -1
  7. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/changelog.md +28 -0
  8. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-mcp.txt +1 -1
  9. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms.txt +1 -1
  10. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/pyproject.toml +1 -1
  11. devrev_python_sdk-2.10.2/scripts/debug_articles.py +200 -0
  12. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/articles.py +70 -0
  13. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/parts.py +16 -1
  14. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/articles.py +27 -0
  15. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/articles.py +36 -8
  16. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/parts.py +10 -0
  17. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_articles.py +27 -2
  18. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_parts.py +79 -0
  19. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/uv.lock +32 -4
  20. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/bug-fixer.md +0 -0
  21. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/builder.md +0 -0
  22. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/documentation.md +0 -0
  23. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/foreman.md +0 -0
  24. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/pr-review-boss.md +0 -0
  25. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/release-manager.md +0 -0
  26. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/simplifier.md +0 -0
  27. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/agents/tester.md +0 -0
  28. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/foreman-work.md +0 -0
  29. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/release-prepare.md +0 -0
  30. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/review-start.md +0 -0
  31. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/commands/simplify-code.md +0 -0
  32. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/code-quality.md +0 -0
  33. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/data-modeling.md +0 -0
  34. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/devrev-sdk.md +0 -0
  35. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/git-workflow.md +0 -0
  36. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/pull-requests.md +0 -0
  37. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/python-development.md +0 -0
  38. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/security.md +0 -0
  39. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.augment/rules/testing.md +0 -0
  40. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.dockerignore +0 -0
  41. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.env.sample +0 -0
  42. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  43. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  44. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  45. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  46. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  47. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/dependabot.yml +0 -0
  48. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/pull_request_template.md +0 -0
  49. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/claude-code-review.yml +0 -0
  50. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/claude.yml +0 -0
  51. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/integration-tests.yml +0 -0
  52. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.github/workflows/sync-openapi.yml +0 -0
  53. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.gitignore +0 -0
  54. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/.pre-commit-config.yaml +0 -0
  55. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CLAUDE.md +0 -0
  56. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CODE_OF_CONDUCT.md +0 -0
  57. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/CONTRIBUTING.md +0 -0
  58. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/DEPRECATIONS.md +0 -0
  59. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/Dockerfile +0 -0
  60. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/KNOWN_ISSUES.md +0 -0
  61. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  62. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/README.md +0 -0
  63. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/SECURITY.md +0 -0
  64. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-mcp-config-remote.json +0 -0
  65. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-mcp-config.json +0 -0
  66. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/augment-settings.json +0 -0
  67. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/README.md +0 -0
  68. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_http_client.py +0 -0
  69. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_models.py +0 -0
  70. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/bench_pagination.py +0 -0
  71. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/benchmarks/conftest.py +0 -0
  72. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/context7.json +0 -0
  73. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/README.md +0 -0
  74. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/audit-logging-setup.sh +0 -0
  75. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/cloudbuild.yaml +0 -0
  76. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/README.md +0 -0
  77. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/alert-policies.yaml +0 -0
  78. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/dashboard.json +0 -0
  79. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/monitoring/validate-config.sh +0 -0
  80. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/deploy/service.yaml +0 -0
  81. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docker-compose.yml +0 -0
  82. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/brands.md +0 -0
  83. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/engagements.md +0 -0
  84. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/incidents.md +0 -0
  85. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/index.md +0 -0
  86. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/question-answers.md +0 -0
  87. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/recommendations.md +0 -0
  88. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/search.md +0 -0
  89. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta/uoms.md +0 -0
  90. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/beta-api-differences.md +0 -0
  91. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/client.md +0 -0
  92. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/config.md +0 -0
  93. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/exceptions.md +0 -0
  94. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/index.md +0 -0
  95. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/accounts.md +0 -0
  96. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/base.md +0 -0
  97. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/index.md +0 -0
  98. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/users.md +0 -0
  99. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/models/works.md +0 -0
  100. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/accounts.md +0 -0
  101. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/articles.md +0 -0
  102. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/code-changes.md +0 -0
  103. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/conversations.md +0 -0
  104. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/dev-users.md +0 -0
  105. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/groups.md +0 -0
  106. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/index.md +0 -0
  107. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/links.md +0 -0
  108. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/parts.md +0 -0
  109. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/rev-users.md +0 -0
  110. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/slas.md +0 -0
  111. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/tags.md +0 -0
  112. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/timeline-entries.md +0 -0
  113. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/webhooks.md +0 -0
  114. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/api/services/works.md +0 -0
  115. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/advanced.md +0 -0
  116. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/basic.md +0 -0
  117. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/beta-features.md +0 -0
  118. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/index.md +0 -0
  119. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/examples/integrations.md +0 -0
  120. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/authentication.md +0 -0
  121. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/index.md +0 -0
  122. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/installation.md +0 -0
  123. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/getting-started/quickstart.md +0 -0
  124. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/beta-api.md +0 -0
  125. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/compatibility.md +0 -0
  126. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/configuration.md +0 -0
  127. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/error-handling.md +0 -0
  128. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/github-actions-setup.md +0 -0
  129. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/index.md +0 -0
  130. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/logging.md +0 -0
  131. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/pagination.md +0 -0
  132. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/sync-vs-async.md +0 -0
  133. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/testing.md +0 -0
  134. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/version-support.md +0 -0
  135. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/guides/write-integration-testing-strategy.md +0 -0
  136. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/hooks/copy_llms.py +0 -0
  137. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/index.md +0 -0
  138. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/deployment.md +0 -0
  139. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/index.md +0 -0
  140. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/quickstart.md +0 -0
  141. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/mcp/tools-reference.md +0 -0
  142. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/docs/stylesheets/extra.css +0 -0
  143. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/README.md +0 -0
  144. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/README.md +0 -0
  145. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/async_example.py +0 -0
  146. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/create_work.py +0 -0
  147. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/error_handling.py +0 -0
  148. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/list_accounts.py +0 -0
  149. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/pagination.py +0 -0
  150. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/basic/search_users.py +0 -0
  151. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/README.md +0 -0
  152. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/main.py +0 -0
  153. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/cloud_functions/requirements.txt +0 -0
  154. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/README.md +0 -0
  155. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/main.py +0 -0
  156. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/fastapi/requirements.txt +0 -0
  157. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/README.md +0 -0
  158. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/app.py +0 -0
  159. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/examples/integrations/flask/requirements.txt +0 -0
  160. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-ctx-full.txt +0 -0
  161. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/llms-ctx.txt +0 -0
  162. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/mkdocs.yml +0 -0
  163. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-beta.yaml +0 -0
  164. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-public.yaml +0 -0
  165. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/openapi-spec-corrections.yaml +0 -0
  166. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/scripts/build_ai_docs.py +0 -0
  167. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/scripts/setup-github-secrets.sh +0 -0
  168. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/__init__.py +0 -0
  169. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/client.py +0 -0
  170. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/config.py +0 -0
  171. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/exceptions.py +0 -0
  172. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/__init__.py +0 -0
  173. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/accounts.py +0 -0
  174. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/artifacts.py +0 -0
  175. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/base.py +0 -0
  176. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/brands.py +0 -0
  177. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/code_changes.py +0 -0
  178. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/conversations.py +0 -0
  179. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/dev_users.py +0 -0
  180. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/engagements.py +0 -0
  181. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/groups.py +0 -0
  182. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/incidents.py +0 -0
  183. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/links.py +0 -0
  184. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/notifications.py +0 -0
  185. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/preferences.py +0 -0
  186. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/question_answers.py +0 -0
  187. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/recommendations.py +0 -0
  188. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/rev_users.py +0 -0
  189. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/search.py +0 -0
  190. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/slas.py +0 -0
  191. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/sync.py +0 -0
  192. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/tags.py +0 -0
  193. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/tasks.py +0 -0
  194. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/timeline_entries.py +0 -0
  195. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/timeline_events.py +0 -0
  196. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/track_events.py +0 -0
  197. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/uoms.py +0 -0
  198. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/webhooks.py +0 -0
  199. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/widgets.py +0 -0
  200. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/models/works.py +0 -0
  201. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/py.typed +0 -0
  202. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/__init__.py +0 -0
  203. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/accounts.py +0 -0
  204. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/artifacts.py +0 -0
  205. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/base.py +0 -0
  206. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/brands.py +0 -0
  207. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/code_changes.py +0 -0
  208. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/conversations.py +0 -0
  209. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/dev_users.py +0 -0
  210. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/engagements.py +0 -0
  211. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/groups.py +0 -0
  212. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/incidents.py +0 -0
  213. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/links.py +0 -0
  214. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/notifications.py +0 -0
  215. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/parts.py +0 -0
  216. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/preferences.py +0 -0
  217. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/question_answers.py +0 -0
  218. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/recommendations.py +0 -0
  219. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/rev_users.py +0 -0
  220. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/search.py +0 -0
  221. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/slas.py +0 -0
  222. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/tags.py +0 -0
  223. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/timeline_entries.py +0 -0
  224. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/track_events.py +0 -0
  225. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/uoms.py +0 -0
  226. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/webhooks.py +0 -0
  227. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/services/works.py +0 -0
  228. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/__init__.py +0 -0
  229. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/content_converter.py +0 -0
  230. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/deprecation.py +0 -0
  231. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/http.py +0 -0
  232. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/logging.py +0 -0
  233. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev/utils/pagination.py +0 -0
  234. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/__init__.py +0 -0
  235. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/__main__.py +0 -0
  236. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/config.py +0 -0
  237. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/__init__.py +0 -0
  238. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/audit.py +0 -0
  239. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/auth.py +0 -0
  240. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/health.py +0 -0
  241. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  242. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/__init__.py +0 -0
  243. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/escalation.py +0 -0
  244. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/investigate.py +0 -0
  245. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/response.py +0 -0
  246. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/summarize.py +0 -0
  247. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/prompts/triage.py +0 -0
  248. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/__init__.py +0 -0
  249. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/account.py +0 -0
  250. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/article.py +0 -0
  251. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/conversation.py +0 -0
  252. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/part.py +0 -0
  253. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/server_info.py +0 -0
  254. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/ticket.py +0 -0
  255. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/resources/user.py +0 -0
  256. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/server.py +0 -0
  257. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/__init__.py +0 -0
  258. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/accounts.py +0 -0
  259. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/conversations.py +0 -0
  260. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/engagements.py +0 -0
  261. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/groups.py +0 -0
  262. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/incidents.py +0 -0
  263. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/links.py +0 -0
  264. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/recommendations.py +0 -0
  265. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/search.py +0 -0
  266. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/server_info.py +0 -0
  267. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/slas.py +0 -0
  268. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/tags.py +0 -0
  269. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/timeline.py +0 -0
  270. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/users.py +0 -0
  271. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/tools/works.py +0 -0
  272. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/__init__.py +0 -0
  273. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/errors.py +0 -0
  274. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/formatting.py +0 -0
  275. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/src/devrev_mcp/utils/pagination.py +0 -0
  276. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/__init__.py +0 -0
  277. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/conftest.py +0 -0
  278. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/__init__.py +0 -0
  279. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/conftest.py +0 -0
  280. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_accounts_e2e.py +0 -0
  281. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_all_readonly_endpoints.py +0 -0
  282. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_articles_lifecycle.py +0 -0
  283. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_backwards_compatibility.py +0 -0
  284. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_contacts_e2e.py +0 -0
  285. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_core_services_phase1.py +0 -0
  286. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_extended_services_phase2.py +0 -0
  287. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_get_endpoints.py +0 -0
  288. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_issues_e2e.py +0 -0
  289. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_kb_articles_e2e.py +0 -0
  290. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_mcp_articles.py +0 -0
  291. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_ping.py +0 -0
  292. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_question_answers_e2e.py +0 -0
  293. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_readonly_endpoints.py +0 -0
  294. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_specialized_services_phase3.py +0 -0
  295. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_tickets_e2e.py +0 -0
  296. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/test_write_operations.py +0 -0
  297. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/__init__.py +0 -0
  298. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/cleanup.py +0 -0
  299. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/constants.py +0 -0
  300. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/integration/utils/data_manager.py +0 -0
  301. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/performance/__init__.py +0 -0
  302. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/performance/test_articles_performance.py +0 -0
  303. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/__init__.py +0 -0
  304. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/__init__.py +0 -0
  305. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/conftest.py +0 -0
  306. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_audit.py +0 -0
  307. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_config.py +0 -0
  308. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_phase4_transport.py +0 -0
  309. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_prompts.py +0 -0
  310. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_resources.py +0 -0
  311. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_server_info.py +0 -0
  312. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_accounts.py +0 -0
  313. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_conversations.py +0 -0
  314. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_engagements.py +0 -0
  315. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_groups.py +0 -0
  316. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_incidents.py +0 -0
  317. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_links.py +0 -0
  318. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  319. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_search.py +0 -0
  320. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_slas.py +0 -0
  321. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_tags.py +0 -0
  322. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_timeline.py +0 -0
  323. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_users.py +0 -0
  324. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_tools_works.py +0 -0
  325. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/mcp/test_utils.py +0 -0
  326. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/models/__init__.py +0 -0
  327. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/models/test_user_state_regression.py +0 -0
  328. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/__init__.py +0 -0
  329. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/conftest.py +0 -0
  330. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_articles.py +0 -0
  331. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_async_services.py +0 -0
  332. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_brands.py +0 -0
  333. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_code_changes.py +0 -0
  334. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_conversations.py +0 -0
  335. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_engagements.py +0 -0
  336. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_groups.py +0 -0
  337. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_incidents.py +0 -0
  338. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_links.py +0 -0
  339. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_notifications.py +0 -0
  340. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_parts.py +0 -0
  341. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_preferences.py +0 -0
  342. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_question_answers.py +0 -0
  343. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_recommendations.py +0 -0
  344. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_search.py +0 -0
  345. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_slas.py +0 -0
  346. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_tags.py +0 -0
  347. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_timeline_entries.py +0 -0
  348. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_track_events.py +0 -0
  349. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_uoms.py +0 -0
  350. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_webhooks.py +0 -0
  351. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/services/test_works.py +0 -0
  352. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_articles_unified.py +0 -0
  353. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_artifacts.py +0 -0
  354. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_backward_compatibility.py +0 -0
  355. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_base_service.py +0 -0
  356. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_client.py +0 -0
  357. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_config.py +0 -0
  358. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_content_converter.py +0 -0
  359. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_deprecation.py +0 -0
  360. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_error_handling.py +0 -0
  361. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_exceptions.py +0 -0
  362. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_http.py +0 -0
  363. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_logging.py +0 -0
  364. {devrev_python_sdk-2.10.0 → devrev_python_sdk-2.10.2}/tests/unit/test_pagination.py +0 -0
@@ -133,7 +133,7 @@ jobs:
133
133
 
134
134
  - name: Upload report
135
135
  if: steps.detect.outputs.has_changes == 'true'
136
- uses: actions/upload-artifact@v6
136
+ uses: actions/upload-artifact@v7
137
137
  with:
138
138
  name: api-change-report
139
139
  path: api_change_report.md
@@ -52,7 +52,7 @@ jobs:
52
52
  fi
53
53
 
54
54
  - name: Upload coverage
55
- uses: codecov/codecov-action@v3
55
+ uses: codecov/codecov-action@v5
56
56
  with:
57
57
  files: ./coverage.xml
58
58
  fail_ci_if_error: false
@@ -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@v2
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@v2
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@v4
35
+ uses: astral-sh/setup-uv@v7
36
36
  with:
37
37
  version: "latest"
38
38
 
@@ -32,7 +32,7 @@ jobs:
32
32
  python-version: '3.12'
33
33
 
34
34
  - name: Install uv
35
- uses: astral-sh/setup-uv@v4
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@v6
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@v7
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@v7
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.0
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
@@ -5,7 +5,7 @@
5
5
  **Install**: `pip install devrev-python-sdk[mcp]`
6
6
  **Run**: `devrev-mcp-server`
7
7
  **Docs**: https://mgmonteleone.github.io/py-dev-rev/mcp/
8
- **Version**: 2.7.0
8
+ **Version**: 2.10.1
9
9
  **Protocol**: MCP 2025-06-18
10
10
 
11
11
  ## Quick Setup
@@ -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.7.0 (current)
13
+ - Version 2.10.1 (current)
14
14
 
15
15
  ## SDK Quick Start
16
16
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "2.10.0"
7
+ version = "2.10.2"
8
8
  description = "A modern, type-safe Python SDK for the DevRev API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -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