devrev-Python-SDK 2.1.1__tar.gz → 2.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/ci.yml +2 -2
  2. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/claude-code-review.yml +1 -1
  3. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/claude.yml +1 -1
  4. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/docs.yml +2 -2
  5. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/integration-tests.yml +7 -7
  6. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/PKG-INFO +3 -3
  7. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/changelog.md +11 -0
  8. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/pyproject.toml +2 -2
  9. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/parts.py +9 -1
  10. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/works.py +5 -1
  11. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_works.py +64 -0
  12. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/bug-fixer.md +0 -0
  13. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/builder.md +0 -0
  14. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/documentation.md +0 -0
  15. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/foreman.md +0 -0
  16. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/pr-review-boss.md +0 -0
  17. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/release-manager.md +0 -0
  18. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/simplifier.md +0 -0
  19. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/agents/tester.md +0 -0
  20. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/commands/foreman-work.md +0 -0
  21. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/commands/release-prepare.md +0 -0
  22. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/commands/review-start.md +0 -0
  23. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/commands/simplify-code.md +0 -0
  24. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/code-quality.md +0 -0
  25. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/data-modeling.md +0 -0
  26. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/devrev-sdk.md +0 -0
  27. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/git-workflow.md +0 -0
  28. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/pull-requests.md +0 -0
  29. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/python-development.md +0 -0
  30. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/security.md +0 -0
  31. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.augment/rules/testing.md +0 -0
  32. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.env.sample +0 -0
  33. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  34. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  35. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  36. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  37. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/dependabot.yml +0 -0
  38. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/pull_request_template.md +0 -0
  39. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/api-check.yml +0 -0
  40. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/release.yml +0 -0
  41. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.github/workflows/sync-openapi.yml +0 -0
  42. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.gitignore +0 -0
  43. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/.pre-commit-config.yaml +0 -0
  44. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/CODE_OF_CONDUCT.md +0 -0
  45. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/CONTRIBUTING.md +0 -0
  46. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/DEPRECATIONS.md +0 -0
  47. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/KNOWN_ISSUES.md +0 -0
  48. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/README.md +0 -0
  49. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/SECURITY.md +0 -0
  50. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/benchmarks/README.md +0 -0
  51. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/benchmarks/bench_http_client.py +0 -0
  52. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/benchmarks/bench_models.py +0 -0
  53. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/benchmarks/bench_pagination.py +0 -0
  54. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/benchmarks/conftest.py +0 -0
  55. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/cloudbuild.yaml +0 -0
  56. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/context7.json +0 -0
  57. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/brands.md +0 -0
  58. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/engagements.md +0 -0
  59. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/incidents.md +0 -0
  60. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/index.md +0 -0
  61. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/question-answers.md +0 -0
  62. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/recommendations.md +0 -0
  63. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/search.md +0 -0
  64. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta/uoms.md +0 -0
  65. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/beta-api-differences.md +0 -0
  66. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/client.md +0 -0
  67. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/config.md +0 -0
  68. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/exceptions.md +0 -0
  69. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/index.md +0 -0
  70. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/models/accounts.md +0 -0
  71. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/models/base.md +0 -0
  72. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/models/index.md +0 -0
  73. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/models/users.md +0 -0
  74. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/models/works.md +0 -0
  75. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/accounts.md +0 -0
  76. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/articles.md +0 -0
  77. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/code-changes.md +0 -0
  78. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/conversations.md +0 -0
  79. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/dev-users.md +0 -0
  80. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/groups.md +0 -0
  81. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/index.md +0 -0
  82. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/links.md +0 -0
  83. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/parts.md +0 -0
  84. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/rev-users.md +0 -0
  85. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/slas.md +0 -0
  86. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/tags.md +0 -0
  87. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/timeline-entries.md +0 -0
  88. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/webhooks.md +0 -0
  89. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/api/services/works.md +0 -0
  90. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/examples/advanced.md +0 -0
  91. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/examples/basic.md +0 -0
  92. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/examples/beta-features.md +0 -0
  93. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/examples/index.md +0 -0
  94. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/examples/integrations.md +0 -0
  95. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/getting-started/authentication.md +0 -0
  96. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/getting-started/index.md +0 -0
  97. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/getting-started/installation.md +0 -0
  98. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/getting-started/quickstart.md +0 -0
  99. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/beta-api.md +0 -0
  100. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/compatibility.md +0 -0
  101. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/configuration.md +0 -0
  102. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/error-handling.md +0 -0
  103. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/github-actions-setup.md +0 -0
  104. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/index.md +0 -0
  105. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/logging.md +0 -0
  106. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/pagination.md +0 -0
  107. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/sync-vs-async.md +0 -0
  108. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/testing.md +0 -0
  109. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/version-support.md +0 -0
  110. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/guides/write-integration-testing-strategy.md +0 -0
  111. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/docs/index.md +0 -0
  112. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/README.md +0 -0
  113. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/README.md +0 -0
  114. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/async_example.py +0 -0
  115. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/create_work.py +0 -0
  116. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/error_handling.py +0 -0
  117. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/list_accounts.py +0 -0
  118. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/pagination.py +0 -0
  119. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/basic/search_users.py +0 -0
  120. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/cloud_functions/README.md +0 -0
  121. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/cloud_functions/main.py +0 -0
  122. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/cloud_functions/requirements.txt +0 -0
  123. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/fastapi/README.md +0 -0
  124. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/fastapi/main.py +0 -0
  125. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/fastapi/requirements.txt +0 -0
  126. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/flask/README.md +0 -0
  127. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/flask/app.py +0 -0
  128. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/examples/integrations/flask/requirements.txt +0 -0
  129. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/llms-ctx-full.txt +0 -0
  130. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/llms-ctx.txt +0 -0
  131. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/llms.txt +0 -0
  132. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/mkdocs.yml +0 -0
  133. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/openapi-beta.yaml +0 -0
  134. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/openapi-public.yaml +0 -0
  135. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/openapi-spec-corrections.yaml +0 -0
  136. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/scripts/build_ai_docs.py +0 -0
  137. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/scripts/setup-github-secrets.sh +0 -0
  138. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/__init__.py +0 -0
  139. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/client.py +0 -0
  140. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/config.py +0 -0
  141. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/exceptions.py +0 -0
  142. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/__init__.py +0 -0
  143. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/accounts.py +0 -0
  144. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/articles.py +0 -0
  145. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/base.py +0 -0
  146. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/brands.py +0 -0
  147. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/code_changes.py +0 -0
  148. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/conversations.py +0 -0
  149. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/dev_users.py +0 -0
  150. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/engagements.py +0 -0
  151. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/groups.py +0 -0
  152. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/incidents.py +0 -0
  153. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/links.py +0 -0
  154. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/notifications.py +0 -0
  155. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/preferences.py +0 -0
  156. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/question_answers.py +0 -0
  157. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/recommendations.py +0 -0
  158. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/rev_users.py +0 -0
  159. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/search.py +0 -0
  160. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/slas.py +0 -0
  161. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/sync.py +0 -0
  162. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/tags.py +0 -0
  163. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/tasks.py +0 -0
  164. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/timeline_entries.py +0 -0
  165. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/timeline_events.py +0 -0
  166. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/track_events.py +0 -0
  167. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/uoms.py +0 -0
  168. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/webhooks.py +0 -0
  169. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/models/widgets.py +0 -0
  170. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/py.typed +0 -0
  171. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/__init__.py +0 -0
  172. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/accounts.py +0 -0
  173. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/articles.py +0 -0
  174. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/base.py +0 -0
  175. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/brands.py +0 -0
  176. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/code_changes.py +0 -0
  177. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/conversations.py +0 -0
  178. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/dev_users.py +0 -0
  179. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/engagements.py +0 -0
  180. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/groups.py +0 -0
  181. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/incidents.py +0 -0
  182. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/links.py +0 -0
  183. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/notifications.py +0 -0
  184. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/parts.py +0 -0
  185. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/preferences.py +0 -0
  186. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/question_answers.py +0 -0
  187. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/recommendations.py +0 -0
  188. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/rev_users.py +0 -0
  189. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/search.py +0 -0
  190. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/slas.py +0 -0
  191. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/tags.py +0 -0
  192. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/timeline_entries.py +0 -0
  193. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/track_events.py +0 -0
  194. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/uoms.py +0 -0
  195. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/webhooks.py +0 -0
  196. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/services/works.py +0 -0
  197. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/utils/__init__.py +0 -0
  198. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/utils/deprecation.py +0 -0
  199. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/utils/http.py +0 -0
  200. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/utils/logging.py +0 -0
  201. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/src/devrev/utils/pagination.py +0 -0
  202. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/__init__.py +0 -0
  203. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/conftest.py +0 -0
  204. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/__init__.py +0 -0
  205. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/conftest.py +0 -0
  206. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_all_readonly_endpoints.py +0 -0
  207. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_backwards_compatibility.py +0 -0
  208. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_core_services_phase1.py +0 -0
  209. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_extended_services_phase2.py +0 -0
  210. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_get_endpoints.py +0 -0
  211. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_ping.py +0 -0
  212. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_readonly_endpoints.py +0 -0
  213. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_specialized_services_phase3.py +0 -0
  214. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/test_write_operations.py +0 -0
  215. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/utils/__init__.py +0 -0
  216. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/utils/cleanup.py +0 -0
  217. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/utils/constants.py +0 -0
  218. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/integration/utils/data_manager.py +0 -0
  219. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/__init__.py +0 -0
  220. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/models/__init__.py +0 -0
  221. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/__init__.py +0 -0
  222. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/conftest.py +0 -0
  223. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_articles.py +0 -0
  224. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_async_services.py +0 -0
  225. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_brands.py +0 -0
  226. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_code_changes.py +0 -0
  227. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_conversations.py +0 -0
  228. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_engagements.py +0 -0
  229. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_groups.py +0 -0
  230. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_incidents.py +0 -0
  231. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_links.py +0 -0
  232. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_notifications.py +0 -0
  233. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_parts.py +0 -0
  234. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_preferences.py +0 -0
  235. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_question_answers.py +0 -0
  236. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_recommendations.py +0 -0
  237. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_search.py +0 -0
  238. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_slas.py +0 -0
  239. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_tags.py +0 -0
  240. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_timeline_entries.py +0 -0
  241. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_track_events.py +0 -0
  242. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_uoms.py +0 -0
  243. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/services/test_webhooks.py +0 -0
  244. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_base_service.py +0 -0
  245. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_client.py +0 -0
  246. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_config.py +0 -0
  247. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_deprecation.py +0 -0
  248. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_exceptions.py +0 -0
  249. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_http.py +0 -0
  250. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_logging.py +0 -0
  251. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/tests/unit/test_pagination.py +0 -0
  252. {devrev_python_sdk-2.1.1 → devrev_python_sdk-2.1.2}/uv.lock +0 -0
@@ -14,10 +14,10 @@ jobs:
14
14
  python-version: ['3.11', '3.12', '3.13']
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v6
18
18
 
19
19
  - name: Set up Python ${{ matrix.python-version }}
20
- uses: actions/setup-python@v5
20
+ uses: actions/setup-python@v6
21
21
  with:
22
22
  python-version: ${{ matrix.python-version }}
23
23
 
@@ -27,7 +27,7 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - name: Checkout repository
30
- uses: actions/checkout@v4
30
+ uses: actions/checkout@v6
31
31
  with:
32
32
  fetch-depth: 1
33
33
 
@@ -26,7 +26,7 @@ jobs:
26
26
  actions: read # Required for Claude to read CI results on PRs
27
27
  steps:
28
28
  - name: Checkout repository
29
- uses: actions/checkout@v4
29
+ uses: actions/checkout@v6
30
30
  with:
31
31
  fetch-depth: 1
32
32
 
@@ -24,10 +24,10 @@ jobs:
24
24
  runs-on: ubuntu-latest
25
25
  steps:
26
26
  - name: Checkout
27
- uses: actions/checkout@v4
27
+ uses: actions/checkout@v6
28
28
 
29
29
  - name: Set up Python
30
- uses: actions/setup-python@v5
30
+ uses: actions/setup-python@v6
31
31
  with:
32
32
  python-version: '3.12'
33
33
 
@@ -36,10 +36,10 @@ jobs:
36
36
  python-version: ['3.11', '3.12', '3.13']
37
37
 
38
38
  steps:
39
- - uses: actions/checkout@v4
39
+ - uses: actions/checkout@v6
40
40
 
41
41
  - name: Set up Python ${{ matrix.python-version }}
42
- uses: actions/setup-python@v5
42
+ uses: actions/setup-python@v6
43
43
  with:
44
44
  python-version: ${{ matrix.python-version }}
45
45
 
@@ -77,10 +77,10 @@ jobs:
77
77
  issues: write
78
78
 
79
79
  steps:
80
- - uses: actions/checkout@v4
80
+ - uses: actions/checkout@v6
81
81
 
82
82
  - name: Set up Python
83
- uses: actions/setup-python@v5
83
+ uses: actions/setup-python@v6
84
84
  with:
85
85
  python-version: '3.11'
86
86
 
@@ -102,7 +102,7 @@ jobs:
102
102
 
103
103
  - name: Create issue on failure
104
104
  if: failure()
105
- uses: actions/github-script@v7
105
+ uses: actions/github-script@v8
106
106
  with:
107
107
  script: |
108
108
  github.rest.issues.create({
@@ -143,10 +143,10 @@ jobs:
143
143
  contents: read
144
144
 
145
145
  steps:
146
- - uses: actions/checkout@v4
146
+ - uses: actions/checkout@v6
147
147
 
148
148
  - name: Set up Python
149
- uses: actions/setup-python@v5
149
+ uses: actions/setup-python@v6
150
150
  with:
151
151
  python-version: '3.11'
152
152
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 2.1.1
3
+ Version: 2.1.2
4
4
  Summary: A modern, type-safe Python SDK for the DevRev API
5
5
  Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
6
6
  Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
@@ -35,7 +35,7 @@ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'all'
35
35
  Requires-Dist: pytest-benchmark>=4.0.0; extra == 'all'
36
36
  Requires-Dist: pytest-cov>=4.1.0; extra == 'all'
37
37
  Requires-Dist: pytest-mock>=3.12.0; extra == 'all'
38
- Requires-Dist: pytest<9.0.0,>=7.4.0; extra == 'all'
38
+ Requires-Dist: pytest<10.0.0,>=7.4.0; extra == 'all'
39
39
  Requires-Dist: pytest>=7.4.0; extra == 'all'
40
40
  Requires-Dist: respx>=0.20.0; extra == 'all'
41
41
  Requires-Dist: ruff>=0.1.0; extra == 'all'
@@ -49,7 +49,7 @@ Requires-Dist: pre-commit>=3.6.0; extra == 'dev'
49
49
  Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
50
50
  Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
51
51
  Requires-Dist: pytest-mock>=3.12.0; extra == 'dev'
52
- Requires-Dist: pytest<9.0.0,>=7.4.0; extra == 'dev'
52
+ Requires-Dist: pytest<10.0.0,>=7.4.0; extra == 'dev'
53
53
  Requires-Dist: respx>=0.20.0; extra == 'dev'
54
54
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
55
55
  Provides-Extra: docs
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.1.2] - 2026-01-28
11
+
12
+ ### Fixed
13
+
14
+ - **Work.applies_to_part fails to parse API response** (#120) - The DevRev API returns `applies_to_part` as a rich `PartSummary` object in responses, not just a string ID. This caused `pydantic.ValidationError` when parsing API responses. Fixed by:
15
+ - Expanding `PartSummary` model to include `type`, `display_id`, `state`, and `owned_by` fields
16
+ - Changing `Work.applies_to_part` type from `str | None` to `PartSummary | str | None`
17
+ - This is fully backward compatible - string IDs are still accepted for requests
18
+
10
19
  ## [2.1.1] - 2026-01-23
11
20
 
12
21
  ### Fixed
@@ -326,6 +335,8 @@ This release marks the completion of all four development phases, providing a pr
326
335
 
327
336
  | Version | Date | Highlights |
328
337
  |---------|------|------------|
338
+ | 2.1.2 | 2026-01-28 | 🐛 Fix Work.applies_to_part parsing for API responses |
339
+ | 2.1.1 | 2026-01-23 | 🐛 Fix RevUserState enum missing states |
329
340
  | 2.0.0 | 2026-01-18 | 🚀 Beta API support, performance enhancements, breaking change |
330
341
  | 1.0.0 | 2026-01-13 | 🎉 First stable release - Production ready |
331
342
  | 0.1.0 | 2026-01-12 | Initial development release |
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "2.1.1"
7
+ version = "2.1.2"
8
8
  description = "A modern, type-safe Python SDK for the DevRev API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -33,7 +33,7 @@ dependencies = [
33
33
 
34
34
  [project.optional-dependencies]
35
35
  dev = [
36
- "pytest>=7.4.0,<9.0.0",
36
+ "pytest>=7.4.0,<10.0.0",
37
37
  "pytest-cov>=4.1.0",
38
38
  "pytest-asyncio>=0.21.0",
39
39
  "pytest-mock>=3.12.0",
@@ -38,10 +38,18 @@ class Part(DevRevResponseModel):
38
38
 
39
39
 
40
40
  class PartSummary(DevRevResponseModel):
41
- """Summary of a Part."""
41
+ """Summary of a Part.
42
+
43
+ This model represents the part object returned in work item responses.
44
+ The API returns a rich object with type, display_id, name, etc.
45
+ """
42
46
 
43
47
  id: str = Field(..., description="Part ID")
48
+ type: str | None = Field(default=None, description="Part type (product, capability, etc.)")
49
+ display_id: str | None = Field(default=None, description="Display ID (e.g., PROD-1)")
44
50
  name: str | None = Field(default=None, description="Part name")
51
+ state: str | None = Field(default=None, description="Part state (active, archived, etc.)")
52
+ owned_by: list[UserSummary] | None = Field(default=None, description="Part owners")
45
53
 
46
54
 
47
55
  class PartsCreateRequest(DevRevBaseModel):
@@ -24,6 +24,7 @@ from devrev.models.base import (
24
24
  TagWithValue,
25
25
  UserSummary,
26
26
  )
27
+ from devrev.models.parts import PartSummary
27
28
 
28
29
 
29
30
  class WorkType(str, Enum):
@@ -83,7 +84,10 @@ class Work(DevRevResponseModel):
83
84
  reported_by: list[UserSummary] | None = Field(
84
85
  default=None, description="Users who reported this work"
85
86
  )
86
- applies_to_part: str | None = Field(default=None, description="Part this work applies to")
87
+ applies_to_part: PartSummary | str | None = Field(
88
+ default=None,
89
+ description="Part this work applies to. API returns a PartSummary object in responses.",
90
+ )
87
91
  stage: StageInfo | None = Field(default=None, description="Work stage")
88
92
  tags: list[TagWithValue] | None = Field(default=None, description="Work tags")
89
93
  priority: str | None = Field(default=None, description="Issue priority")
@@ -143,3 +143,67 @@ class TestWorksService:
143
143
  )
144
144
 
145
145
  assert isinstance(result, Work)
146
+
147
+ def test_work_with_applies_to_part_as_object(
148
+ self,
149
+ mock_http_client: MagicMock,
150
+ sample_work_data: dict[str, Any],
151
+ ) -> None:
152
+ """Test that applies_to_part can be an object (as returned by the API).
153
+
154
+ The DevRev API returns applies_to_part as a PartSummary object in responses,
155
+ not just a string ID. This test validates that the model correctly parses
156
+ the object format.
157
+ """
158
+ sample_work_data["applies_to_part"] = {
159
+ "type": "product",
160
+ "display_id": "PROD-1",
161
+ "id": "don:core:dvrv-us-1:devo/org123:product/1",
162
+ "name": "Test Product",
163
+ "state": "active",
164
+ "owned_by": [
165
+ {
166
+ "type": "sys_user",
167
+ "display_id": "SYSU-1",
168
+ "display_name": "devrev-bot",
169
+ "full_name": "DevRev Bot",
170
+ "id": "don:identity:dvrv-us-1:devo/org123:sysu/1",
171
+ }
172
+ ],
173
+ }
174
+ mock_http_client.post.return_value = create_mock_response({"work": sample_work_data})
175
+
176
+ service = WorksService(mock_http_client)
177
+ result = service.get("don:core:issue:123")
178
+
179
+ assert isinstance(result, Work)
180
+ assert result.applies_to_part is not None
181
+ # The applies_to_part should be parsed as a PartSummary object
182
+ from devrev.models.parts import PartSummary
183
+
184
+ assert isinstance(result.applies_to_part, PartSummary)
185
+ assert result.applies_to_part.id == "don:core:dvrv-us-1:devo/org123:product/1"
186
+ assert result.applies_to_part.name == "Test Product"
187
+ assert result.applies_to_part.type == "product"
188
+ assert result.applies_to_part.display_id == "PROD-1"
189
+ assert result.applies_to_part.state == "active"
190
+ # Verify owned_by is parsed correctly
191
+ assert result.applies_to_part.owned_by is not None
192
+ assert isinstance(result.applies_to_part.owned_by, list)
193
+ assert len(result.applies_to_part.owned_by) == 1
194
+ assert result.applies_to_part.owned_by[0].id == "don:identity:dvrv-us-1:devo/org123:sysu/1"
195
+
196
+ def test_work_with_applies_to_part_as_string(
197
+ self,
198
+ mock_http_client: MagicMock,
199
+ sample_work_data: dict[str, Any],
200
+ ) -> None:
201
+ """Test that applies_to_part can also be a string (backward compatibility)."""
202
+ sample_work_data["applies_to_part"] = "don:core:dvrv-us-1:devo/org123:product/1"
203
+ mock_http_client.post.return_value = create_mock_response({"work": sample_work_data})
204
+
205
+ service = WorksService(mock_http_client)
206
+ result = service.get("don:core:issue:123")
207
+
208
+ assert isinstance(result, Work)
209
+ assert result.applies_to_part == "don:core:dvrv-us-1:devo/org123:product/1"