payi 0.1.0a75__tar.gz → 0.1.0a77__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.

Potentially problematic release.


This version of payi might be problematic. Click here for more details.

Files changed (204) hide show
  1. payi-0.1.0a77/.release-please-manifest.json +3 -0
  2. {payi-0.1.0a75 → payi-0.1.0a77}/CHANGELOG.md +18 -0
  3. {payi-0.1.0a75 → payi-0.1.0a77}/CONTRIBUTING.md +1 -2
  4. {payi-0.1.0a75 → payi-0.1.0a77}/PKG-INFO +2 -7
  5. {payi-0.1.0a75 → payi-0.1.0a77}/README.md +1 -6
  6. {payi-0.1.0a75 → payi-0.1.0a77}/pyproject.toml +1 -1
  7. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_base_client.py +6 -0
  8. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_models.py +2 -0
  9. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_types.py +2 -0
  10. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_version.py +1 -1
  11. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/AnthropicInstrumentor.py +3 -3
  12. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/OpenAIInstrumentor.py +2 -3
  13. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_client.py +54 -0
  14. payi-0.1.0a75/.release-please-manifest.json +0 -3
  15. {payi-0.1.0a75 → payi-0.1.0a77}/.gitignore +0 -0
  16. {payi-0.1.0a75 → payi-0.1.0a77}/LICENSE +0 -0
  17. {payi-0.1.0a75 → payi-0.1.0a77}/SECURITY.md +0 -0
  18. {payi-0.1.0a75 → payi-0.1.0a77}/api.md +0 -0
  19. {payi-0.1.0a75 → payi-0.1.0a77}/bin/check-release-environment +0 -0
  20. {payi-0.1.0a75 → payi-0.1.0a77}/bin/publish-pypi +0 -0
  21. {payi-0.1.0a75 → payi-0.1.0a77}/examples/.keep +0 -0
  22. {payi-0.1.0a75 → payi-0.1.0a77}/mypy.ini +0 -0
  23. {payi-0.1.0a75 → payi-0.1.0a77}/noxfile.py +0 -0
  24. {payi-0.1.0a75 → payi-0.1.0a77}/release-please-config.json +0 -0
  25. {payi-0.1.0a75 → payi-0.1.0a77}/requirements-dev.lock +0 -0
  26. {payi-0.1.0a75 → payi-0.1.0a77}/requirements.lock +0 -0
  27. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/__init__.py +0 -0
  28. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_client.py +0 -0
  29. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_compat.py +0 -0
  30. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_constants.py +0 -0
  31. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_exceptions.py +0 -0
  32. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_files.py +0 -0
  33. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_qs.py +0 -0
  34. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_resource.py +0 -0
  35. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_response.py +0 -0
  36. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_streaming.py +0 -0
  37. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/__init__.py +0 -0
  38. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_logs.py +0 -0
  39. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_proxy.py +0 -0
  40. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_reflection.py +0 -0
  41. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_resources_proxy.py +0 -0
  42. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_streams.py +0 -0
  43. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_sync.py +0 -0
  44. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_transform.py +0 -0
  45. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_typing.py +0 -0
  46. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/_utils/_utils.py +0 -0
  47. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/.keep +0 -0
  48. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/BedrockInstrumentor.py +0 -0
  49. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/Stopwatch.py +0 -0
  50. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/VertexInstrumentor.py +0 -0
  51. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/helpers.py +0 -0
  52. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/lib/instrument.py +0 -0
  53. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/pagination.py +0 -0
  54. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/py.typed +0 -0
  55. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/__init__.py +0 -0
  56. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/categories/__init__.py +0 -0
  57. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/categories/categories.py +0 -0
  58. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/categories/resources.py +0 -0
  59. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/__init__.py +0 -0
  60. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/experiences.py +0 -0
  61. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/properties.py +0 -0
  62. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/types/__init__.py +0 -0
  63. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/types/limit_config.py +0 -0
  64. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/experiences/types/types.py +0 -0
  65. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/ingest.py +0 -0
  66. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/limits/__init__.py +0 -0
  67. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/limits/limits.py +0 -0
  68. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/limits/tags.py +0 -0
  69. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/requests/__init__.py +0 -0
  70. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/requests/properties.py +0 -0
  71. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/requests/requests.py +0 -0
  72. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/requests/result.py +0 -0
  73. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/__init__.py +0 -0
  74. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/definitions/__init__.py +0 -0
  75. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/definitions/definitions.py +0 -0
  76. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/definitions/kpis.py +0 -0
  77. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/definitions/limit_config.py +0 -0
  78. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/definitions/version.py +0 -0
  79. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/kpis.py +0 -0
  80. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/properties.py +0 -0
  81. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/resources/use_cases/use_cases.py +0 -0
  82. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/__init__.py +0 -0
  83. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/bulk_ingest_response.py +0 -0
  84. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/categories/__init__.py +0 -0
  85. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/categories/resource_create_params.py +0 -0
  86. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/categories/resource_list_params.py +0 -0
  87. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_delete_resource_response.py +0 -0
  88. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_delete_response.py +0 -0
  89. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_list_params.py +0 -0
  90. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_list_resources_params.py +0 -0
  91. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_resource_response.py +0 -0
  92. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/category_response.py +0 -0
  93. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/cost_data.py +0 -0
  94. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/cost_details.py +0 -0
  95. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/default_response.py +0 -0
  96. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experience_instance_response.py +0 -0
  97. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/__init__.py +0 -0
  98. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/experience_type.py +0 -0
  99. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/property_create_params.py +0 -0
  100. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/type_create_params.py +0 -0
  101. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/type_list_params.py +0 -0
  102. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/type_update_params.py +0 -0
  103. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/types/__init__.py +0 -0
  104. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/experiences/types/limit_config_create_params.py +0 -0
  105. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/ingest_bulk_params.py +0 -0
  106. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/ingest_event_param.py +0 -0
  107. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/ingest_response.py +0 -0
  108. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/ingest_units_params.py +0 -0
  109. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_create_params.py +0 -0
  110. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_history_response.py +0 -0
  111. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_list_params.py +0 -0
  112. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_list_response.py +0 -0
  113. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_reset_params.py +0 -0
  114. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_response.py +0 -0
  115. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limit_update_params.py +0 -0
  116. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/__init__.py +0 -0
  117. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/limit_tags.py +0 -0
  118. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_create_params.py +0 -0
  119. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_create_response.py +0 -0
  120. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_delete_response.py +0 -0
  121. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_list_response.py +0 -0
  122. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_remove_params.py +0 -0
  123. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_remove_response.py +0 -0
  124. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_update_params.py +0 -0
  125. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/limits/tag_update_response.py +0 -0
  126. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/pay_i_common_models_api_router_header_info_param.py +0 -0
  127. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/requests/__init__.py +0 -0
  128. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/requests/property_create_params.py +0 -0
  129. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/requests/request_result.py +0 -0
  130. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/requests_data.py +0 -0
  131. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/__init__.py +0 -0
  132. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/evaluation_response.py +0 -0
  133. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/ingest_units.py +0 -0
  134. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/pay_i_common_models_budget_management_cost_details_base.py +0 -0
  135. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/pay_i_common_models_budget_management_create_limit_base.py +0 -0
  136. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/properties_response.py +0 -0
  137. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/xproxy_error.py +0 -0
  138. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared/xproxy_result.py +0 -0
  139. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared_params/__init__.py +0 -0
  140. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared_params/ingest_units.py +0 -0
  141. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/shared_params/pay_i_common_models_budget_management_create_limit_base.py +0 -0
  142. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/total_cost_data.py +0 -0
  143. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_case_instance_response.py +0 -0
  144. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/__init__.py +0 -0
  145. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definition_create_params.py +0 -0
  146. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definition_list_params.py +0 -0
  147. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definition_update_params.py +0 -0
  148. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/__init__.py +0 -0
  149. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_create_params.py +0 -0
  150. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_create_response.py +0 -0
  151. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_delete_response.py +0 -0
  152. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_list_params.py +0 -0
  153. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_list_response.py +0 -0
  154. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_retrieve_response.py +0 -0
  155. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_update_params.py +0 -0
  156. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/kpi_update_response.py +0 -0
  157. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/definitions/limit_config_create_params.py +0 -0
  158. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/kpi_create_params.py +0 -0
  159. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/kpi_list_params.py +0 -0
  160. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/kpi_list_response.py +0 -0
  161. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/kpi_update_params.py +0 -0
  162. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/property_create_params.py +0 -0
  163. {payi-0.1.0a75 → payi-0.1.0a77}/src/payi/types/use_cases/use_case_definition.py +0 -0
  164. {payi-0.1.0a75 → payi-0.1.0a77}/tests/__init__.py +0 -0
  165. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/__init__.py +0 -0
  166. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/categories/__init__.py +0 -0
  167. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/categories/test_resources.py +0 -0
  168. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/experiences/__init__.py +0 -0
  169. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/experiences/test_properties.py +0 -0
  170. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/experiences/test_types.py +0 -0
  171. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/experiences/types/__init__.py +0 -0
  172. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/experiences/types/test_limit_config.py +0 -0
  173. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/limits/__init__.py +0 -0
  174. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/limits/test_tags.py +0 -0
  175. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/requests/__init__.py +0 -0
  176. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/requests/test_properties.py +0 -0
  177. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/requests/test_result.py +0 -0
  178. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/test_categories.py +0 -0
  179. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/test_experiences.py +0 -0
  180. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/test_ingest.py +0 -0
  181. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/test_limits.py +0 -0
  182. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/test_use_cases.py +0 -0
  183. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/__init__.py +0 -0
  184. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/definitions/__init__.py +0 -0
  185. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/definitions/test_kpis.py +0 -0
  186. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/definitions/test_limit_config.py +0 -0
  187. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/definitions/test_version.py +0 -0
  188. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/test_definitions.py +0 -0
  189. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/test_kpis.py +0 -0
  190. {payi-0.1.0a75 → payi-0.1.0a77}/tests/api_resources/use_cases/test_properties.py +0 -0
  191. {payi-0.1.0a75 → payi-0.1.0a77}/tests/conftest.py +0 -0
  192. {payi-0.1.0a75 → payi-0.1.0a77}/tests/sample_file.txt +0 -0
  193. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_deepcopy.py +0 -0
  194. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_extract_files.py +0 -0
  195. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_files.py +0 -0
  196. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_models.py +0 -0
  197. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_qs.py +0 -0
  198. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_required_args.py +0 -0
  199. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_response.py +0 -0
  200. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_streaming.py +0 -0
  201. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_transform.py +0 -0
  202. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_utils/test_proxy.py +0 -0
  203. {payi-0.1.0a75 → payi-0.1.0a77}/tests/test_utils/test_typing.py +0 -0
  204. {payi-0.1.0a75 → payi-0.1.0a77}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.77"
3
+ }
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.77 (2025-06-03)
4
+
5
+ Full Changelog: [v0.1.0-alpha.76...v0.1.0-alpha.77](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.76...v0.1.0-alpha.77)
6
+
7
+ ### Features
8
+
9
+ * **client:** add follow_redirects request option ([3308085](https://github.com/Pay-i/pay-i-python/commit/3308085121c320d80931d6749f36ecee049be669))
10
+
11
+
12
+ ### Chores
13
+
14
+ * **docs:** remove reference to rye shell ([eb25599](https://github.com/Pay-i/pay-i-python/commit/eb255999808df39a9eaaf5b91825c8fe150dbf55))
15
+ * **docs:** remove unnecessary param examples ([4d34a34](https://github.com/Pay-i/pay-i-python/commit/4d34a343cd19fc091fb836d411034d9ad62bf564))
16
+
17
+ ## 0.1.0-alpha.76 (2025-05-31)
18
+
19
+ Full Changelog: [v0.1.0-alpha.75...v0.1.0-alpha.76](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.75...v0.1.0-alpha.76)
20
+
3
21
  ## 0.1.0-alpha.75 (2025-05-22)
4
22
 
5
23
  Full Changelog: [v0.1.0-alpha.74...v0.1.0-alpha.75](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.74...v0.1.0-alpha.75)
@@ -17,8 +17,7 @@ $ rye sync --all-features
17
17
  You can then run scripts using `rye run python script.py` or by activating the virtual environment:
18
18
 
19
19
  ```sh
20
- $ rye shell
21
- # or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
20
+ # Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work
22
21
  $ source .venv/bin/activate
23
22
 
24
23
  # now you can omit the `rye run` prefix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: payi
3
- Version: 0.1.0a75
3
+ Version: 0.1.0a77
4
4
  Summary: The official Python library for the payi API
5
5
  Project-URL: Homepage, https://github.com/Pay-i/pay-i-python
6
6
  Project-URL: Repository, https://github.com/Pay-i/pay-i-python
@@ -188,12 +188,7 @@ client = Payi()
188
188
  use_case_definition = client.use_cases.definitions.create(
189
189
  description="x",
190
190
  name="x",
191
- limit_config={
192
- "max": 0,
193
- "limit_tags": ["tag1", "tag2"],
194
- "limit_type": "block",
195
- "threshold": 0,
196
- },
191
+ limit_config={"max": 0},
197
192
  )
198
193
  print(use_case_definition.limit_config)
199
194
  ```
@@ -154,12 +154,7 @@ client = Payi()
154
154
  use_case_definition = client.use_cases.definitions.create(
155
155
  description="x",
156
156
  name="x",
157
- limit_config={
158
- "max": 0,
159
- "limit_tags": ["tag1", "tag2"],
160
- "limit_type": "block",
161
- "threshold": 0,
162
- },
157
+ limit_config={"max": 0},
163
158
  )
164
159
  print(use_case_definition.limit_config)
165
160
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "payi"
3
- version = "0.1.0-alpha.75"
3
+ version = "0.1.0-alpha.77"
4
4
  description = "The official Python library for the payi API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -960,6 +960,9 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
960
960
  if self.custom_auth is not None:
961
961
  kwargs["auth"] = self.custom_auth
962
962
 
963
+ if options.follow_redirects is not None:
964
+ kwargs["follow_redirects"] = options.follow_redirects
965
+
963
966
  log.debug("Sending HTTP Request: %s %s", request.method, request.url)
964
967
 
965
968
  response = None
@@ -1460,6 +1463,9 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1460
1463
  if self.custom_auth is not None:
1461
1464
  kwargs["auth"] = self.custom_auth
1462
1465
 
1466
+ if options.follow_redirects is not None:
1467
+ kwargs["follow_redirects"] = options.follow_redirects
1468
+
1463
1469
  log.debug("Sending HTTP Request: %s %s", request.method, request.url)
1464
1470
 
1465
1471
  response = None
@@ -737,6 +737,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
737
737
  idempotency_key: str
738
738
  json_data: Body
739
739
  extra_json: AnyMapping
740
+ follow_redirects: bool
740
741
 
741
742
 
742
743
  @final
@@ -750,6 +751,7 @@ class FinalRequestOptions(pydantic.BaseModel):
750
751
  files: Union[HttpxRequestFiles, None] = None
751
752
  idempotency_key: Union[str, None] = None
752
753
  post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
754
+ follow_redirects: Union[bool, None] = None
753
755
 
754
756
  # It should be noted that we cannot use `json` here as that would override
755
757
  # a BaseModel method in an incompatible fashion.
@@ -100,6 +100,7 @@ class RequestOptions(TypedDict, total=False):
100
100
  params: Query
101
101
  extra_json: AnyMapping
102
102
  idempotency_key: str
103
+ follow_redirects: bool
103
104
 
104
105
 
105
106
  # Sentinel class used until PEP 0661 is accepted
@@ -215,3 +216,4 @@ class _GenericAlias(Protocol):
215
216
 
216
217
  class HttpxSendArgs(TypedDict, total=False):
217
218
  auth: httpx.Auth
219
+ follow_redirects: bool
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "payi"
4
- __version__ = "0.1.0-alpha.75" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.77" # x-release-please-version
@@ -201,13 +201,13 @@ class _AnthropicProviderRequest(_ProviderRequest):
201
201
 
202
202
 
203
203
  def has_image_and_get_texts(encoding: tiktoken.Encoding, content: Union[str, 'list[Any]']) -> 'tuple[bool, int]':
204
- if isinstance(content, str):
205
- return False, 0
206
- elif isinstance(content, list): # type: ignore
204
+ if isinstance(content, list): # type: ignore
207
205
  has_image = any(item.get("type") == "image" for item in content)
208
206
  if has_image is False:
209
207
  return has_image, 0
210
208
 
211
209
  token_count = sum(len(encoding.encode(item.get("text", ""))) for item in content if item.get("type") == "text")
212
210
  return has_image, token_count
211
+
212
+ return False, 0
213
213
 
@@ -293,15 +293,14 @@ class _OpenAiProviderRequest(_ProviderRequest):
293
293
 
294
294
  @staticmethod
295
295
  def has_image_and_get_texts(encoding: tiktoken.Encoding, content: Union[str, 'list[Any]'], image_type: str = "image_url", text_type:str = "text") -> 'tuple[bool, int]':
296
- if isinstance(content, str):
297
- return False, 0
298
- elif isinstance(content, list): # type: ignore
296
+ if isinstance(content, list): # type: ignore
299
297
  has_image = any(item.get("type") == image_type for item in content)
300
298
  if has_image is False:
301
299
  return has_image, 0
302
300
 
303
301
  token_count = sum(len(encoding.encode(item.get("text", ""))) for item in content if item.get("type") == text_type)
304
302
  return has_image, token_count
303
+ return False, 0
305
304
 
306
305
  class _OpenAiEmbeddingsProviderRequest(_OpenAiProviderRequest):
307
306
  def __init__(self, instrumentor: _PayiInstrumentor):
@@ -819,6 +819,33 @@ class TestPayi:
819
819
 
820
820
  assert response.http_request.headers.get("x-stainless-retry-count") == "42"
821
821
 
822
+ @pytest.mark.respx(base_url=base_url)
823
+ def test_follow_redirects(self, respx_mock: MockRouter) -> None:
824
+ # Test that the default follow_redirects=True allows following redirects
825
+ respx_mock.post("/redirect").mock(
826
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
827
+ )
828
+ respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
829
+
830
+ response = self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
831
+ assert response.status_code == 200
832
+ assert response.json() == {"status": "ok"}
833
+
834
+ @pytest.mark.respx(base_url=base_url)
835
+ def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
836
+ # Test that follow_redirects=False prevents following redirects
837
+ respx_mock.post("/redirect").mock(
838
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
839
+ )
840
+
841
+ with pytest.raises(APIStatusError) as exc_info:
842
+ self.client.post(
843
+ "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
844
+ )
845
+
846
+ assert exc_info.value.response.status_code == 302
847
+ assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
848
+
822
849
 
823
850
  class TestAsyncPayi:
824
851
  client = AsyncPayi(base_url=base_url, api_key=api_key, _strict_response_validation=True)
@@ -1648,3 +1675,30 @@ class TestAsyncPayi:
1648
1675
  raise AssertionError("calling get_platform using asyncify resulted in a hung process")
1649
1676
 
1650
1677
  time.sleep(0.1)
1678
+
1679
+ @pytest.mark.respx(base_url=base_url)
1680
+ async def test_follow_redirects(self, respx_mock: MockRouter) -> None:
1681
+ # Test that the default follow_redirects=True allows following redirects
1682
+ respx_mock.post("/redirect").mock(
1683
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
1684
+ )
1685
+ respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
1686
+
1687
+ response = await self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
1688
+ assert response.status_code == 200
1689
+ assert response.json() == {"status": "ok"}
1690
+
1691
+ @pytest.mark.respx(base_url=base_url)
1692
+ async def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
1693
+ # Test that follow_redirects=False prevents following redirects
1694
+ respx_mock.post("/redirect").mock(
1695
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
1696
+ )
1697
+
1698
+ with pytest.raises(APIStatusError) as exc_info:
1699
+ await self.client.post(
1700
+ "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
1701
+ )
1702
+
1703
+ assert exc_info.value.response.status_code == 302
1704
+ assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.1.0-alpha.75"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes