payi 0.1.0a29__tar.gz → 0.1.0a31__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 (154) hide show
  1. payi-0.1.0a31/.release-please-manifest.json +3 -0
  2. {payi-0.1.0a29 → payi-0.1.0a31}/CHANGELOG.md +31 -0
  3. {payi-0.1.0a29 → payi-0.1.0a31}/PKG-INFO +5 -4
  4. {payi-0.1.0a29 → payi-0.1.0a31}/README.md +4 -2
  5. {payi-0.1.0a29 → payi-0.1.0a31}/api.md +27 -7
  6. {payi-0.1.0a29 → payi-0.1.0a31}/mypy.ini +4 -1
  7. {payi-0.1.0a29 → payi-0.1.0a31}/pyproject.toml +2 -2
  8. {payi-0.1.0a29 → payi-0.1.0a31}/requirements-dev.lock +3 -1
  9. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_base_client.py +8 -4
  10. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_client.py +8 -8
  11. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_compat.py +3 -5
  12. payi-0.1.0a31/src/payi/_utils/_sync.py +71 -0
  13. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_version.py +1 -1
  14. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/__init__.py +14 -14
  15. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/billing_models.py +4 -4
  16. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/experiences/__init__.py +28 -0
  17. {payi-0.1.0a29/src/payi/resources → payi-0.1.0a31/src/payi/resources/experiences}/csat.py +16 -16
  18. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/experiences/experiences.py +77 -13
  19. payi-0.1.0a31/src/payi/resources/experiences/properties.py +174 -0
  20. payi-0.1.0a31/src/payi/resources/requests/__init__.py +33 -0
  21. payi-0.1.0a31/src/payi/resources/requests/properties.py +174 -0
  22. payi-0.1.0a31/src/payi/resources/requests/requests.py +102 -0
  23. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/__init__.py +1 -3
  24. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/billing_model.py +1 -1
  25. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/billing_model_create_params.py +1 -1
  26. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/billing_model_update_params.py +1 -1
  27. payi-0.1.0a29/src/payi/types/experience_instance.py → payi-0.1.0a31/src/payi/types/experience_instance_response.py +5 -2
  28. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/__init__.py +4 -0
  29. payi-0.1.0a29/src/payi/types/csat.py → payi-0.1.0a31/src/payi/types/experiences/csat_response.py +3 -3
  30. payi-0.1.0a31/src/payi/types/experiences/properties_response.py +11 -0
  31. payi-0.1.0a31/src/payi/types/experiences/property_create_params.py +12 -0
  32. payi-0.1.0a31/src/payi/types/requests/__init__.py +5 -0
  33. payi-0.1.0a31/src/payi/types/requests/property_create_params.py +12 -0
  34. {payi-0.1.0a29/tests/api_resources → payi-0.1.0a31/tests/api_resources/experiences}/test_csat.py +19 -19
  35. payi-0.1.0a31/tests/api_resources/experiences/test_properties.py +106 -0
  36. payi-0.1.0a31/tests/api_resources/requests/__init__.py +1 -0
  37. payi-0.1.0a31/tests/api_resources/requests/test_properties.py +106 -0
  38. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_billing_models.py +18 -18
  39. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_experiences.py +19 -19
  40. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_ingest.py +6 -66
  41. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_client.py +38 -0
  42. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_models.py +8 -0
  43. payi-0.1.0a29/.release-please-manifest.json +0 -3
  44. payi-0.1.0a29/src/payi/_utils/_sync.py +0 -81
  45. {payi-0.1.0a29 → payi-0.1.0a31}/.gitignore +0 -0
  46. {payi-0.1.0a29 → payi-0.1.0a31}/CONTRIBUTING.md +0 -0
  47. {payi-0.1.0a29 → payi-0.1.0a31}/LICENSE +0 -0
  48. {payi-0.1.0a29 → payi-0.1.0a31}/SECURITY.md +0 -0
  49. {payi-0.1.0a29 → payi-0.1.0a31}/bin/check-release-environment +0 -0
  50. {payi-0.1.0a29 → payi-0.1.0a31}/bin/publish-pypi +0 -0
  51. {payi-0.1.0a29 → payi-0.1.0a31}/examples/.keep +0 -0
  52. {payi-0.1.0a29 → payi-0.1.0a31}/noxfile.py +0 -0
  53. {payi-0.1.0a29 → payi-0.1.0a31}/release-please-config.json +0 -0
  54. {payi-0.1.0a29 → payi-0.1.0a31}/requirements.lock +0 -0
  55. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/__init__.py +0 -0
  56. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_constants.py +0 -0
  57. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_exceptions.py +0 -0
  58. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_files.py +0 -0
  59. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_models.py +0 -0
  60. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_qs.py +0 -0
  61. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_resource.py +0 -0
  62. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_response.py +0 -0
  63. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_streaming.py +0 -0
  64. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_types.py +0 -0
  65. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/__init__.py +0 -0
  66. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_logs.py +0 -0
  67. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_proxy.py +0 -0
  68. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_reflection.py +0 -0
  69. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_streams.py +0 -0
  70. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_transform.py +0 -0
  71. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_typing.py +0 -0
  72. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/_utils/_utils.py +0 -0
  73. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/lib/.keep +0 -0
  74. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/lib/helpers.py +0 -0
  75. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/py.typed +0 -0
  76. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/budgets/__init__.py +0 -0
  77. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/budgets/budgets.py +0 -0
  78. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/budgets/tags.py +0 -0
  79. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/categories/__init__.py +0 -0
  80. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/categories/categories.py +0 -0
  81. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/categories/resources.py +0 -0
  82. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/experiences/types.py +0 -0
  83. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/ingest.py +0 -0
  84. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/resources/price_modifiers.py +0 -0
  85. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/billing_model_list_response.py +0 -0
  86. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budget_create_params.py +0 -0
  87. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budget_history_response.py +0 -0
  88. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budget_list_params.py +0 -0
  89. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budget_response.py +0 -0
  90. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budget_update_params.py +0 -0
  91. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/__init__.py +0 -0
  92. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/budget_tags.py +0 -0
  93. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_create_params.py +0 -0
  94. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_create_response.py +0 -0
  95. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_delete_response.py +0 -0
  96. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_list_response.py +0 -0
  97. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_remove_params.py +0 -0
  98. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_remove_response.py +0 -0
  99. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_update_params.py +0 -0
  100. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/budgets/tag_update_response.py +0 -0
  101. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/bulk_ingest_response.py +0 -0
  102. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/categories/__init__.py +0 -0
  103. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/categories/resource_create_params.py +0 -0
  104. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/categories/resource_list_response.py +0 -0
  105. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_delete_resource_response.py +0 -0
  106. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_delete_response.py +0 -0
  107. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_list_resources_response.py +0 -0
  108. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_list_response.py +0 -0
  109. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_resource_response.py +0 -0
  110. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/category_response.py +0 -0
  111. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/cost_data.py +0 -0
  112. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/cost_details.py +0 -0
  113. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/default_response.py +0 -0
  114. {payi-0.1.0a29/src/payi/types → payi-0.1.0a31/src/payi/types/experiences}/csat_create_params.py +0 -0
  115. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/experience_type.py +0 -0
  116. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/type_create_params.py +0 -0
  117. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/type_list_params.py +0 -0
  118. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/type_list_response.py +0 -0
  119. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/experiences/type_update_params.py +0 -0
  120. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/ingest_bulk_params.py +0 -0
  121. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/ingest_event_param.py +0 -0
  122. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/ingest_response.py +0 -0
  123. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/ingest_units_params.py +0 -0
  124. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/paged_budget_list.py +0 -0
  125. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/price_modifier.py +0 -0
  126. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/price_modifier_create_params.py +0 -0
  127. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/price_modifier_retrieve_response.py +0 -0
  128. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/price_modifier_update_params.py +0 -0
  129. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/requests_data.py +0 -0
  130. {payi-0.1.0a29 → payi-0.1.0a31}/src/payi/types/total_cost_data.py +0 -0
  131. {payi-0.1.0a29 → payi-0.1.0a31}/tests/__init__.py +0 -0
  132. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/__init__.py +0 -0
  133. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/budgets/__init__.py +0 -0
  134. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/budgets/test_tags.py +0 -0
  135. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/categories/__init__.py +0 -0
  136. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/categories/test_resources.py +0 -0
  137. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/experiences/__init__.py +0 -0
  138. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/experiences/test_types.py +0 -0
  139. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_budgets.py +0 -0
  140. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_categories.py +0 -0
  141. {payi-0.1.0a29 → payi-0.1.0a31}/tests/api_resources/test_price_modifiers.py +0 -0
  142. {payi-0.1.0a29 → payi-0.1.0a31}/tests/conftest.py +0 -0
  143. {payi-0.1.0a29 → payi-0.1.0a31}/tests/sample_file.txt +0 -0
  144. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_deepcopy.py +0 -0
  145. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_extract_files.py +0 -0
  146. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_files.py +0 -0
  147. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_qs.py +0 -0
  148. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_required_args.py +0 -0
  149. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_response.py +0 -0
  150. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_streaming.py +0 -0
  151. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_transform.py +0 -0
  152. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_utils/test_proxy.py +0 -0
  153. {payi-0.1.0a29 → payi-0.1.0a31}/tests/test_utils/test_typing.py +0 -0
  154. {payi-0.1.0a29 → payi-0.1.0a31}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.0-alpha.31"
3
+ }
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.31 (2024-12-03)
4
+
5
+ Full Changelog: [v0.1.0-alpha.30...v0.1.0-alpha.31](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.30...v0.1.0-alpha.31)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([#149](https://github.com/Pay-i/pay-i-python/issues/149)) ([5f9b61b](https://github.com/Pay-i/pay-i-python/commit/5f9b61b4d344c090dc1ce3192ba659fbd2ec895b))
10
+
11
+ ## 0.1.0-alpha.30 (2024-12-03)
12
+
13
+ Full Changelog: [v0.1.0-alpha.29...v0.1.0-alpha.30](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.29...v0.1.0-alpha.30)
14
+
15
+ ### Bug Fixes
16
+
17
+ * **asyncify:** avoid hanging process under certain conditions ([#141](https://github.com/Pay-i/pay-i-python/issues/141)) ([58b8775](https://github.com/Pay-i/pay-i-python/commit/58b8775427865cb3aa4c05748511c7f2d5ab8c22))
18
+ * **client:** compat with new httpx 0.28.0 release ([#146](https://github.com/Pay-i/pay-i-python/issues/146)) ([4ae1a72](https://github.com/Pay-i/pay-i-python/commit/4ae1a72109d0633aaa08d9ff9d6d3aef7e1a9e0d))
19
+
20
+
21
+ ### Chores
22
+
23
+ * **internal:** bump pyright ([#147](https://github.com/Pay-i/pay-i-python/issues/147)) ([f169e37](https://github.com/Pay-i/pay-i-python/commit/f169e3780bb33eefaf18ae61f4765a21be418f1e))
24
+ * **internal:** codegen related update ([#144](https://github.com/Pay-i/pay-i-python/issues/144)) ([792376c](https://github.com/Pay-i/pay-i-python/commit/792376c30d33a9a2aa0bacf53c38e481ded7be4c))
25
+ * **internal:** exclude mypy from running on tests ([#145](https://github.com/Pay-i/pay-i-python/issues/145)) ([3856fd1](https://github.com/Pay-i/pay-i-python/commit/3856fd19391aa68befe8776406e340efdff49984))
26
+ * **internal:** fix compat model_dump method when warnings are passed ([#142](https://github.com/Pay-i/pay-i-python/issues/142)) ([58b3ef8](https://github.com/Pay-i/pay-i-python/commit/58b3ef8b4d1dc9c7df2858c6914e587e08f43857))
27
+ * rebuild project due to codegen change ([#139](https://github.com/Pay-i/pay-i-python/issues/139)) ([9ed4a24](https://github.com/Pay-i/pay-i-python/commit/9ed4a2439973965d745cbfd2dfc68003958d51c5))
28
+
29
+
30
+ ### Documentation
31
+
32
+ * add info log level to readme ([#143](https://github.com/Pay-i/pay-i-python/issues/143)) ([cec3a51](https://github.com/Pay-i/pay-i-python/commit/cec3a51a51ca9ab67c37dd2692a5222ede4c72cf))
33
+
3
34
  ## 0.1.0-alpha.29 (2024-11-15)
4
35
 
5
36
  Full Changelog: [v0.1.0-alpha.28...v0.1.0-alpha.29](https://github.com/Pay-i/pay-i-python/compare/v0.1.0-alpha.28...v0.1.0-alpha.29)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: payi
3
- Version: 0.1.0a29
3
+ Version: 0.1.0a31
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
@@ -22,7 +22,6 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Typing :: Typed
23
23
  Requires-Python: >=3.8
24
24
  Requires-Dist: anyio<5,>=3.5.0
25
- Requires-Dist: cached-property; python_version < '3.8'
26
25
  Requires-Dist: distro<2,>=1.7.0
27
26
  Requires-Dist: httpx<1,>=0.23.0
28
27
  Requires-Dist: pydantic<3,>=1.9.0
@@ -215,12 +214,14 @@ Note that requests that time out are [retried twice by default](https://github.c
215
214
 
216
215
  We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.
217
216
 
218
- You can enable logging by setting the environment variable `PAYI_LOG` to `debug`.
217
+ You can enable logging by setting the environment variable `PAYI_LOG` to `info`.
219
218
 
220
219
  ```shell
221
- $ export PAYI_LOG=debug
220
+ $ export PAYI_LOG=info
222
221
  ```
223
222
 
223
+ Or to `debug` for more verbose logging.
224
+
224
225
  ### How to tell whether `None` means `null` or missing
225
226
 
226
227
  In an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`:
@@ -183,12 +183,14 @@ Note that requests that time out are [retried twice by default](#retries).
183
183
 
184
184
  We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.
185
185
 
186
- You can enable logging by setting the environment variable `PAYI_LOG` to `debug`.
186
+ You can enable logging by setting the environment variable `PAYI_LOG` to `info`.
187
187
 
188
188
  ```shell
189
- $ export PAYI_LOG=debug
189
+ $ export PAYI_LOG=info
190
190
  ```
191
191
 
192
+ Or to `debug` for more verbose logging.
193
+
192
194
  ### How to tell whether `None` means `null` or missing
193
195
 
194
196
  In an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`:
@@ -102,14 +102,14 @@ Methods:
102
102
  Types:
103
103
 
104
104
  ```python
105
- from payi.types import ExperienceInstance
105
+ from payi.types import ExperienceInstanceResponse
106
106
  ```
107
107
 
108
108
  Methods:
109
109
 
110
- - <code title="post /api/v1/experiences/instances/{experience_name}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">create</a>(experience_name) -> <a href="./src/payi/types/experience_instance.py">ExperienceInstance</a></code>
111
- - <code title="get /api/v1/experiences/instances/{experience_id}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">retrieve</a>(experience_id) -> <a href="./src/payi/types/experience_instance.py">ExperienceInstance</a></code>
112
- - <code title="delete /api/v1/experiences/instances/{experience_id}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">delete</a>(experience_id) -> <a href="./src/payi/types/experience_instance.py">ExperienceInstance</a></code>
110
+ - <code title="post /api/v1/experiences/instances/{experience_name}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">create</a>(experience_name) -> <a href="./src/payi/types/experience_instance_response.py">ExperienceInstanceResponse</a></code>
111
+ - <code title="get /api/v1/experiences/instances/{experience_id}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">retrieve</a>(experience_id) -> <a href="./src/payi/types/experience_instance_response.py">ExperienceInstanceResponse</a></code>
112
+ - <code title="delete /api/v1/experiences/instances/{experience_id}">client.experiences.<a href="./src/payi/resources/experiences/experiences.py">delete</a>(experience_id) -> <a href="./src/payi/types/experience_instance_response.py">ExperienceInstanceResponse</a></code>
113
113
 
114
114
  ## Types
115
115
 
@@ -127,17 +127,29 @@ Methods:
127
127
  - <code title="get /api/v1/experiences/types">client.experiences.types.<a href="./src/payi/resources/experiences/types.py">list</a>(\*\*<a href="src/payi/types/experiences/type_list_params.py">params</a>) -> <a href="./src/payi/types/experiences/type_list_response.py">TypeListResponse</a></code>
128
128
  - <code title="delete /api/v1/experiences/types/{experience_name}">client.experiences.types.<a href="./src/payi/resources/experiences/types.py">delete</a>(experience_name) -> <a href="./src/payi/types/experiences/experience_type.py">ExperienceType</a></code>
129
129
 
130
- # Csat
130
+ ## Csat
131
131
 
132
132
  Types:
133
133
 
134
134
  ```python
135
- from payi.types import Csat
135
+ from payi.types.experiences import CsatResponse
136
136
  ```
137
137
 
138
138
  Methods:
139
139
 
140
- - <code title="post /api/v1/csat/experiences/{experience_id}">client.csat.<a href="./src/payi/resources/csat.py">create</a>(experience_id, \*\*<a href="src/payi/types/csat_create_params.py">params</a>) -> <a href="./src/payi/types/csat.py">Csat</a></code>
140
+ - <code title="post /api/v1/experiences/instances/{experience_id}/csat">client.experiences.csat.<a href="./src/payi/resources/experiences/csat.py">create</a>(experience_id, \*\*<a href="src/payi/types/experiences/csat_create_params.py">params</a>) -> <a href="./src/payi/types/experiences/csat_response.py">CsatResponse</a></code>
141
+
142
+ ## Properties
143
+
144
+ Types:
145
+
146
+ ```python
147
+ from payi.types.experiences import PropertiesResponse
148
+ ```
149
+
150
+ Methods:
151
+
152
+ - <code title="post /api/v1/experiences/instances/{experience_id}/properties">client.experiences.properties.<a href="./src/payi/resources/experiences/properties.py">create</a>(experience_id, \*\*<a href="src/payi/types/experiences/property_create_params.py">params</a>) -> <a href="./src/payi/types/experience_instance_response.py">ExperienceInstanceResponse</a></code>
141
153
 
142
154
  # BillingModels
143
155
 
@@ -168,3 +180,11 @@ Methods:
168
180
  - <code title="post /api/v1/price-modifier">client.price_modifiers.<a href="./src/payi/resources/price_modifiers.py">create</a>(\*\*<a href="src/payi/types/price_modifier_create_params.py">params</a>) -> <a href="./src/payi/types/price_modifier.py">PriceModifier</a></code>
169
181
  - <code title="get /api/v1/price-modifier/{billing_model_id}">client.price_modifiers.<a href="./src/payi/resources/price_modifiers.py">retrieve</a>(billing_model_id) -> <a href="./src/payi/types/price_modifier_retrieve_response.py">PriceModifierRetrieveResponse</a></code>
170
182
  - <code title="put /api/v1/price-modifier">client.price_modifiers.<a href="./src/payi/resources/price_modifiers.py">update</a>(\*\*<a href="src/payi/types/price_modifier_update_params.py">params</a>) -> <a href="./src/payi/types/price_modifier.py">PriceModifier</a></code>
183
+
184
+ # Requests
185
+
186
+ ## Properties
187
+
188
+ Methods:
189
+
190
+ - <code title="post /api/v1/requests/{request_id}/properties">client.requests.properties.<a href="./src/payi/resources/requests/properties.py">create</a>(request_id, \*\*<a href="src/payi/types/requests/property_create_params.py">params</a>) -> <a href="./src/payi/types/experiences/properties_response.py">PropertiesResponse</a></code>
@@ -5,7 +5,10 @@ show_error_codes = True
5
5
  # Exclude _files.py because mypy isn't smart enough to apply
6
6
  # the correct type narrowing and as this is an internal module
7
7
  # it's fine to just use Pyright.
8
- exclude = ^(src/payi/_files\.py|_dev/.*\.py)$
8
+ #
9
+ # We also exclude our `tests` as mypy doesn't always infer
10
+ # types correctly and Pyright will still catch any type errors.
11
+ exclude = ^(src/payi/_files\.py|_dev/.*\.py|tests/.*)$
9
12
 
10
13
  strict_equality = True
11
14
  implicit_reexport = True
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "payi"
3
- version = "0.1.0-alpha.29"
3
+ version = "0.1.0-alpha.31"
4
4
  description = "The official Python library for the payi API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -14,7 +14,6 @@ dependencies = [
14
14
  "anyio>=3.5.0, <5",
15
15
  "distro>=1.7.0, <2",
16
16
  "sniffio",
17
- "cached-property; python_version < '3.8'",
18
17
  ]
19
18
  requires-python = ">= 3.8"
20
19
  classifiers = [
@@ -55,6 +54,7 @@ dev-dependencies = [
55
54
  "dirty-equals>=0.6.0",
56
55
  "importlib-metadata>=6.7.0",
57
56
  "rich>=13.7.1",
57
+ "nest_asyncio==1.6.0"
58
58
  ]
59
59
 
60
60
  [tool.rye.scripts]
@@ -51,6 +51,7 @@ mdurl==0.1.2
51
51
  mypy==1.13.0
52
52
  mypy-extensions==1.0.0
53
53
  # via mypy
54
+ nest-asyncio==1.6.0
54
55
  nodeenv==1.8.0
55
56
  # via pyright
56
57
  nox==2023.4.22
@@ -67,7 +68,7 @@ pydantic-core==2.23.4
67
68
  # via pydantic
68
69
  pygments==2.18.0
69
70
  # via rich
70
- pyright==1.1.380
71
+ pyright==1.1.389
71
72
  pytest==8.3.3
72
73
  # via pytest-asyncio
73
74
  pytest-asyncio==0.24.0
@@ -96,6 +97,7 @@ typing-extensions==4.12.2
96
97
  # via payi
97
98
  # via pydantic
98
99
  # via pydantic-core
100
+ # via pyright
99
101
  virtualenv==20.24.5
100
102
  # via nox
101
103
  zipp==3.17.0
@@ -792,6 +792,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
792
792
  custom_query: Mapping[str, object] | None = None,
793
793
  _strict_response_validation: bool,
794
794
  ) -> None:
795
+ kwargs: dict[str, Any] = {}
795
796
  if limits is not None:
796
797
  warnings.warn(
797
798
  "The `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead",
@@ -804,6 +805,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
804
805
  limits = DEFAULT_CONNECTION_LIMITS
805
806
 
806
807
  if transport is not None:
808
+ kwargs["transport"] = transport
807
809
  warnings.warn(
808
810
  "The `transport` argument is deprecated. The `http_client` argument should be passed instead",
809
811
  category=DeprecationWarning,
@@ -813,6 +815,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
813
815
  raise ValueError("The `http_client` argument is mutually exclusive with `transport`")
814
816
 
815
817
  if proxies is not None:
818
+ kwargs["proxies"] = proxies
816
819
  warnings.warn(
817
820
  "The `proxies` argument is deprecated. The `http_client` argument should be passed instead",
818
821
  category=DeprecationWarning,
@@ -856,10 +859,9 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
856
859
  base_url=base_url,
857
860
  # cast to a valid type because mypy doesn't understand our type narrowing
858
861
  timeout=cast(Timeout, timeout),
859
- proxies=proxies,
860
- transport=transport,
861
862
  limits=limits,
862
863
  follow_redirects=True,
864
+ **kwargs, # type: ignore
863
865
  )
864
866
 
865
867
  def is_closed(self) -> bool:
@@ -1358,6 +1360,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1358
1360
  custom_headers: Mapping[str, str] | None = None,
1359
1361
  custom_query: Mapping[str, object] | None = None,
1360
1362
  ) -> None:
1363
+ kwargs: dict[str, Any] = {}
1361
1364
  if limits is not None:
1362
1365
  warnings.warn(
1363
1366
  "The `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead",
@@ -1370,6 +1373,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1370
1373
  limits = DEFAULT_CONNECTION_LIMITS
1371
1374
 
1372
1375
  if transport is not None:
1376
+ kwargs["transport"] = transport
1373
1377
  warnings.warn(
1374
1378
  "The `transport` argument is deprecated. The `http_client` argument should be passed instead",
1375
1379
  category=DeprecationWarning,
@@ -1379,6 +1383,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1379
1383
  raise ValueError("The `http_client` argument is mutually exclusive with `transport`")
1380
1384
 
1381
1385
  if proxies is not None:
1386
+ kwargs["proxies"] = proxies
1382
1387
  warnings.warn(
1383
1388
  "The `proxies` argument is deprecated. The `http_client` argument should be passed instead",
1384
1389
  category=DeprecationWarning,
@@ -1422,10 +1427,9 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1422
1427
  base_url=base_url,
1423
1428
  # cast to a valid type because mypy doesn't understand our type narrowing
1424
1429
  timeout=cast(Timeout, timeout),
1425
- proxies=proxies,
1426
- transport=transport,
1427
1430
  limits=limits,
1428
1431
  follow_redirects=True,
1432
+ **kwargs, # type: ignore
1429
1433
  )
1430
1434
 
1431
1435
  def is_closed(self) -> bool:
@@ -50,9 +50,9 @@ class Payi(SyncAPIClient):
50
50
  ingest: resources.IngestResource
51
51
  categories: resources.CategoriesResource
52
52
  experiences: resources.ExperiencesResource
53
- csat: resources.CsatResource
54
53
  billing_models: resources.BillingModelsResource
55
54
  price_modifiers: resources.PriceModifiersResource
55
+ requests: resources.RequestsResource
56
56
  with_raw_response: PayiWithRawResponse
57
57
  with_streaming_response: PayiWithStreamedResponse
58
58
 
@@ -114,9 +114,9 @@ class Payi(SyncAPIClient):
114
114
  self.ingest = resources.IngestResource(self)
115
115
  self.categories = resources.CategoriesResource(self)
116
116
  self.experiences = resources.ExperiencesResource(self)
117
- self.csat = resources.CsatResource(self)
118
117
  self.billing_models = resources.BillingModelsResource(self)
119
118
  self.price_modifiers = resources.PriceModifiersResource(self)
119
+ self.requests = resources.RequestsResource(self)
120
120
  self.with_raw_response = PayiWithRawResponse(self)
121
121
  self.with_streaming_response = PayiWithStreamedResponse(self)
122
122
 
@@ -230,9 +230,9 @@ class AsyncPayi(AsyncAPIClient):
230
230
  ingest: resources.AsyncIngestResource
231
231
  categories: resources.AsyncCategoriesResource
232
232
  experiences: resources.AsyncExperiencesResource
233
- csat: resources.AsyncCsatResource
234
233
  billing_models: resources.AsyncBillingModelsResource
235
234
  price_modifiers: resources.AsyncPriceModifiersResource
235
+ requests: resources.AsyncRequestsResource
236
236
  with_raw_response: AsyncPayiWithRawResponse
237
237
  with_streaming_response: AsyncPayiWithStreamedResponse
238
238
 
@@ -294,9 +294,9 @@ class AsyncPayi(AsyncAPIClient):
294
294
  self.ingest = resources.AsyncIngestResource(self)
295
295
  self.categories = resources.AsyncCategoriesResource(self)
296
296
  self.experiences = resources.AsyncExperiencesResource(self)
297
- self.csat = resources.AsyncCsatResource(self)
298
297
  self.billing_models = resources.AsyncBillingModelsResource(self)
299
298
  self.price_modifiers = resources.AsyncPriceModifiersResource(self)
299
+ self.requests = resources.AsyncRequestsResource(self)
300
300
  self.with_raw_response = AsyncPayiWithRawResponse(self)
301
301
  self.with_streaming_response = AsyncPayiWithStreamedResponse(self)
302
302
 
@@ -411,9 +411,9 @@ class PayiWithRawResponse:
411
411
  self.ingest = resources.IngestResourceWithRawResponse(client.ingest)
412
412
  self.categories = resources.CategoriesResourceWithRawResponse(client.categories)
413
413
  self.experiences = resources.ExperiencesResourceWithRawResponse(client.experiences)
414
- self.csat = resources.CsatResourceWithRawResponse(client.csat)
415
414
  self.billing_models = resources.BillingModelsResourceWithRawResponse(client.billing_models)
416
415
  self.price_modifiers = resources.PriceModifiersResourceWithRawResponse(client.price_modifiers)
416
+ self.requests = resources.RequestsResourceWithRawResponse(client.requests)
417
417
 
418
418
 
419
419
  class AsyncPayiWithRawResponse:
@@ -422,9 +422,9 @@ class AsyncPayiWithRawResponse:
422
422
  self.ingest = resources.AsyncIngestResourceWithRawResponse(client.ingest)
423
423
  self.categories = resources.AsyncCategoriesResourceWithRawResponse(client.categories)
424
424
  self.experiences = resources.AsyncExperiencesResourceWithRawResponse(client.experiences)
425
- self.csat = resources.AsyncCsatResourceWithRawResponse(client.csat)
426
425
  self.billing_models = resources.AsyncBillingModelsResourceWithRawResponse(client.billing_models)
427
426
  self.price_modifiers = resources.AsyncPriceModifiersResourceWithRawResponse(client.price_modifiers)
427
+ self.requests = resources.AsyncRequestsResourceWithRawResponse(client.requests)
428
428
 
429
429
 
430
430
  class PayiWithStreamedResponse:
@@ -433,9 +433,9 @@ class PayiWithStreamedResponse:
433
433
  self.ingest = resources.IngestResourceWithStreamingResponse(client.ingest)
434
434
  self.categories = resources.CategoriesResourceWithStreamingResponse(client.categories)
435
435
  self.experiences = resources.ExperiencesResourceWithStreamingResponse(client.experiences)
436
- self.csat = resources.CsatResourceWithStreamingResponse(client.csat)
437
436
  self.billing_models = resources.BillingModelsResourceWithStreamingResponse(client.billing_models)
438
437
  self.price_modifiers = resources.PriceModifiersResourceWithStreamingResponse(client.price_modifiers)
438
+ self.requests = resources.RequestsResourceWithStreamingResponse(client.requests)
439
439
 
440
440
 
441
441
  class AsyncPayiWithStreamedResponse:
@@ -444,9 +444,9 @@ class AsyncPayiWithStreamedResponse:
444
444
  self.ingest = resources.AsyncIngestResourceWithStreamingResponse(client.ingest)
445
445
  self.categories = resources.AsyncCategoriesResourceWithStreamingResponse(client.categories)
446
446
  self.experiences = resources.AsyncExperiencesResourceWithStreamingResponse(client.experiences)
447
- self.csat = resources.AsyncCsatResourceWithStreamingResponse(client.csat)
448
447
  self.billing_models = resources.AsyncBillingModelsResourceWithStreamingResponse(client.billing_models)
449
448
  self.price_modifiers = resources.AsyncPriceModifiersResourceWithStreamingResponse(client.price_modifiers)
449
+ self.requests = resources.AsyncRequestsResourceWithStreamingResponse(client.requests)
450
450
 
451
451
 
452
452
  Client = Payi
@@ -145,7 +145,8 @@ def model_dump(
145
145
  exclude=exclude,
146
146
  exclude_unset=exclude_unset,
147
147
  exclude_defaults=exclude_defaults,
148
- warnings=warnings,
148
+ # warnings are not supported in Pydantic v1
149
+ warnings=warnings if PYDANTIC_V2 else True,
149
150
  )
150
151
  return cast(
151
152
  "dict[str, Any]",
@@ -213,9 +214,6 @@ if TYPE_CHECKING:
213
214
  # __set__ is not defined at runtime, but @cached_property is designed to be settable
214
215
  def __set__(self, instance: object, value: _T) -> None: ...
215
216
  else:
216
- try:
217
- from functools import cached_property as cached_property
218
- except ImportError:
219
- from cached_property import cached_property as cached_property
217
+ from functools import cached_property as cached_property
220
218
 
221
219
  typed_cached_property = cached_property
@@ -0,0 +1,71 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+ import asyncio
5
+ import functools
6
+ import contextvars
7
+ from typing import Any, TypeVar, Callable, Awaitable
8
+ from typing_extensions import ParamSpec
9
+
10
+ T_Retval = TypeVar("T_Retval")
11
+ T_ParamSpec = ParamSpec("T_ParamSpec")
12
+
13
+
14
+ if sys.version_info >= (3, 9):
15
+ to_thread = asyncio.to_thread
16
+ else:
17
+ # backport of https://docs.python.org/3/library/asyncio-task.html#asyncio.to_thread
18
+ # for Python 3.8 support
19
+ async def to_thread(
20
+ func: Callable[T_ParamSpec, T_Retval], /, *args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs
21
+ ) -> Any:
22
+ """Asynchronously run function *func* in a separate thread.
23
+
24
+ Any *args and **kwargs supplied for this function are directly passed
25
+ to *func*. Also, the current :class:`contextvars.Context` is propagated,
26
+ allowing context variables from the main thread to be accessed in the
27
+ separate thread.
28
+
29
+ Returns a coroutine that can be awaited to get the eventual result of *func*.
30
+ """
31
+ loop = asyncio.events.get_running_loop()
32
+ ctx = contextvars.copy_context()
33
+ func_call = functools.partial(ctx.run, func, *args, **kwargs)
34
+ return await loop.run_in_executor(None, func_call)
35
+
36
+
37
+ # inspired by `asyncer`, https://github.com/tiangolo/asyncer
38
+ def asyncify(function: Callable[T_ParamSpec, T_Retval]) -> Callable[T_ParamSpec, Awaitable[T_Retval]]:
39
+ """
40
+ Take a blocking function and create an async one that receives the same
41
+ positional and keyword arguments. For python version 3.9 and above, it uses
42
+ asyncio.to_thread to run the function in a separate thread. For python version
43
+ 3.8, it uses locally defined copy of the asyncio.to_thread function which was
44
+ introduced in python 3.9.
45
+
46
+ Usage:
47
+
48
+ ```python
49
+ def blocking_func(arg1, arg2, kwarg1=None):
50
+ # blocking code
51
+ return result
52
+
53
+
54
+ result = asyncify(blocking_function)(arg1, arg2, kwarg1=value1)
55
+ ```
56
+
57
+ ## Arguments
58
+
59
+ `function`: a blocking regular callable (e.g. a function)
60
+
61
+ ## Return
62
+
63
+ An async function that takes the same positional and keyword arguments as the
64
+ original one, that when called runs the same original function in a thread worker
65
+ and returns the result.
66
+ """
67
+
68
+ async def wrapper(*args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs) -> T_Retval:
69
+ return await to_thread(function, *args, **kwargs)
70
+
71
+ return wrapper
@@ -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.29" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.31" # x-release-please-version
@@ -1,13 +1,5 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- from .csat import (
4
- CsatResource,
5
- AsyncCsatResource,
6
- CsatResourceWithRawResponse,
7
- AsyncCsatResourceWithRawResponse,
8
- CsatResourceWithStreamingResponse,
9
- AsyncCsatResourceWithStreamingResponse,
10
- )
11
3
  from .ingest import (
12
4
  IngestResource,
13
5
  AsyncIngestResource,
@@ -24,6 +16,14 @@ from .budgets import (
24
16
  BudgetsResourceWithStreamingResponse,
25
17
  AsyncBudgetsResourceWithStreamingResponse,
26
18
  )
19
+ from .requests import (
20
+ RequestsResource,
21
+ AsyncRequestsResource,
22
+ RequestsResourceWithRawResponse,
23
+ AsyncRequestsResourceWithRawResponse,
24
+ RequestsResourceWithStreamingResponse,
25
+ AsyncRequestsResourceWithStreamingResponse,
26
+ )
27
27
  from .categories import (
28
28
  CategoriesResource,
29
29
  AsyncCategoriesResource,
@@ -82,12 +82,6 @@ __all__ = [
82
82
  "AsyncExperiencesResourceWithRawResponse",
83
83
  "ExperiencesResourceWithStreamingResponse",
84
84
  "AsyncExperiencesResourceWithStreamingResponse",
85
- "CsatResource",
86
- "AsyncCsatResource",
87
- "CsatResourceWithRawResponse",
88
- "AsyncCsatResourceWithRawResponse",
89
- "CsatResourceWithStreamingResponse",
90
- "AsyncCsatResourceWithStreamingResponse",
91
85
  "BillingModelsResource",
92
86
  "AsyncBillingModelsResource",
93
87
  "BillingModelsResourceWithRawResponse",
@@ -100,4 +94,10 @@ __all__ = [
100
94
  "AsyncPriceModifiersResourceWithRawResponse",
101
95
  "PriceModifiersResourceWithStreamingResponse",
102
96
  "AsyncPriceModifiersResourceWithStreamingResponse",
97
+ "RequestsResource",
98
+ "AsyncRequestsResource",
99
+ "RequestsResourceWithRawResponse",
100
+ "AsyncRequestsResourceWithRawResponse",
101
+ "RequestsResourceWithStreamingResponse",
102
+ "AsyncRequestsResourceWithStreamingResponse",
103
103
  ]
@@ -52,7 +52,7 @@ class BillingModelsResource(SyncAPIResource):
52
52
  self,
53
53
  *,
54
54
  name: str,
55
- type: Literal["costplus"],
55
+ type: Literal["invalid", "costplus", "subscription", "hybrid"],
56
56
  default_price_modifier: Optional[float] | NotGiven = NOT_GIVEN,
57
57
  prepaid_amount: Optional[float] | NotGiven = NOT_GIVEN,
58
58
  prepaid_max: Optional[float] | NotGiven = NOT_GIVEN,
@@ -128,7 +128,7 @@ class BillingModelsResource(SyncAPIResource):
128
128
  self,
129
129
  billing_model_id: str,
130
130
  *,
131
- type: Literal["costplus"],
131
+ type: Literal["invalid", "costplus", "subscription", "hybrid"],
132
132
  default_price_modifier: Optional[float] | NotGiven = NOT_GIVEN,
133
133
  name: Optional[str] | NotGiven = NOT_GIVEN,
134
134
  prepaid_amount: Optional[float] | NotGiven = NOT_GIVEN,
@@ -246,7 +246,7 @@ class AsyncBillingModelsResource(AsyncAPIResource):
246
246
  self,
247
247
  *,
248
248
  name: str,
249
- type: Literal["costplus"],
249
+ type: Literal["invalid", "costplus", "subscription", "hybrid"],
250
250
  default_price_modifier: Optional[float] | NotGiven = NOT_GIVEN,
251
251
  prepaid_amount: Optional[float] | NotGiven = NOT_GIVEN,
252
252
  prepaid_max: Optional[float] | NotGiven = NOT_GIVEN,
@@ -322,7 +322,7 @@ class AsyncBillingModelsResource(AsyncAPIResource):
322
322
  self,
323
323
  billing_model_id: str,
324
324
  *,
325
- type: Literal["costplus"],
325
+ type: Literal["invalid", "costplus", "subscription", "hybrid"],
326
326
  default_price_modifier: Optional[float] | NotGiven = NOT_GIVEN,
327
327
  name: Optional[str] | NotGiven = NOT_GIVEN,
328
328
  prepaid_amount: Optional[float] | NotGiven = NOT_GIVEN,
@@ -1,5 +1,13 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ from .csat import (
4
+ CsatResource,
5
+ AsyncCsatResource,
6
+ CsatResourceWithRawResponse,
7
+ AsyncCsatResourceWithRawResponse,
8
+ CsatResourceWithStreamingResponse,
9
+ AsyncCsatResourceWithStreamingResponse,
10
+ )
3
11
  from .types import (
4
12
  TypesResource,
5
13
  AsyncTypesResource,
@@ -8,6 +16,14 @@ from .types import (
8
16
  TypesResourceWithStreamingResponse,
9
17
  AsyncTypesResourceWithStreamingResponse,
10
18
  )
19
+ from .properties import (
20
+ PropertiesResource,
21
+ AsyncPropertiesResource,
22
+ PropertiesResourceWithRawResponse,
23
+ AsyncPropertiesResourceWithRawResponse,
24
+ PropertiesResourceWithStreamingResponse,
25
+ AsyncPropertiesResourceWithStreamingResponse,
26
+ )
11
27
  from .experiences import (
12
28
  ExperiencesResource,
13
29
  AsyncExperiencesResource,
@@ -24,6 +40,18 @@ __all__ = [
24
40
  "AsyncTypesResourceWithRawResponse",
25
41
  "TypesResourceWithStreamingResponse",
26
42
  "AsyncTypesResourceWithStreamingResponse",
43
+ "CsatResource",
44
+ "AsyncCsatResource",
45
+ "CsatResourceWithRawResponse",
46
+ "AsyncCsatResourceWithRawResponse",
47
+ "CsatResourceWithStreamingResponse",
48
+ "AsyncCsatResourceWithStreamingResponse",
49
+ "PropertiesResource",
50
+ "AsyncPropertiesResource",
51
+ "PropertiesResourceWithRawResponse",
52
+ "AsyncPropertiesResourceWithRawResponse",
53
+ "PropertiesResourceWithStreamingResponse",
54
+ "AsyncPropertiesResourceWithStreamingResponse",
27
55
  "ExperiencesResource",
28
56
  "AsyncExperiencesResource",
29
57
  "ExperiencesResourceWithRawResponse",