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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/PKG-INFO +1 -1
  2. devrev_python_sdk-3.0.0/docs/api/services/conversations.md +84 -0
  3. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/works.md +68 -0
  4. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/changelog.md +95 -0
  5. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/mcp/tools-reference.md +32 -4
  6. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/openapi-spec-corrections.yaml +112 -0
  7. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/pyproject.toml +1 -1
  8. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/conversations.py +8 -0
  9. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/works.py +16 -6
  10. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/base.py +6 -2
  11. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/conversations.py +156 -0
  12. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/works.py +295 -10
  13. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/conversations.py +77 -0
  14. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/works.py +123 -7
  15. devrev_python_sdk-3.0.0/tests/integration/test_date_filtering.py +78 -0
  16. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/conftest.py +1 -0
  17. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_conversations.py +139 -0
  18. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_works.py +179 -1
  19. devrev_python_sdk-3.0.0/tests/unit/services/test_conversations.py +548 -0
  20. devrev_python_sdk-3.0.0/tests/unit/services/test_works.py +706 -0
  21. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_base_service.py +42 -0
  22. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/uv.lock +4 -4
  23. devrev_python_sdk-2.14.0/docs/api/services/conversations.md +0 -37
  24. devrev_python_sdk-2.14.0/tests/unit/services/test_conversations.py +0 -166
  25. devrev_python_sdk-2.14.0/tests/unit/services/test_works.py +0 -209
  26. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/bug-fixer.md +0 -0
  27. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/builder.md +0 -0
  28. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/documentation.md +0 -0
  29. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/foreman.md +0 -0
  30. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/pr-review-boss.md +0 -0
  31. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/release-manager.md +0 -0
  32. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/simplifier.md +0 -0
  33. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/agents/tester.md +0 -0
  34. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/commands/foreman-work.md +0 -0
  35. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/commands/release-prepare.md +0 -0
  36. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/commands/review-start.md +0 -0
  37. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/commands/simplify-code.md +0 -0
  38. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/code-quality.md +0 -0
  39. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/data-modeling.md +0 -0
  40. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/devrev-sdk.md +0 -0
  41. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/git-workflow.md +0 -0
  42. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/pull-requests.md +0 -0
  43. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/python-development.md +0 -0
  44. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/security.md +0 -0
  45. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.augment/rules/testing.md +0 -0
  46. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.dockerignore +0 -0
  47. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.env.sample +0 -0
  48. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  49. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  50. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  51. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  52. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  53. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/dependabot.yml +0 -0
  54. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/pull_request_template.md +0 -0
  55. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/api-check.yml +0 -0
  56. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/ci.yml +0 -0
  57. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/claude-code-review.yml +0 -0
  58. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/claude.yml +0 -0
  59. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/deploy.yml +0 -0
  60. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/docs.yml +0 -0
  61. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/integration-tests.yml +0 -0
  62. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/release.yml +0 -0
  63. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.github/workflows/sync-openapi.yml +0 -0
  64. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.gitignore +0 -0
  65. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/.pre-commit-config.yaml +0 -0
  66. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/CLAUDE.md +0 -0
  67. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/CODE_OF_CONDUCT.md +0 -0
  68. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/CONTRIBUTING.md +0 -0
  69. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/DEPRECATIONS.md +0 -0
  70. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/Dockerfile +0 -0
  71. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/KNOWN_ISSUES.md +0 -0
  72. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  73. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/README.md +0 -0
  74. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/SECURITY.md +0 -0
  75. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/augment-mcp-config-remote.json +0 -0
  76. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/augment-mcp-config.json +0 -0
  77. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/augment-settings.json +0 -0
  78. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/benchmarks/README.md +0 -0
  79. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/benchmarks/bench_http_client.py +0 -0
  80. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/benchmarks/bench_models.py +0 -0
  81. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/benchmarks/bench_pagination.py +0 -0
  82. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/benchmarks/conftest.py +0 -0
  83. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/context7.json +0 -0
  84. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/README.md +0 -0
  85. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/audit-logging-setup.sh +0 -0
  86. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/cloudbuild.yaml +0 -0
  87. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/monitoring/README.md +0 -0
  88. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/monitoring/alert-policies.yaml +0 -0
  89. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/monitoring/dashboard.json +0 -0
  90. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/monitoring/validate-config.sh +0 -0
  91. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/deploy/service.yaml +0 -0
  92. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docker-compose.yml +0 -0
  93. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/brands.md +0 -0
  94. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/engagements.md +0 -0
  95. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/incidents.md +0 -0
  96. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/index.md +0 -0
  97. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/question-answers.md +0 -0
  98. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/recommendations.md +0 -0
  99. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/search.md +0 -0
  100. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta/uoms.md +0 -0
  101. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/beta-api-differences.md +0 -0
  102. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/client.md +0 -0
  103. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/config.md +0 -0
  104. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/exceptions.md +0 -0
  105. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/index.md +0 -0
  106. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/models/accounts.md +0 -0
  107. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/models/base.md +0 -0
  108. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/models/index.md +0 -0
  109. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/models/users.md +0 -0
  110. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/models/works.md +0 -0
  111. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/accounts.md +0 -0
  112. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/articles.md +0 -0
  113. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/code-changes.md +0 -0
  114. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/dev-users.md +0 -0
  115. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/groups.md +0 -0
  116. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/index.md +0 -0
  117. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/links.md +0 -0
  118. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/parts.md +0 -0
  119. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/rev-users.md +0 -0
  120. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/slas.md +0 -0
  121. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/tags.md +0 -0
  122. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/timeline-entries.md +0 -0
  123. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/api/services/webhooks.md +0 -0
  124. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/examples/advanced.md +0 -0
  125. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/examples/basic.md +0 -0
  126. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/examples/beta-features.md +0 -0
  127. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/examples/index.md +0 -0
  128. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/examples/integrations.md +0 -0
  129. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/getting-started/authentication.md +0 -0
  130. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/getting-started/index.md +0 -0
  131. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/getting-started/installation.md +0 -0
  132. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/getting-started/quickstart.md +0 -0
  133. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/beta-api.md +0 -0
  134. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/compatibility.md +0 -0
  135. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/configuration.md +0 -0
  136. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/error-handling.md +0 -0
  137. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/github-actions-setup.md +0 -0
  138. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/index.md +0 -0
  139. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/logging.md +0 -0
  140. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/pagination.md +0 -0
  141. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/sync-vs-async.md +0 -0
  142. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/testing.md +0 -0
  143. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/version-support.md +0 -0
  144. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/guides/write-integration-testing-strategy.md +0 -0
  145. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/hooks/copy_llms.py +0 -0
  146. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/index.md +0 -0
  147. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/mcp/deployment.md +0 -0
  148. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/mcp/index.md +0 -0
  149. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/mcp/quickstart.md +0 -0
  150. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/docs/stylesheets/extra.css +0 -0
  151. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/README.md +0 -0
  152. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/README.md +0 -0
  153. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/async_example.py +0 -0
  154. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/create_work.py +0 -0
  155. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/error_handling.py +0 -0
  156. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/list_accounts.py +0 -0
  157. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/pagination.py +0 -0
  158. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/basic/search_users.py +0 -0
  159. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/cloud_functions/README.md +0 -0
  160. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/cloud_functions/main.py +0 -0
  161. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
  162. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/fastapi/README.md +0 -0
  163. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/fastapi/main.py +0 -0
  164. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/fastapi/requirements.txt +0 -0
  165. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/flask/README.md +0 -0
  166. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/flask/app.py +0 -0
  167. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/examples/integrations/flask/requirements.txt +0 -0
  168. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/llms-ctx-full.txt +0 -0
  169. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/llms-ctx.txt +0 -0
  170. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/llms-mcp.txt +0 -0
  171. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/llms.txt +0 -0
  172. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/mkdocs.yml +0 -0
  173. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/openapi-beta.yaml +0 -0
  174. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/openapi-public.yaml +0 -0
  175. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/scripts/build_ai_docs.py +0 -0
  176. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/scripts/debug_articles.py +0 -0
  177. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/scripts/setup-github-secrets.sh +0 -0
  178. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/__init__.py +0 -0
  179. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/client.py +0 -0
  180. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/config.py +0 -0
  181. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/exceptions.py +0 -0
  182. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/__init__.py +0 -0
  183. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/accounts.py +0 -0
  184. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/articles.py +0 -0
  185. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/artifacts.py +0 -0
  186. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/base.py +0 -0
  187. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/brands.py +0 -0
  188. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/code_changes.py +0 -0
  189. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/dev_users.py +0 -0
  190. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/engagements.py +0 -0
  191. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/groups.py +0 -0
  192. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/incidents.py +0 -0
  193. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/links.py +0 -0
  194. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/notifications.py +0 -0
  195. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/parts.py +0 -0
  196. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/preferences.py +0 -0
  197. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/question_answers.py +0 -0
  198. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/recommendations.py +0 -0
  199. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/rev_orgs.py +0 -0
  200. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/rev_users.py +0 -0
  201. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/search.py +0 -0
  202. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/slas.py +0 -0
  203. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/sync.py +0 -0
  204. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/tags.py +0 -0
  205. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/tasks.py +0 -0
  206. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/timeline_entries.py +0 -0
  207. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/timeline_events.py +0 -0
  208. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/track_events.py +0 -0
  209. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/uoms.py +0 -0
  210. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/webhooks.py +0 -0
  211. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/models/widgets.py +0 -0
  212. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/py.typed +0 -0
  213. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/__init__.py +0 -0
  214. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/accounts.py +0 -0
  215. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/articles.py +0 -0
  216. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/artifacts.py +0 -0
  217. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/brands.py +0 -0
  218. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/code_changes.py +0 -0
  219. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/dev_users.py +0 -0
  220. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/engagements.py +0 -0
  221. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/groups.py +0 -0
  222. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/incidents.py +0 -0
  223. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/links.py +0 -0
  224. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/notifications.py +0 -0
  225. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/parts.py +0 -0
  226. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/preferences.py +0 -0
  227. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/question_answers.py +0 -0
  228. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/recommendations.py +0 -0
  229. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/rev_orgs.py +0 -0
  230. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/rev_users.py +0 -0
  231. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/search.py +0 -0
  232. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/slas.py +0 -0
  233. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/tags.py +0 -0
  234. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/timeline_entries.py +0 -0
  235. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/track_events.py +0 -0
  236. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/uoms.py +0 -0
  237. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/services/webhooks.py +0 -0
  238. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/__init__.py +0 -0
  239. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/content_converter.py +0 -0
  240. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/deprecation.py +0 -0
  241. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/http.py +0 -0
  242. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/logging.py +0 -0
  243. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev/utils/pagination.py +0 -0
  244. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/__init__.py +0 -0
  245. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/__main__.py +0 -0
  246. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/config.py +0 -0
  247. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/middleware/__init__.py +0 -0
  248. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/middleware/audit.py +0 -0
  249. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/middleware/auth.py +0 -0
  250. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/middleware/health.py +0 -0
  251. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  252. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/__init__.py +0 -0
  253. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/escalation.py +0 -0
  254. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/investigate.py +0 -0
  255. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/response.py +0 -0
  256. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/summarize.py +0 -0
  257. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/prompts/triage.py +0 -0
  258. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/__init__.py +0 -0
  259. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/account.py +0 -0
  260. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/article.py +0 -0
  261. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/conversation.py +0 -0
  262. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/part.py +0 -0
  263. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/server_info.py +0 -0
  264. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/ticket.py +0 -0
  265. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/resources/user.py +0 -0
  266. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/server.py +0 -0
  267. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/__init__.py +0 -0
  268. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/accounts.py +0 -0
  269. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/articles.py +0 -0
  270. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/engagements.py +0 -0
  271. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/groups.py +0 -0
  272. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/incidents.py +0 -0
  273. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/links.py +0 -0
  274. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/parts.py +0 -0
  275. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/question_answers.py +0 -0
  276. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/recommendations.py +0 -0
  277. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/rev_orgs.py +0 -0
  278. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/search.py +0 -0
  279. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/server_info.py +0 -0
  280. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/slas.py +0 -0
  281. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/tags.py +0 -0
  282. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/timeline.py +0 -0
  283. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/tools/users.py +0 -0
  284. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/utils/__init__.py +0 -0
  285. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/utils/don_id.py +0 -0
  286. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/utils/errors.py +0 -0
  287. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/utils/formatting.py +0 -0
  288. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/src/devrev_mcp/utils/pagination.py +0 -0
  289. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/__init__.py +0 -0
  290. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/conftest.py +0 -0
  291. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/__init__.py +0 -0
  292. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/conftest.py +0 -0
  293. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_accounts_e2e.py +0 -0
  294. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
  295. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_articles_lifecycle.py +0 -0
  296. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_backwards_compatibility.py +0 -0
  297. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_contacts_e2e.py +0 -0
  298. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_core_services_phase1.py +0 -0
  299. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_extended_services_phase2.py +0 -0
  300. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_get_endpoints.py +0 -0
  301. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_issues_e2e.py +0 -0
  302. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_kb_articles_e2e.py +0 -0
  303. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_mcp_articles.py +0 -0
  304. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_ping.py +0 -0
  305. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_question_answers_e2e.py +0 -0
  306. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_readonly_endpoints.py +0 -0
  307. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_specialized_services_phase3.py +0 -0
  308. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_tickets_e2e.py +0 -0
  309. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/test_write_operations.py +0 -0
  310. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/utils/__init__.py +0 -0
  311. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/utils/cleanup.py +0 -0
  312. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/utils/constants.py +0 -0
  313. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/integration/utils/data_manager.py +0 -0
  314. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/performance/__init__.py +0 -0
  315. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/performance/test_articles_performance.py +0 -0
  316. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/__init__.py +0 -0
  317. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/__init__.py +0 -0
  318. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_audit.py +0 -0
  319. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_config.py +0 -0
  320. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
  321. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_prompts.py +0 -0
  322. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_resources.py +0 -0
  323. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_server_info.py +0 -0
  324. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
  325. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_articles.py +0 -0
  326. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
  327. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_groups.py +0 -0
  328. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
  329. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_links.py +0 -0
  330. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_parts.py +0 -0
  331. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_question_answers.py +0 -0
  332. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  333. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_search.py +0 -0
  334. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_slas.py +0 -0
  335. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_tags.py +0 -0
  336. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
  337. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_tools_users.py +0 -0
  338. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/mcp/test_utils.py +0 -0
  339. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/models/__init__.py +0 -0
  340. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/models/test_user_state_regression.py +0 -0
  341. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/__init__.py +0 -0
  342. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/conftest.py +0 -0
  343. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_articles.py +0 -0
  344. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_async_services.py +0 -0
  345. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_brands.py +0 -0
  346. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_code_changes.py +0 -0
  347. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_engagements.py +0 -0
  348. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_groups.py +0 -0
  349. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_incidents.py +0 -0
  350. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_links.py +0 -0
  351. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_notifications.py +0 -0
  352. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_parts.py +0 -0
  353. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_preferences.py +0 -0
  354. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_question_answers.py +0 -0
  355. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_recommendations.py +0 -0
  356. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_search.py +0 -0
  357. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_slas.py +0 -0
  358. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_tags.py +0 -0
  359. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_timeline_entries.py +0 -0
  360. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_track_events.py +0 -0
  361. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_uoms.py +0 -0
  362. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/services/test_webhooks.py +0 -0
  363. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_articles_unified.py +0 -0
  364. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_artifacts.py +0 -0
  365. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_backward_compatibility.py +0 -0
  366. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_client.py +0 -0
  367. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_config.py +0 -0
  368. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_content_converter.py +0 -0
  369. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_deprecation.py +0 -0
  370. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_don_id_validation.py +0 -0
  371. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_error_handling.py +0 -0
  372. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_exceptions.py +0 -0
  373. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_http.py +0 -0
  374. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_logging.py +0 -0
  375. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_pagination.py +0 -0
  376. {devrev_python_sdk-2.14.0 → devrev_python_sdk-3.0.0}/tests/unit/test_rev_orgs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 2.14.0
3
+ Version: 3.0.0
4
4
  Summary: A modern, type-safe Python SDK for the DevRev API
5
5
  Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
6
6
  Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
@@ -0,0 +1,84 @@
1
+ # Conversations Service
2
+
3
+ Manage customer conversations in DevRev.
4
+
5
+ ## ConversationsService
6
+
7
+ ::: devrev.services.conversations.ConversationsService
8
+ options:
9
+ show_source: true
10
+
11
+ ## AsyncConversationsService
12
+
13
+ ::: devrev.services.conversations.AsyncConversationsService
14
+ options:
15
+ show_source: true
16
+
17
+ ## Usage Examples
18
+
19
+ ### List Conversations
20
+
21
+ ```python
22
+ from devrev import DevRevClient
23
+
24
+ client = DevRevClient()
25
+
26
+ response = client.conversations.list(limit=20)
27
+ for conv in response.conversations:
28
+ print(f"{conv.id}: {conv.title}")
29
+ ```
30
+
31
+ ### Get Conversation
32
+
33
+ ```python
34
+ response = client.conversations.get(id="don:core:dvrv-us-1:devo/1:conversation/123")
35
+ print(f"Title: {response.conversation.title}")
36
+ ```
37
+
38
+ ### Sort Order
39
+
40
+ `list` accepts a `sort_by` parameter. Both forms are accepted and normalized
41
+ to the server form before the request is sent:
42
+
43
+ - Canonical: `"modified_date:desc"`, `"created_date:asc"`
44
+ - Legacy shortcut: `"-modified_date"` (descending), `"created_date"` (ascending)
45
+
46
+ !!! note "Server requires `field:direction`"
47
+ The DevRev server rejects bare `"-field"` entries. The SDK normalizes
48
+ legacy shortcuts to the `field:direction` form on your behalf.
49
+
50
+ ### List Conversations Modified Since
51
+
52
+ Use `list_modified_since` to stream conversations that changed within a recent
53
+ window. It pages server-side sorted `modified_date:desc` and stops as soon as
54
+ a record older than the cutoff is seen.
55
+
56
+ ```python
57
+ from datetime import datetime, timedelta, timezone
58
+ from devrev import DevRevClient
59
+
60
+ client = DevRevClient()
61
+
62
+ cutoff = datetime.now(timezone.utc) - timedelta(days=7)
63
+ recent = client.conversations.list_modified_since(cutoff, limit=200)
64
+ for conv in recent:
65
+ print(f"{conv.id}: {conv.title}")
66
+ ```
67
+
68
+ ### Async Usage
69
+
70
+ ```python
71
+ import asyncio
72
+ from datetime import datetime, timedelta, timezone
73
+ from devrev import AsyncDevRevClient
74
+
75
+ async def main():
76
+ async with AsyncDevRevClient() as client:
77
+ cutoff = datetime.now(timezone.utc) - timedelta(days=1)
78
+ recent = await client.conversations.list_modified_since(cutoff)
79
+ for conv in recent:
80
+ print(f"{conv.id}: {conv.title}")
81
+
82
+ asyncio.run(main())
83
+ ```
84
+
@@ -2,6 +2,9 @@
2
2
 
3
3
  Manage work items (issues, tickets, tasks, opportunities) in DevRev.
4
4
 
5
+ In DevRev, **works** is the umbrella type covering tickets (customer support),
6
+ issues (engineering), and tasks.
7
+
5
8
  ## WorksService
6
9
 
7
10
  ::: devrev.services.works.WorksService
@@ -15,6 +18,8 @@ Manage work items (issues, tickets, tasks, opportunities) in DevRev.
15
18
  - delete
16
19
  - export
17
20
  - count
21
+ - list_modified_since
22
+ - list_created_since
18
23
 
19
24
  ## AsyncWorksService
20
25
 
@@ -121,6 +126,65 @@ response = client.works.export(
121
126
  print(f"Exported {len(response.works)} issues")
122
127
  ```
123
128
 
129
+ ### Sort Order
130
+
131
+ `list` and `export` accept a `sort_by` parameter. Both forms are accepted and
132
+ normalized to the server form before the request is sent:
133
+
134
+ - Canonical: `"modified_date:desc"`, `"created_date:asc"`
135
+ - Legacy shortcut: `"-modified_date"` (descending), `"created_date"` (ascending)
136
+
137
+ ```python
138
+ # Canonical form
139
+ response = client.works.list(
140
+ type=[WorkType.TICKET],
141
+ sort_by=["modified_date:desc"],
142
+ )
143
+
144
+ # Legacy shortcut — normalized internally to "modified_date:desc"
145
+ response = client.works.list(
146
+ type=[WorkType.TICKET],
147
+ sort_by=["-modified_date"],
148
+ )
149
+ ```
150
+
151
+ !!! note "Server requires `field:direction`"
152
+ The DevRev server rejects bare `"-field"` entries. The SDK normalizes
153
+ legacy shortcuts to the `field:direction` form on your behalf — you do not
154
+ need to change existing call sites, but new code should prefer the
155
+ canonical form.
156
+
157
+ ### List Work Items Modified or Created Since
158
+
159
+ Use `list_modified_since` / `list_created_since` to stream work items that
160
+ changed within a recent window. Both helpers page server-side sorted
161
+ `{timestamp_field}:desc` and early-exit as soon as a record older than the
162
+ cutoff is seen.
163
+
164
+ ```python
165
+ from datetime import datetime, timedelta, timezone
166
+ from devrev import DevRevClient
167
+ from devrev.models import WorkType
168
+
169
+ client = DevRevClient()
170
+
171
+ cutoff = datetime.now(timezone.utc) - timedelta(days=7)
172
+
173
+ # All works modified in the last 7 days
174
+ recent = client.works.list_modified_since(
175
+ cutoff,
176
+ type=[WorkType.TICKET, WorkType.ISSUE],
177
+ )
178
+
179
+ # Cap total items; page_size tunes per-request page size
180
+ recent_capped = client.works.list_created_since(
181
+ cutoff,
182
+ type=[WorkType.TICKET],
183
+ limit=500,
184
+ page_size=100,
185
+ )
186
+ ```
187
+
124
188
  ### Async Usage
125
189
 
126
190
  ```python
@@ -133,6 +197,10 @@ async def main():
133
197
  for work in response.works:
134
198
  print(f"[{work.type}] {work.title}")
135
199
 
200
+ # Async variants of the time-based helpers
201
+ cutoff = datetime.now(timezone.utc) - timedelta(days=1)
202
+ recent = await client.works.list_modified_since(cutoff)
203
+
136
204
  asyncio.run(main())
137
205
  ```
138
206
 
@@ -7,6 +7,100 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ ### Changed
13
+
14
+ ### Fixed
15
+
16
+ ## [3.0.0] - 2026-04-22
17
+
18
+ ### Added
19
+
20
+ - **`WorksService.list_modified_since` and `list_created_since`** (CUSS-451) —
21
+ New sync and async helpers on `WorksService` / `AsyncWorksService` that
22
+ stream work items with `modified_date >= after` or `created_date >= after`.
23
+ Both page server-side sorted `{timestamp_field}:desc` and early-exit when a
24
+ record older than the cutoff is seen. Accept `type`, `owned_by`,
25
+ `applies_to_part`, `limit` (hard cap on total items), and `page_size`
26
+ (per-request page size).
27
+ - **`ConversationsService.list_modified_since`** (CUSS-451) — New sync and
28
+ async helper that streams conversations modified after a given datetime,
29
+ newest first. Pages via cursor until the server returns no further cursor,
30
+ `limit` is reached, or a conversation older than `after` is seen. Accepts
31
+ `limit` and `page_size`.
32
+ - **MCP tools for time-windowed queries** (CUSS-451) —
33
+ `devrev_works_list_modified_since`, `devrev_works_list_created_since`, and
34
+ `devrev_conversations_list_modified_since`. Each accepts an ISO-8601
35
+ `after` timestamp and optional `limit`.
36
+ - **`sort_by` and `modified_date_after` / `modified_date_before` on
37
+ `devrev_conversations_list` MCP tool** (CUSS-451) — Expose the same sort
38
+ and date-range filters already available in the SDK `list` request.
39
+ - **`sort_by` on `devrev_works_list` and `devrev_works_export` MCP tools**
40
+ (CUSS-451) — Forward the sort order down to the SDK.
41
+
42
+ ### Changed / Breaking
43
+
44
+ - **BREAKING: `WorksListRequest` and `WorksExportRequest` no longer accept
45
+ date filter fields** (CUSS-451) — `WorksListRequest` previously exposed
46
+ `created_date` and `modified_date` fields, and `WorksExportRequest`
47
+ previously exposed a `created_date` field. These were aspirational: the
48
+ DevRev PUBLIC API rejects both filters on `/works.list` and
49
+ `/works.export` with `400 bad-request.bad-request-field`. The fields have
50
+ been removed from both request models. Existing callers that populate
51
+ `WorksListRequest(created_date=...)`,
52
+ `WorksListRequest(modified_date=...)`, or
53
+ `WorksExportRequest(created_date=...)` will now raise
54
+ `pydantic.ValidationError` at construction time.
55
+
56
+ **Migration**: use the new `WorksService.list_modified_since` /
57
+ `WorksService.list_created_since` helpers (sync and async), which page
58
+ server-side sorted `{timestamp_field}:desc` and early-exit on records
59
+ older than the cutoff. See `docs/api/services/works.md` for examples.
60
+ - **`sort_by` syntax normalization** (CUSS-451) — The DevRev server rejects
61
+ bare `"-field"` entries on `/works.list` and `/conversations.list` and
62
+ requires the canonical `"field:asc"` / `"field:desc"` form. `WorksService`
63
+ and `ConversationsService` now normalize both legacy `"-field"` /
64
+ `"field"` shortcuts and canonical `"field:direction"` entries to the
65
+ server form before sending the request. Existing call sites using the
66
+ `"-field"` shortcut continue to work unchanged; new code should prefer the
67
+ canonical form. Callers that previously sent `"-field"` directly to a
68
+ request model and bypassed the service layer will now see their input
69
+ normalized when they route through `WorksService.list` /
70
+ `ConversationsService.list`.
71
+
72
+ ### Fixed
73
+
74
+ - **`/works.list` rejected bare `"-field"` sort entries** (CUSS-451) —
75
+ Integration tests observed the DevRev PUBLIC API returning an error for
76
+ bare `"-modified_date"` / `"-created_date"` sort values, requiring the
77
+ canonical `field:direction` form. `WorksService.list` /
78
+ `WorksService.export` (and their async variants) now normalize
79
+ `sort_by` before sending.
80
+ - **`/conversations.list` rejected bare `"-field"` sort entries** (CUSS-451)
81
+ — Same server behavior observed for conversations. `ConversationsService.list`
82
+ (and its async variant) now normalize `sort_by` before sending.
83
+ - **`list_modified_since` / `list_created_since` helpers paginate until the
84
+ cutoff is crossed** (CUSS-451) — Server-side `modified_date` / `created_date`
85
+ filters may not be honored uniformly across older accounts. The new
86
+ helpers apply client-side early-exit on the sorted stream so results are
87
+ bounded by the cutoff even when the server does not filter.
88
+ - **`BaseService._post` serialized non-JSON-native types incorrectly**
89
+ (CUSS-451) — `BaseService._post` and `AsyncBaseService._post` dumped
90
+ request models with `model_dump(exclude_none=True, by_alias=True)`, which
91
+ returns Python-native types (e.g., `datetime` as `datetime` objects
92
+ rather than ISO 8601 strings). Request bodies containing timestamps — as
93
+ used by the new `list_modified_since` / `list_created_since` filter
94
+ payloads — failed to round-trip through the HTTP layer. Both methods now
95
+ pass `mode="json"` so Pydantic produces JSON-serializable primitives
96
+ before the request is sent.
97
+
98
+ ## [2.14.1] - 2026-04-14
99
+
100
+ ### Security
101
+
102
+ - **Bump pytest from 8.4.2 to 9.0.3** (CUSS-409) — Major version upgrade including security fix CVE-2025-71176 (insecure temporary directory). All 1,091 tests pass without modification.
103
+
10
104
  ## [2.14.0] - 2026-04-14
11
105
 
12
106
  ### Added
@@ -630,6 +724,7 @@ This release marks the completion of all four development phases, providing a pr
630
724
 
631
725
  | Version | Date | Highlights |
632
726
  |---------|------|------------|
727
+ | 3.0.0 | 2026-04-22 | 🚨 BREAKING: Remove unsupported date filter fields from Works requests; add time-windowed list helpers |
633
728
  | 2.7.0 | 2026-02-28 | 🔍 Server version discoverability for AI agents |
634
729
  | 2.6.0 | 2026-02-28 | 🔐 Compliance-grade audit logging, MCP documentation |
635
730
  | 2.4.1 | 2026-02-27 | 🐛 CI: mypy strict-mode type errors, test collection |
@@ -10,15 +10,32 @@ Complete reference of all MCP capabilities provided by the DevRev MCP Server.
10
10
 
11
11
  Tools are the primary way AI assistants interact with DevRev. Each tool maps to one or more DevRev API endpoints.
12
12
 
13
- ### Works (Tickets & Issues)
13
+ ### Works (Tickets, Issues & Tasks)
14
+
15
+ In DevRev, **works** is the umbrella type covering tickets (customer support),
16
+ issues (engineering), and tasks.
14
17
 
15
18
  | Tool | Description |
16
19
  |------|-------------|
17
- | `devrev_works_list` | List work items (tickets, issues) with filters |
20
+ | `devrev_works_list` | List work items with filters and `sort_by` (e.g., `["modified_date:desc"]`) |
18
21
  | `devrev_works_get` | Get a specific work item by ID |
19
- | `devrev_works_create` | Create a new ticket or issue |
22
+ | `devrev_works_create` | Create a new ticket, issue, or task |
20
23
  | `devrev_works_update` | Update a work item's fields |
21
24
  | `devrev_works_delete` | Delete a work item (requires destructive tools enabled) |
25
+ | `devrev_works_export` | Bulk-export work items (accepts `sort_by`) |
26
+ | `devrev_works_list_modified_since` | List work items with `modified_date >= after` (ISO-8601), paged newest-first |
27
+ | `devrev_works_list_created_since` | List work items with `created_date >= after` (ISO-8601), paged newest-first |
28
+
29
+ **Key parameters:**
30
+
31
+ - `sort_by` (on `devrev_works_list` / `devrev_works_export`): List of
32
+ `"field:asc"` / `"field:desc"` entries. The legacy `"-field"` shortcut is
33
+ also accepted and normalized by the SDK before the request is sent.
34
+ - `after` (on `*_list_modified_since` / `*_list_created_since`): ISO-8601
35
+ timestamp (e.g., `"2025-01-15T00:00:00Z"`). Items at or after this
36
+ timestamp are returned.
37
+ - `limit` (on `*_list_modified_since` / `*_list_created_since`): Hard cap on
38
+ total items returned across all pages.
22
39
 
23
40
  ### Accounts
24
41
 
@@ -64,11 +81,22 @@ Tools are the primary way AI assistants interact with DevRev. Each tool maps to
64
81
 
65
82
  | Tool | Description |
66
83
  |------|-------------|
67
- | `devrev_conversations_list` | List conversations |
84
+ | `devrev_conversations_list` | List conversations; supports `modified_date_after` / `modified_date_before` (ISO-8601) and `sort_by` |
85
+ | `devrev_conversations_list_modified_since` | List conversations with `modified_date >= after` (ISO-8601), paged newest-first |
68
86
  | `devrev_conversations_get` | Get conversation details |
69
87
  | `devrev_conversations_create` | Create a conversation |
70
88
  | `devrev_conversations_update` | Update a conversation |
71
89
 
90
+ **Key parameters:**
91
+
92
+ - `modified_date_after` / `modified_date_before` (on `devrev_conversations_list`):
93
+ ISO-8601 timestamps bounding the `modified_date` filter.
94
+ - `sort_by` (on `devrev_conversations_list`): Same syntax as on
95
+ `devrev_works_list` — `"field:asc"` / `"field:desc"` entries, with the
96
+ legacy `"-field"` shortcut accepted and normalized by the SDK.
97
+ - `after` (on `devrev_conversations_list_modified_since`): ISO-8601
98
+ timestamp. Items at or after this timestamp are returned.
99
+
72
100
  ### Parts (Products & Features)
73
101
 
74
102
  | Tool | Description |
@@ -220,3 +220,115 @@ components:
220
220
  nullable: true
221
221
  description: User state
222
222
 
223
+ # ============================================================================
224
+ # CORRECTION #3: /works.list sort_by syntax (CUSS-451)
225
+ # ============================================================================
226
+ #
227
+ # Issue: OpenAPI spec documents `sort_by` as an array of strings without
228
+ # specifying the accepted entry format. The live PUBLIC API rejects
229
+ # bare "-field" shortcuts and requires the canonical
230
+ # "field:asc" / "field:desc" form.
231
+ #
232
+ # Affected Endpoint: POST /works.list (and POST /works.export)
233
+ # Severity: HIGH - Causes 4xx validation errors for any client that
234
+ # relies on the common "-field" descending shortcut.
235
+ # Ticket: CUSS-451
236
+ #
237
+ # Observed server response for `sort_by: ["-modified_date"]`:
238
+ # 400 Bad Request — "sort_by entries must be of the form
239
+ # 'field:asc' or 'field:desc'"
240
+ #
241
+ # SDK Mitigation: `WorksService.list` / `WorksService.export` normalize
242
+ # `sort_by` entries before sending. Callers MAY continue to pass
243
+ # "-field" / "field" shortcuts; they are rewritten to
244
+ # "field:desc" / "field:asc" on the wire.
245
+ #
246
+ # Spec Correction (documentation-only — no schema change needed):
247
+ WorksListSortByCorrection:
248
+ type: array
249
+ description: |
250
+ Sort order for /works.list results.
251
+
252
+ **Required format**: Each entry MUST be `"field:asc"` or
253
+ `"field:desc"`. The server rejects bare `"-field"` and `"field"`
254
+ shortcuts.
255
+
256
+ **SDK behavior**: The Python SDK normalizes legacy shortcuts to the
257
+ canonical form before sending, so callers may pass either format to
258
+ `WorksService.list` / `WorksService.export`.
259
+ items:
260
+ type: string
261
+ pattern: "^[a-zA-Z_][a-zA-Z0-9_.]*:(asc|desc)$"
262
+ example: "modified_date:desc"
263
+ example:
264
+ - "modified_date:desc"
265
+ - "created_date:asc"
266
+
267
+ # ============================================================================
268
+ # CORRECTION #4: /conversations.list sort_by syntax (CUSS-451)
269
+ # ============================================================================
270
+ #
271
+ # Issue: Same as Correction #3 but on the conversations endpoint. The
272
+ # live PUBLIC API rejects bare "-field" entries on
273
+ # POST /conversations.list and requires "field:asc" / "field:desc".
274
+ #
275
+ # Affected Endpoint: POST /conversations.list
276
+ # Severity: HIGH - Causes 4xx validation errors.
277
+ # Ticket: CUSS-451
278
+ #
279
+ # SDK Mitigation: `ConversationsService.list` normalizes `sort_by`
280
+ # entries before sending.
281
+ ConversationsListSortByCorrection:
282
+ type: array
283
+ description: |
284
+ Sort order for /conversations.list results.
285
+
286
+ **Required format**: Each entry MUST be `"field:asc"` or
287
+ `"field:desc"`. Matches the corrected syntax documented for
288
+ /works.list.
289
+ items:
290
+ type: string
291
+ pattern: "^[a-zA-Z_][a-zA-Z0-9_.]*:(asc|desc)$"
292
+ example: "modified_date:desc"
293
+ example:
294
+ - "modified_date:desc"
295
+
296
+ # ============================================================================
297
+ # CORRECTION #5: Time-windowed listing on /works.list and /conversations.list (CUSS-451)
298
+ # ============================================================================
299
+ #
300
+ # Issue: The spec documents `modified_date` / `created_date` filters on
301
+ # /works.list and /conversations.list, but server-side filtering is
302
+ # not uniformly honored across all accounts. Observed behavior:
303
+ # - Some accounts return records older than the declared `after`
304
+ # cutoff when paginating results.
305
+ # - Sort order is honored reliably when `sort_by` uses the
306
+ # `field:direction` form (see Corrections #3 and #4).
307
+ #
308
+ # Affected Endpoints: POST /works.list, POST /conversations.list
309
+ # Severity: MEDIUM - Does not break validation, but causes over-broad
310
+ # result sets for clients that rely on the server-side date filter.
311
+ # Ticket: CUSS-451
312
+ #
313
+ # SDK Mitigation: `WorksService.list_modified_since`,
314
+ # `WorksService.list_created_since`, and
315
+ # `ConversationsService.list_modified_since` page server-side sorted
316
+ # `{timestamp_field}:desc` and apply a client-side early-exit as soon
317
+ # as a record older than the cutoff is seen. This guarantees the
318
+ # returned set is bounded by the cutoff regardless of server-side
319
+ # filter behavior.
320
+ #
321
+ # Documentation-only correction (no schema change):
322
+ TimeWindowedListingCorrection:
323
+ type: object
324
+ description: |
325
+ /works.list and /conversations.list support `modified_date` and
326
+ (for works) `created_date` filters, but server-side honoring of
327
+ these filters is inconsistent across accounts. Clients that need a
328
+ strict time-window guarantee should sort by the timestamp field in
329
+ descending order and early-exit on the first record older than the
330
+ cutoff.
331
+ properties:
332
+ note:
333
+ type: string
334
+ example: "See SDK helpers list_modified_since / list_created_since."
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "2.14.0"
7
+ version = "3.0.0"
8
8
  description = "A modern, type-safe Python SDK for the DevRev API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -8,6 +8,7 @@ from typing import Any
8
8
  from pydantic import Field
9
9
 
10
10
  from devrev.models.base import (
11
+ DateFilter,
11
12
  DevRevBaseModel,
12
13
  DevRevResponseModel,
13
14
  PaginatedResponse,
@@ -63,6 +64,13 @@ class ConversationsListRequest(DevRevBaseModel):
63
64
 
64
65
  cursor: str | None = Field(default=None, description="Pagination cursor")
65
66
  limit: int | None = Field(default=None, ge=1, le=100, description="Max results")
67
+ modified_date: DateFilter | None = Field(
68
+ default=None, description="Filter by modification date"
69
+ )
70
+ sort_by: list[str] | None = Field(
71
+ default=None,
72
+ description='Sort order (e.g., ["modified_date:desc"])',
73
+ )
66
74
 
67
75
 
68
76
  class ConversationsUpdateRequest(DevRevBaseModel):
@@ -167,15 +167,18 @@ class WorksListRequest(DevRevBaseModel):
167
167
  type: list[WorkType] | None = Field(default=None, description="Filter by work types")
168
168
  applies_to_part: list[str] | None = Field(default=None, description="Filter by part IDs")
169
169
  created_by: list[str] | None = Field(default=None, description="Filter by creator user IDs")
170
- created_date: DateFilter | None = Field(default=None, description="Filter by creation date")
171
170
  cursor: str | None = Field(default=None, description="Pagination cursor")
172
171
  external_ref: list[str] | None = Field(default=None, description="Filter by external refs")
173
172
  limit: int | None = Field(default=None, ge=1, le=100, description="Max results to return")
174
- modified_date: DateFilter | None = Field(
175
- default=None, description="Filter by modification date"
176
- )
177
173
  owned_by: list[str] | None = Field(default=None, description="Filter by owner user IDs")
178
- sort_by: list[str] | None = Field(default=None, description="Sort order")
174
+ sort_by: list[str] | None = Field(
175
+ default=None,
176
+ description=(
177
+ "Sort order. Each entry uses the server form 'field:asc' or 'field:desc' "
178
+ "(e.g. 'modified_date:desc'). The legacy '-field' form is accepted by the "
179
+ "service and normalized before being sent."
180
+ ),
181
+ )
179
182
  stage_name: list[str] | None = Field(default=None, description="Filter by stage names")
180
183
  target_close_date: DateFilter | None = Field(
181
184
  default=None, description="Filter by target close date"
@@ -226,8 +229,15 @@ class WorksExportRequest(DevRevBaseModel):
226
229
  type: list[WorkType] | None = Field(default=None, description="Filter by work types")
227
230
  applies_to_part: list[str] | None = Field(default=None, description="Filter by part IDs")
228
231
  created_by: list[str] | None = Field(default=None, description="Filter by creator user IDs")
229
- created_date: DateFilter | None = Field(default=None, description="Filter by creation date")
230
232
  first: int | None = Field(default=None, ge=1, le=10000, description="Max results")
233
+ sort_by: list[str] | None = Field(
234
+ default=None,
235
+ description=(
236
+ "Sort order. Each entry uses the server form 'field:asc' or 'field:desc' "
237
+ "(e.g. 'modified_date:desc'). The legacy '-field' form is accepted by the "
238
+ "service and normalized before being sent."
239
+ ),
240
+ )
231
241
 
232
242
 
233
243
  class WorksCountRequest(DevRevBaseModel):
@@ -72,7 +72,9 @@ class BaseService:
72
72
  Returns:
73
73
  Parsed response model or raw dict if no response_type
74
74
  """
75
- data = request.model_dump(exclude_none=True, by_alias=True) if request else None
75
+ data = (
76
+ request.model_dump(exclude_none=True, by_alias=True, mode="json") if request else None
77
+ )
76
78
  response = self._http.post(endpoint, data=data)
77
79
 
78
80
  # Handle empty responses (204 No Content or empty body)
@@ -185,7 +187,9 @@ class AsyncBaseService:
185
187
  Returns:
186
188
  Parsed response model or raw dict if no response_type
187
189
  """
188
- data = request.model_dump(exclude_none=True, by_alias=True) if request else None
190
+ data = (
191
+ request.model_dump(exclude_none=True, by_alias=True, mode="json") if request else None
192
+ )
189
193
  response = await self._http.post(endpoint, data=data)
190
194
 
191
195
  # Handle empty responses (204 No Content or empty body)