devrev-Python-SDK 3.0.0__tar.gz → 3.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/PKG-INFO +1 -1
  2. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/changelog.md +12 -0
  3. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/pyproject.toml +1 -1
  4. devrev_python_sdk-3.0.1/src/devrev/services/_pagination.py +54 -0
  5. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/conversations.py +3 -29
  6. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/works.py +3 -27
  7. devrev_python_sdk-3.0.1/tests/unit/services/test_pagination.py +48 -0
  8. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/bug-fixer.md +0 -0
  9. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/builder.md +0 -0
  10. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/documentation.md +0 -0
  11. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/foreman.md +0 -0
  12. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/pr-review-boss.md +0 -0
  13. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/release-manager.md +0 -0
  14. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/simplifier.md +0 -0
  15. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/agents/tester.md +0 -0
  16. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/commands/foreman-work.md +0 -0
  17. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/commands/release-prepare.md +0 -0
  18. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/commands/review-start.md +0 -0
  19. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/commands/simplify-code.md +0 -0
  20. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/code-quality.md +0 -0
  21. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/data-modeling.md +0 -0
  22. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/devrev-sdk.md +0 -0
  23. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/git-workflow.md +0 -0
  24. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/pull-requests.md +0 -0
  25. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/python-development.md +0 -0
  26. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/security.md +0 -0
  27. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.augment/rules/testing.md +0 -0
  28. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.dockerignore +0 -0
  29. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.env.sample +0 -0
  30. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  31. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  32. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  33. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  34. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  35. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/dependabot.yml +0 -0
  36. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/pull_request_template.md +0 -0
  37. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/api-check.yml +0 -0
  38. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/ci.yml +0 -0
  39. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/claude-code-review.yml +0 -0
  40. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/claude.yml +0 -0
  41. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/deploy.yml +0 -0
  42. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/docs.yml +0 -0
  43. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/integration-tests.yml +0 -0
  44. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/release.yml +0 -0
  45. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.github/workflows/sync-openapi.yml +0 -0
  46. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.gitignore +0 -0
  47. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/.pre-commit-config.yaml +0 -0
  48. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/CLAUDE.md +0 -0
  49. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/CODE_OF_CONDUCT.md +0 -0
  50. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/CONTRIBUTING.md +0 -0
  51. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/DEPRECATIONS.md +0 -0
  52. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/Dockerfile +0 -0
  53. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/KNOWN_ISSUES.md +0 -0
  54. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  55. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/README.md +0 -0
  56. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/SECURITY.md +0 -0
  57. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/augment-mcp-config-remote.json +0 -0
  58. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/augment-mcp-config.json +0 -0
  59. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/augment-settings.json +0 -0
  60. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/benchmarks/README.md +0 -0
  61. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/benchmarks/bench_http_client.py +0 -0
  62. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/benchmarks/bench_models.py +0 -0
  63. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/benchmarks/bench_pagination.py +0 -0
  64. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/benchmarks/conftest.py +0 -0
  65. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/context7.json +0 -0
  66. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/README.md +0 -0
  67. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/audit-logging-setup.sh +0 -0
  68. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/cloudbuild.yaml +0 -0
  69. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/monitoring/README.md +0 -0
  70. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/monitoring/alert-policies.yaml +0 -0
  71. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/monitoring/dashboard.json +0 -0
  72. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/monitoring/validate-config.sh +0 -0
  73. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/deploy/service.yaml +0 -0
  74. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docker-compose.yml +0 -0
  75. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/brands.md +0 -0
  76. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/engagements.md +0 -0
  77. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/incidents.md +0 -0
  78. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/index.md +0 -0
  79. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/question-answers.md +0 -0
  80. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/recommendations.md +0 -0
  81. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/search.md +0 -0
  82. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta/uoms.md +0 -0
  83. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/beta-api-differences.md +0 -0
  84. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/client.md +0 -0
  85. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/config.md +0 -0
  86. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/exceptions.md +0 -0
  87. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/index.md +0 -0
  88. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/models/accounts.md +0 -0
  89. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/models/base.md +0 -0
  90. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/models/index.md +0 -0
  91. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/models/users.md +0 -0
  92. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/models/works.md +0 -0
  93. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/accounts.md +0 -0
  94. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/articles.md +0 -0
  95. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/code-changes.md +0 -0
  96. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/conversations.md +0 -0
  97. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/dev-users.md +0 -0
  98. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/groups.md +0 -0
  99. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/index.md +0 -0
  100. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/links.md +0 -0
  101. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/parts.md +0 -0
  102. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/rev-users.md +0 -0
  103. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/slas.md +0 -0
  104. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/tags.md +0 -0
  105. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/timeline-entries.md +0 -0
  106. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/webhooks.md +0 -0
  107. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/api/services/works.md +0 -0
  108. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/examples/advanced.md +0 -0
  109. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/examples/basic.md +0 -0
  110. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/examples/beta-features.md +0 -0
  111. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/examples/index.md +0 -0
  112. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/examples/integrations.md +0 -0
  113. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/getting-started/authentication.md +0 -0
  114. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/getting-started/index.md +0 -0
  115. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/getting-started/installation.md +0 -0
  116. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/getting-started/quickstart.md +0 -0
  117. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/beta-api.md +0 -0
  118. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/compatibility.md +0 -0
  119. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/configuration.md +0 -0
  120. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/error-handling.md +0 -0
  121. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/github-actions-setup.md +0 -0
  122. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/index.md +0 -0
  123. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/logging.md +0 -0
  124. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/pagination.md +0 -0
  125. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/sync-vs-async.md +0 -0
  126. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/testing.md +0 -0
  127. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/version-support.md +0 -0
  128. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/guides/write-integration-testing-strategy.md +0 -0
  129. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/hooks/copy_llms.py +0 -0
  130. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/index.md +0 -0
  131. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/mcp/deployment.md +0 -0
  132. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/mcp/index.md +0 -0
  133. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/mcp/quickstart.md +0 -0
  134. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/mcp/tools-reference.md +0 -0
  135. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/docs/stylesheets/extra.css +0 -0
  136. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/README.md +0 -0
  137. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/README.md +0 -0
  138. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/async_example.py +0 -0
  139. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/create_work.py +0 -0
  140. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/error_handling.py +0 -0
  141. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/list_accounts.py +0 -0
  142. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/pagination.py +0 -0
  143. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/basic/search_users.py +0 -0
  144. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/cloud_functions/README.md +0 -0
  145. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/cloud_functions/main.py +0 -0
  146. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/cloud_functions/requirements.txt +0 -0
  147. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/fastapi/README.md +0 -0
  148. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/fastapi/main.py +0 -0
  149. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/fastapi/requirements.txt +0 -0
  150. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/flask/README.md +0 -0
  151. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/flask/app.py +0 -0
  152. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/examples/integrations/flask/requirements.txt +0 -0
  153. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/llms-ctx-full.txt +0 -0
  154. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/llms-ctx.txt +0 -0
  155. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/llms-mcp.txt +0 -0
  156. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/llms.txt +0 -0
  157. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/mkdocs.yml +0 -0
  158. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/openapi-beta.yaml +0 -0
  159. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/openapi-public.yaml +0 -0
  160. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/openapi-spec-corrections.yaml +0 -0
  161. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/scripts/build_ai_docs.py +0 -0
  162. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/scripts/debug_articles.py +0 -0
  163. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/scripts/setup-github-secrets.sh +0 -0
  164. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/__init__.py +0 -0
  165. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/client.py +0 -0
  166. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/config.py +0 -0
  167. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/exceptions.py +0 -0
  168. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/__init__.py +0 -0
  169. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/accounts.py +0 -0
  170. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/articles.py +0 -0
  171. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/artifacts.py +0 -0
  172. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/base.py +0 -0
  173. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/brands.py +0 -0
  174. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/code_changes.py +0 -0
  175. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/conversations.py +0 -0
  176. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/dev_users.py +0 -0
  177. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/engagements.py +0 -0
  178. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/groups.py +0 -0
  179. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/incidents.py +0 -0
  180. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/links.py +0 -0
  181. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/notifications.py +0 -0
  182. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/parts.py +0 -0
  183. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/preferences.py +0 -0
  184. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/question_answers.py +0 -0
  185. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/recommendations.py +0 -0
  186. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/rev_orgs.py +0 -0
  187. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/rev_users.py +0 -0
  188. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/search.py +0 -0
  189. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/slas.py +0 -0
  190. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/sync.py +0 -0
  191. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/tags.py +0 -0
  192. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/tasks.py +0 -0
  193. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/timeline_entries.py +0 -0
  194. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/timeline_events.py +0 -0
  195. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/track_events.py +0 -0
  196. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/uoms.py +0 -0
  197. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/webhooks.py +0 -0
  198. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/widgets.py +0 -0
  199. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/models/works.py +0 -0
  200. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/py.typed +0 -0
  201. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/__init__.py +0 -0
  202. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/accounts.py +0 -0
  203. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/articles.py +0 -0
  204. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/artifacts.py +0 -0
  205. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/base.py +0 -0
  206. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/brands.py +0 -0
  207. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/code_changes.py +0 -0
  208. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/dev_users.py +0 -0
  209. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/engagements.py +0 -0
  210. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/groups.py +0 -0
  211. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/incidents.py +0 -0
  212. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/links.py +0 -0
  213. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/notifications.py +0 -0
  214. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/parts.py +0 -0
  215. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/preferences.py +0 -0
  216. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/question_answers.py +0 -0
  217. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/recommendations.py +0 -0
  218. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/rev_orgs.py +0 -0
  219. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/rev_users.py +0 -0
  220. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/search.py +0 -0
  221. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/slas.py +0 -0
  222. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/tags.py +0 -0
  223. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/timeline_entries.py +0 -0
  224. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/track_events.py +0 -0
  225. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/uoms.py +0 -0
  226. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/services/webhooks.py +0 -0
  227. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/__init__.py +0 -0
  228. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/content_converter.py +0 -0
  229. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/deprecation.py +0 -0
  230. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/http.py +0 -0
  231. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/logging.py +0 -0
  232. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev/utils/pagination.py +0 -0
  233. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/__init__.py +0 -0
  234. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/__main__.py +0 -0
  235. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/config.py +0 -0
  236. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/middleware/__init__.py +0 -0
  237. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/middleware/audit.py +0 -0
  238. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/middleware/auth.py +0 -0
  239. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/middleware/health.py +0 -0
  240. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  241. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/__init__.py +0 -0
  242. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/escalation.py +0 -0
  243. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/investigate.py +0 -0
  244. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/response.py +0 -0
  245. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/summarize.py +0 -0
  246. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/prompts/triage.py +0 -0
  247. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/__init__.py +0 -0
  248. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/account.py +0 -0
  249. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/article.py +0 -0
  250. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/conversation.py +0 -0
  251. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/part.py +0 -0
  252. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/server_info.py +0 -0
  253. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/ticket.py +0 -0
  254. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/resources/user.py +0 -0
  255. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/server.py +0 -0
  256. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/__init__.py +0 -0
  257. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/accounts.py +0 -0
  258. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/articles.py +0 -0
  259. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/conversations.py +0 -0
  260. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/engagements.py +0 -0
  261. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/groups.py +0 -0
  262. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/incidents.py +0 -0
  263. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/links.py +0 -0
  264. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/parts.py +0 -0
  265. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/question_answers.py +0 -0
  266. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/recommendations.py +0 -0
  267. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/rev_orgs.py +0 -0
  268. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/search.py +0 -0
  269. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/server_info.py +0 -0
  270. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/slas.py +0 -0
  271. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/tags.py +0 -0
  272. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/timeline.py +0 -0
  273. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/users.py +0 -0
  274. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/tools/works.py +0 -0
  275. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/utils/__init__.py +0 -0
  276. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/utils/don_id.py +0 -0
  277. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/utils/errors.py +0 -0
  278. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/utils/formatting.py +0 -0
  279. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/src/devrev_mcp/utils/pagination.py +0 -0
  280. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/__init__.py +0 -0
  281. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/conftest.py +0 -0
  282. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/__init__.py +0 -0
  283. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/conftest.py +0 -0
  284. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_accounts_e2e.py +0 -0
  285. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_all_readonly_endpoints.py +0 -0
  286. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_articles_lifecycle.py +0 -0
  287. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_backwards_compatibility.py +0 -0
  288. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_contacts_e2e.py +0 -0
  289. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_core_services_phase1.py +0 -0
  290. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_date_filtering.py +0 -0
  291. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_extended_services_phase2.py +0 -0
  292. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_get_endpoints.py +0 -0
  293. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_issues_e2e.py +0 -0
  294. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_kb_articles_e2e.py +0 -0
  295. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_mcp_articles.py +0 -0
  296. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_ping.py +0 -0
  297. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_question_answers_e2e.py +0 -0
  298. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_readonly_endpoints.py +0 -0
  299. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_specialized_services_phase3.py +0 -0
  300. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_tickets_e2e.py +0 -0
  301. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/test_write_operations.py +0 -0
  302. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/utils/__init__.py +0 -0
  303. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/utils/cleanup.py +0 -0
  304. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/utils/constants.py +0 -0
  305. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/integration/utils/data_manager.py +0 -0
  306. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/performance/__init__.py +0 -0
  307. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/performance/test_articles_performance.py +0 -0
  308. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/__init__.py +0 -0
  309. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/__init__.py +0 -0
  310. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/conftest.py +0 -0
  311. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_audit.py +0 -0
  312. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_config.py +0 -0
  313. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_phase4_transport.py +0 -0
  314. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_prompts.py +0 -0
  315. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_resources.py +0 -0
  316. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_server_info.py +0 -0
  317. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_accounts.py +0 -0
  318. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_articles.py +0 -0
  319. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_conversations.py +0 -0
  320. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_engagements.py +0 -0
  321. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_groups.py +0 -0
  322. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_incidents.py +0 -0
  323. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_links.py +0 -0
  324. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_parts.py +0 -0
  325. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_question_answers.py +0 -0
  326. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  327. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_search.py +0 -0
  328. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_slas.py +0 -0
  329. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_tags.py +0 -0
  330. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_timeline.py +0 -0
  331. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_users.py +0 -0
  332. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_tools_works.py +0 -0
  333. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/mcp/test_utils.py +0 -0
  334. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/models/__init__.py +0 -0
  335. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/models/test_user_state_regression.py +0 -0
  336. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/__init__.py +0 -0
  337. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/conftest.py +0 -0
  338. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_articles.py +0 -0
  339. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_async_services.py +0 -0
  340. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_brands.py +0 -0
  341. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_code_changes.py +0 -0
  342. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_conversations.py +0 -0
  343. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_engagements.py +0 -0
  344. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_groups.py +0 -0
  345. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_incidents.py +0 -0
  346. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_links.py +0 -0
  347. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_notifications.py +0 -0
  348. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_parts.py +0 -0
  349. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_preferences.py +0 -0
  350. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_question_answers.py +0 -0
  351. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_recommendations.py +0 -0
  352. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_search.py +0 -0
  353. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_slas.py +0 -0
  354. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_tags.py +0 -0
  355. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_timeline_entries.py +0 -0
  356. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_track_events.py +0 -0
  357. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_uoms.py +0 -0
  358. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_webhooks.py +0 -0
  359. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/services/test_works.py +0 -0
  360. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_articles_unified.py +0 -0
  361. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_artifacts.py +0 -0
  362. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_backward_compatibility.py +0 -0
  363. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_base_service.py +0 -0
  364. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_client.py +0 -0
  365. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_config.py +0 -0
  366. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_content_converter.py +0 -0
  367. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_deprecation.py +0 -0
  368. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_don_id_validation.py +0 -0
  369. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_error_handling.py +0 -0
  370. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_exceptions.py +0 -0
  371. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_http.py +0 -0
  372. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_logging.py +0 -0
  373. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_pagination.py +0 -0
  374. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/tests/unit/test_rev_orgs.py +0 -0
  375. {devrev_python_sdk-3.0.0 → devrev_python_sdk-3.0.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: A modern, type-safe Python SDK for the DevRev API
5
5
  Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
6
6
  Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
@@ -13,6 +13,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Fixed
15
15
 
16
+ ## [3.0.1] - 2026-04-22
17
+
18
+ ### Changed
19
+
20
+ - **Shared pagination helper** (CUSS-457) — Extracted the per-request page-size
21
+ clamp (`_MAX_PAGE = 100`) and the `resolve_page_limit` helper from
22
+ `conversations.py` and `works.py` into a single shared module
23
+ `src/devrev/services/_pagination.py`. Non-breaking internal refactor; no
24
+ public SDK or MCP surface change. The shared helper adopts the tighter of
25
+ the two pre-existing semantics, eliminating a small over-fetch on the
26
+ final page of paginated `list_*_since` calls in `WorksService`.
27
+
16
28
  ## [3.0.0] - 2026-04-22
17
29
 
18
30
  ### Added
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "3.0.0"
7
+ version = "3.0.1"
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,54 @@
1
+ """Shared pagination helpers for cursor-streaming list helpers.
2
+
3
+ The DevRev ``*.list`` endpoints cap per-page responses at 100 items and the
4
+ corresponding ``*ListRequest.limit`` fields are pydantic-constrained to
5
+ ``le=100``. Any service that drives cursor pagination from a user-supplied
6
+ ``overall_limit`` / ``page_size`` pair must therefore clamp the value it puts
7
+ on the request body before construction, or the request will fail validation
8
+ locally before it is ever sent.
9
+
10
+ :func:`resolve_page_limit` centralises that clamping so every ``list_*_since``
11
+ helper resolves the per-page ``limit`` identically.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from typing import Final
17
+
18
+ _MAX_PAGE: Final[int] = 100
19
+
20
+
21
+ def resolve_page_limit(
22
+ overall_limit: int | None,
23
+ collected: int,
24
+ page_size: int | None,
25
+ ) -> int | None:
26
+ """Compute the ``limit`` to send for the next page request.
27
+
28
+ The returned value is always clamped to :data:`_MAX_PAGE` so callers using
29
+ an ``overall_limit`` greater than the server maximum (e.g. ``limit=200,
30
+ page_size=None``) still paginate correctly. When both ``overall_limit`` and
31
+ ``page_size`` are supplied the tightest of ``{page_size, remaining,
32
+ _MAX_PAGE}`` wins.
33
+
34
+ Args:
35
+ overall_limit: Caller-supplied hard cap on total items to return across
36
+ all pages, or ``None`` to stream until the server runs out of
37
+ results.
38
+ collected: Number of items already accumulated across prior pages.
39
+ page_size: Caller-supplied per-page size, or ``None`` to defer to the
40
+ server default (still clamped to :data:`_MAX_PAGE`).
41
+
42
+ Returns:
43
+ The ``limit`` to put on the next ``*ListRequest``, or ``None`` to omit
44
+ it entirely (only when both ``overall_limit`` and ``page_size`` are
45
+ ``None``).
46
+ """
47
+ if overall_limit is None:
48
+ if page_size is None:
49
+ return None
50
+ return min(page_size, _MAX_PAGE)
51
+ remaining = overall_limit - collected
52
+ if page_size is None:
53
+ return min(remaining, _MAX_PAGE)
54
+ return min(page_size, remaining, _MAX_PAGE)
@@ -23,6 +23,7 @@ from devrev.models.conversations import (
23
23
  ConversationsUpdateRequest,
24
24
  ConversationsUpdateResponse,
25
25
  )
26
+ from devrev.services._pagination import resolve_page_limit
26
27
  from devrev.services.base import AsyncBaseService, BaseService
27
28
 
28
29
 
@@ -47,33 +48,6 @@ def _normalize_sort_by(sort_by: Sequence[str] | None) -> list[str] | None:
47
48
  return normalized
48
49
 
49
50
 
50
- # ``ConversationsListRequest.limit`` is pydantic-constrained to ``le=100``;
51
- # clamp any computed per-page limit so pagination loops do not construct a
52
- # request body that fails validation before it is ever sent.
53
- _CONVERSATIONS_MAX_PAGE = 100
54
-
55
-
56
- def _resolve_page_limit(
57
- overall_limit: int | None,
58
- collected: int,
59
- page_size: int | None,
60
- ) -> int | None:
61
- """Compute the ``limit`` to send for the next page request.
62
-
63
- The returned value is always clamped to ``_CONVERSATIONS_MAX_PAGE`` so
64
- callers using an ``overall_limit`` greater than the server maximum (e.g.
65
- ``limit=200, page_size=None``) still paginate correctly.
66
- """
67
- if overall_limit is None:
68
- if page_size is None:
69
- return None
70
- return min(page_size, _CONVERSATIONS_MAX_PAGE)
71
- remaining = overall_limit - collected
72
- if page_size is None:
73
- return min(remaining, _CONVERSATIONS_MAX_PAGE)
74
- return min(page_size, remaining, _CONVERSATIONS_MAX_PAGE)
75
-
76
-
77
51
  def _is_before_cutoff(modified_date: datetime | None, cutoff: datetime) -> bool:
78
52
  """Return True if ``modified_date`` is strictly older than ``cutoff``.
79
53
 
@@ -135,7 +109,7 @@ class ConversationsService(BaseService):
135
109
  while True:
136
110
  if limit is not None and len(results) >= limit:
137
111
  break
138
- request_limit = _resolve_page_limit(limit, len(results), page_size)
112
+ request_limit = resolve_page_limit(limit, len(results), page_size)
139
113
  request = ConversationsListRequest(
140
114
  cursor=cursor,
141
115
  limit=request_limit,
@@ -267,7 +241,7 @@ class AsyncConversationsService(AsyncBaseService):
267
241
  while True:
268
242
  if limit is not None and len(results) >= limit:
269
243
  break
270
- request_limit = _resolve_page_limit(limit, len(results), page_size)
244
+ request_limit = resolve_page_limit(limit, len(results), page_size)
271
245
  request = ConversationsListRequest(
272
246
  cursor=cursor,
273
247
  limit=request_limit,
@@ -31,6 +31,7 @@ from devrev.models.works import (
31
31
  WorksUpdateResponse,
32
32
  WorkType,
33
33
  )
34
+ from devrev.services._pagination import resolve_page_limit
34
35
  from devrev.services.base import AsyncBaseService, BaseService
35
36
 
36
37
  if TYPE_CHECKING:
@@ -58,31 +59,6 @@ def _is_before_cutoff(timestamp: datetime | None, cutoff: datetime) -> bool:
58
59
  return False
59
60
 
60
61
 
61
- # ``WorksListRequest.limit`` is pydantic-constrained to ``le=100``; clamp any
62
- # computed per-page limit so pagination loops do not construct a request body
63
- # that fails validation before it is ever sent.
64
- _WORKS_MAX_PAGE = 100
65
-
66
-
67
- def _resolve_page_limit(
68
- overall_limit: int | None,
69
- collected: int,
70
- page_size: int | None,
71
- ) -> int | None:
72
- """Compute the ``limit`` to send for the next page request.
73
-
74
- The returned value is always clamped to ``_WORKS_MAX_PAGE`` so callers using
75
- an ``overall_limit`` greater than the server maximum (e.g. ``limit=200,
76
- page_size=None``) still paginate correctly.
77
- """
78
- if page_size is not None:
79
- return min(page_size, _WORKS_MAX_PAGE)
80
- if overall_limit is None:
81
- return None
82
- remaining = overall_limit - collected
83
- return min(remaining, _WORKS_MAX_PAGE)
84
-
85
-
86
62
  def _normalize_sort_by(sort_by: Sequence[str] | None) -> _StrList | None:
87
63
  """Normalize sort_by entries to the server-expected ``field:direction`` form.
88
64
 
@@ -351,7 +327,7 @@ class WorksService(BaseService):
351
327
  owned_by=owned_by,
352
328
  applies_to_part=applies_to_part,
353
329
  cursor=cursor,
354
- limit=_resolve_page_limit(limit, len(collected), page_size),
330
+ limit=resolve_page_limit(limit, len(collected), page_size),
355
331
  sort_by=sort_by,
356
332
  )
357
333
  stop = False
@@ -577,7 +553,7 @@ class AsyncWorksService(AsyncBaseService):
577
553
  owned_by=owned_by,
578
554
  applies_to_part=applies_to_part,
579
555
  cursor=cursor,
580
- limit=_resolve_page_limit(limit, len(collected), page_size),
556
+ limit=resolve_page_limit(limit, len(collected), page_size),
581
557
  sort_by=sort_by,
582
558
  )
583
559
  stop = False
@@ -0,0 +1,48 @@
1
+ """Unit tests for the shared pagination helper."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import pytest
6
+
7
+ from devrev.services._pagination import _MAX_PAGE, resolve_page_limit
8
+
9
+
10
+ class TestResolvePageLimit:
11
+ """Tight-clamping semantics for ``resolve_page_limit``."""
12
+
13
+ def test_max_page_constant_is_one_hundred(self) -> None:
14
+ """Server-side cap is exactly 100 items per page."""
15
+ assert _MAX_PAGE == 100
16
+
17
+ @pytest.mark.parametrize(
18
+ ("overall_limit", "collected", "page_size", "expected"),
19
+ [
20
+ # No overall cap, no page size → defer entirely to server.
21
+ (None, 0, None, None),
22
+ # No overall cap, small page size → pass through.
23
+ (None, 0, 50, 50),
24
+ # No overall cap, page_size above MAX → clamp to MAX.
25
+ (None, 0, 200, 100),
26
+ # Overall cap below MAX, no page size → send remaining.
27
+ (50, 0, None, 50),
28
+ # Overall cap with some collected, no page size → send remaining.
29
+ (50, 45, None, 5),
30
+ # Overall cap above MAX, no page size → clamp to MAX.
31
+ (500, 0, None, 100),
32
+ # Tightest of {page_size=10, remaining=5, MAX=100} wins.
33
+ (50, 45, 10, 5),
34
+ # Tightest of {page_size=50, remaining=500, MAX=100} wins.
35
+ (500, 0, 50, 50),
36
+ # page_size > MAX with large remaining → MAX wins.
37
+ (500, 0, 200, 100),
38
+ ],
39
+ )
40
+ def test_resolve_page_limit_cases(
41
+ self,
42
+ overall_limit: int | None,
43
+ collected: int,
44
+ page_size: int | None,
45
+ expected: int | None,
46
+ ) -> None:
47
+ """Exhaustive coverage of the clamping matrix from the ticket."""
48
+ assert resolve_page_limit(overall_limit, collected, page_size) == expected