dodopayments 1.32.0__tar.gz → 1.34.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (204) hide show
  1. dodopayments-1.34.0/.release-please-manifest.json +3 -0
  2. {dodopayments-1.32.0 → dodopayments-1.34.0}/CHANGELOG.md +23 -0
  3. {dodopayments-1.32.0 → dodopayments-1.34.0}/PKG-INFO +2 -2
  4. {dodopayments-1.32.0 → dodopayments-1.34.0}/README.md +1 -1
  5. {dodopayments-1.32.0 → dodopayments-1.34.0}/api.md +8 -1
  6. {dodopayments-1.32.0 → dodopayments-1.34.0}/pyproject.toml +3 -2
  7. {dodopayments-1.32.0 → dodopayments-1.34.0}/requirements-dev.lock +4 -0
  8. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_base_client.py +16 -2
  9. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_version.py +1 -1
  10. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/products/products.py +90 -0
  11. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/subscriptions.py +2 -2
  12. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/__init__.py +2 -0
  13. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment.py +3 -0
  14. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment_list_response.py +2 -0
  15. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/product.py +22 -1
  16. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/product_create_params.py +11 -1
  17. dodopayments-1.34.0/src/dodopayments/types/product_update_files_params.py +11 -0
  18. dodopayments-1.34.0/src/dodopayments/types/product_update_files_response.py +11 -0
  19. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/product_update_params.py +14 -1
  20. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_change_plan_params.py +1 -1
  21. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_products.py +103 -0
  22. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/conftest.py +2 -0
  23. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_client.py +118 -117
  24. dodopayments-1.32.0/.release-please-manifest.json +0 -3
  25. {dodopayments-1.32.0 → dodopayments-1.34.0}/.gitignore +0 -0
  26. {dodopayments-1.32.0 → dodopayments-1.34.0}/CONTRIBUTING.md +0 -0
  27. {dodopayments-1.32.0 → dodopayments-1.34.0}/LICENSE +0 -0
  28. {dodopayments-1.32.0 → dodopayments-1.34.0}/SECURITY.md +0 -0
  29. {dodopayments-1.32.0 → dodopayments-1.34.0}/bin/check-release-environment +0 -0
  30. {dodopayments-1.32.0 → dodopayments-1.34.0}/bin/publish-pypi +0 -0
  31. {dodopayments-1.32.0 → dodopayments-1.34.0}/examples/.keep +0 -0
  32. {dodopayments-1.32.0 → dodopayments-1.34.0}/mypy.ini +0 -0
  33. {dodopayments-1.32.0 → dodopayments-1.34.0}/noxfile.py +0 -0
  34. {dodopayments-1.32.0 → dodopayments-1.34.0}/release-please-config.json +0 -0
  35. {dodopayments-1.32.0 → dodopayments-1.34.0}/requirements.lock +0 -0
  36. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodo_payments/lib/.keep +0 -0
  37. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/__init__.py +0 -0
  38. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_client.py +0 -0
  39. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_compat.py +0 -0
  40. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_constants.py +0 -0
  41. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_exceptions.py +0 -0
  42. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_files.py +0 -0
  43. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_models.py +0 -0
  44. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_qs.py +0 -0
  45. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_resource.py +0 -0
  46. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_response.py +0 -0
  47. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_streaming.py +0 -0
  48. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_types.py +0 -0
  49. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/__init__.py +0 -0
  50. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_logs.py +0 -0
  51. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_proxy.py +0 -0
  52. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_reflection.py +0 -0
  53. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_resources_proxy.py +0 -0
  54. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_streams.py +0 -0
  55. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_sync.py +0 -0
  56. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_transform.py +0 -0
  57. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_typing.py +0 -0
  58. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/_utils/_utils.py +0 -0
  59. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/lib/.keep +0 -0
  60. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/pagination.py +0 -0
  61. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/py.typed +0 -0
  62. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/__init__.py +0 -0
  63. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/addons.py +0 -0
  64. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/brands.py +0 -0
  65. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/customers/__init__.py +0 -0
  66. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/customers/customer_portal.py +0 -0
  67. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/customers/customers.py +0 -0
  68. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/discounts.py +0 -0
  69. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/disputes.py +0 -0
  70. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/invoices/__init__.py +0 -0
  71. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/invoices/invoices.py +0 -0
  72. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/invoices/payments.py +0 -0
  73. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/license_key_instances.py +0 -0
  74. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/license_keys.py +0 -0
  75. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/licenses.py +0 -0
  76. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/misc.py +0 -0
  77. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/payments.py +0 -0
  78. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/payouts.py +0 -0
  79. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/products/__init__.py +0 -0
  80. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/products/images.py +0 -0
  81. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/refunds.py +0 -0
  82. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/resources/webhook_events.py +0 -0
  83. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_cart_response_item.py +0 -0
  84. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_create_params.py +0 -0
  85. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_list_params.py +0 -0
  86. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_response.py +0 -0
  87. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_update_images_response.py +0 -0
  88. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/addon_update_params.py +0 -0
  89. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/attach_existing_customer_param.py +0 -0
  90. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/billing_address.py +0 -0
  91. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/billing_address_param.py +0 -0
  92. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_create_params.py +0 -0
  93. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_create_response.py +0 -0
  94. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_list_response.py +0 -0
  95. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_retrieve_response.py +0 -0
  96. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_update_images_response.py +0 -0
  97. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_update_params.py +0 -0
  98. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/brand_update_response.py +0 -0
  99. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/country_code.py +0 -0
  100. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/create_new_customer_param.py +0 -0
  101. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/currency.py +0 -0
  102. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer.py +0 -0
  103. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_create_params.py +0 -0
  104. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_limited_details.py +0 -0
  105. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_list_params.py +0 -0
  106. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_portal_session.py +0 -0
  107. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_request_param.py +0 -0
  108. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customer_update_params.py +0 -0
  109. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customers/__init__.py +0 -0
  110. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/customers/customer_portal_create_params.py +0 -0
  111. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/discount.py +0 -0
  112. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/discount_create_params.py +0 -0
  113. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/discount_list_params.py +0 -0
  114. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/discount_type.py +0 -0
  115. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/discount_update_params.py +0 -0
  116. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute.py +0 -0
  117. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute_list_params.py +0 -0
  118. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute_list_response.py +0 -0
  119. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute_retrieve_response.py +0 -0
  120. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute_stage.py +0 -0
  121. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/dispute_status.py +0 -0
  122. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/intent_status.py +0 -0
  123. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/invoices/__init__.py +0 -0
  124. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_activate_params.py +0 -0
  125. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_deactivate_params.py +0 -0
  126. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key.py +0 -0
  127. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_duration.py +0 -0
  128. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_duration_param.py +0 -0
  129. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_instance.py +0 -0
  130. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_instance_list_params.py +0 -0
  131. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_instance_update_params.py +0 -0
  132. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_list_params.py +0 -0
  133. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_status.py +0 -0
  134. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_key_update_params.py +0 -0
  135. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_validate_params.py +0 -0
  136. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/license_validate_response.py +0 -0
  137. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/misc_list_supported_countries_response.py +0 -0
  138. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/one_time_product_cart_item.py +0 -0
  139. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/one_time_product_cart_item_param.py +0 -0
  140. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment_create_params.py +0 -0
  141. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment_create_response.py +0 -0
  142. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment_list_params.py +0 -0
  143. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payment_retrieve_line_items_response.py +0 -0
  144. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payout_list_params.py +0 -0
  145. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/payout_list_response.py +0 -0
  146. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/price.py +0 -0
  147. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/price_param.py +0 -0
  148. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/product_list_params.py +0 -0
  149. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/product_list_response.py +0 -0
  150. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/products/__init__.py +0 -0
  151. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/products/image_update_params.py +0 -0
  152. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/products/image_update_response.py +0 -0
  153. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/refund.py +0 -0
  154. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/refund_create_params.py +0 -0
  155. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/refund_list_params.py +0 -0
  156. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/refund_status.py +0 -0
  157. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription.py +0 -0
  158. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_charge_params.py +0 -0
  159. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_charge_response.py +0 -0
  160. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_create_params.py +0 -0
  161. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_create_response.py +0 -0
  162. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_list_params.py +0 -0
  163. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_list_response.py +0 -0
  164. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_status.py +0 -0
  165. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/subscription_update_params.py +0 -0
  166. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/tax_category.py +0 -0
  167. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/time_interval.py +0 -0
  168. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/webhook_event.py +0 -0
  169. {dodopayments-1.32.0 → dodopayments-1.34.0}/src/dodopayments/types/webhook_event_list_params.py +0 -0
  170. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/__init__.py +0 -0
  171. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/__init__.py +0 -0
  172. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/customers/__init__.py +0 -0
  173. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/customers/test_customer_portal.py +0 -0
  174. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/invoices/__init__.py +0 -0
  175. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/invoices/test_payments.py +0 -0
  176. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/products/__init__.py +0 -0
  177. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/products/test_images.py +0 -0
  178. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_addons.py +0 -0
  179. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_brands.py +0 -0
  180. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_customers.py +0 -0
  181. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_discounts.py +0 -0
  182. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_disputes.py +0 -0
  183. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_license_key_instances.py +0 -0
  184. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_license_keys.py +0 -0
  185. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_licenses.py +0 -0
  186. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_misc.py +0 -0
  187. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_payments.py +0 -0
  188. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_payouts.py +0 -0
  189. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_refunds.py +0 -0
  190. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_subscriptions.py +0 -0
  191. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/api_resources/test_webhook_events.py +0 -0
  192. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/sample_file.txt +0 -0
  193. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_deepcopy.py +0 -0
  194. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_extract_files.py +0 -0
  195. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_files.py +0 -0
  196. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_models.py +0 -0
  197. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_qs.py +0 -0
  198. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_required_args.py +0 -0
  199. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_response.py +0 -0
  200. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_streaming.py +0 -0
  201. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_transform.py +0 -0
  202. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_utils/test_proxy.py +0 -0
  203. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/test_utils/test_typing.py +0 -0
  204. {dodopayments-1.32.0 → dodopayments-1.34.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.34.0"
3
+ }
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.34.0 (2025-06-18)
4
+
5
+ Full Changelog: [v1.32.0...v1.34.0](https://github.com/dodopayments/dodopayments-python/compare/v1.32.0...v1.34.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** updated to version 1.34.0 ([b83c3a8](https://github.com/dodopayments/dodopayments-python/commit/b83c3a87e253e3c74e9160ffe98d9b8fedaa8af1))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **client:** correctly parse binary response | stream ([4d41dc7](https://github.com/dodopayments/dodopayments-python/commit/4d41dc78632a83e98d91dd763858b61625d75cdc))
15
+ * **tests:** fix: tests which call HTTP endpoints directly with the example parameters ([10cf09b](https://github.com/dodopayments/dodopayments-python/commit/10cf09b005788fff2e01ec99d1ec70f71f09a80d))
16
+
17
+
18
+ ### Chores
19
+
20
+ * **ci:** enable for pull requests ([ff898a1](https://github.com/dodopayments/dodopayments-python/commit/ff898a143cc3a7ce7ccccfc435f0af9a21f826d8))
21
+ * **internal:** update conftest.py ([c0c8eef](https://github.com/dodopayments/dodopayments-python/commit/c0c8eefc8e397aeb0933476ffd8b48c7ab9c0c72))
22
+ * **readme:** update badges ([6b1593c](https://github.com/dodopayments/dodopayments-python/commit/6b1593c2fe586d7fbabdeac3c7683fcad6256f63))
23
+ * **tests:** add tests for httpx client instantiation & proxies ([c7b0949](https://github.com/dodopayments/dodopayments-python/commit/c7b09497f1fe1f83bbd5a259174276a57ab7fafa))
24
+ * **tests:** run tests in parallel ([d46598b](https://github.com/dodopayments/dodopayments-python/commit/d46598b3cef4df023e692e84cb9265b7d9c8f22a))
25
+
3
26
  ## 1.32.0 (2025-06-09)
4
27
 
5
28
  Full Changelog: [v1.30.2...v1.32.0](https://github.com/dodopayments/dodopayments-python/compare/v1.30.2...v1.32.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.32.0
3
+ Version: 1.34.0
4
4
  Summary: The official Python library for the Dodo Payments API
5
5
  Project-URL: Homepage, https://github.com/dodopayments/dodopayments-python
6
6
  Project-URL: Repository, https://github.com/dodopayments/dodopayments-python
@@ -31,7 +31,7 @@ Description-Content-Type: text/markdown
31
31
 
32
32
  # Dodo Payments Python API library
33
33
 
34
- [![PyPI version](https://img.shields.io/pypi/v/dodopayments.svg)](https://pypi.org/project/dodopayments/)
34
+ [![PyPI version](https://github.com/dodopayments/dodopayments-python/tree/main/<https://img.shields.io/pypi/v/dodopayments.svg?label=pypi%20(stable)>)](https://pypi.org/project/dodopayments/)
35
35
 
36
36
  The [Dodo Payments](https://dodopayments.com) Python library provides convenient access to the Dodo Payments REST API from any Python 3.8+
37
37
  application. The library includes type definitions for all request params and response fields,
@@ -1,6 +1,6 @@
1
1
  # Dodo Payments Python API library
2
2
 
3
- [![PyPI version](https://img.shields.io/pypi/v/dodopayments.svg)](https://pypi.org/project/dodopayments/)
3
+ [![PyPI version](<https://img.shields.io/pypi/v/dodopayments.svg?label=pypi%20(stable)>)](https://pypi.org/project/dodopayments/)
4
4
 
5
5
  The [Dodo Payments](https://dodopayments.com) Python library provides convenient access to the Dodo Payments REST API from any Python 3.8+
6
6
  application. The library includes type definitions for all request params and response fields,
@@ -184,7 +184,13 @@ Methods:
184
184
  Types:
185
185
 
186
186
  ```python
187
- from dodopayments.types import LicenseKeyDuration, Price, Product, ProductListResponse
187
+ from dodopayments.types import (
188
+ LicenseKeyDuration,
189
+ Price,
190
+ Product,
191
+ ProductListResponse,
192
+ ProductUpdateFilesResponse,
193
+ )
188
194
  ```
189
195
 
190
196
  Methods:
@@ -195,6 +201,7 @@ Methods:
195
201
  - <code title="get /products">client.products.<a href="./src/dodopayments/resources/products/products.py">list</a>(\*\*<a href="src/dodopayments/types/product_list_params.py">params</a>) -> <a href="./src/dodopayments/types/product_list_response.py">SyncDefaultPageNumberPagination[ProductListResponse]</a></code>
196
202
  - <code title="delete /products/{id}">client.products.<a href="./src/dodopayments/resources/products/products.py">delete</a>(id) -> None</code>
197
203
  - <code title="post /products/{id}/unarchive">client.products.<a href="./src/dodopayments/resources/products/products.py">unarchive</a>(id) -> None</code>
204
+ - <code title="put /products/{id}/files">client.products.<a href="./src/dodopayments/resources/products/products.py">update_files</a>(id, \*\*<a href="src/dodopayments/types/product_update_files_params.py">params</a>) -> <a href="./src/dodopayments/types/product_update_files_response.py">ProductUpdateFilesResponse</a></code>
198
205
 
199
206
  ## Images
200
207
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dodopayments"
3
- version = "1.32.0"
3
+ version = "1.34.0"
4
4
  description = "The official Python library for the Dodo Payments API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -54,6 +54,7 @@ dev-dependencies = [
54
54
  "importlib-metadata>=6.7.0",
55
55
  "rich>=13.7.1",
56
56
  "nest_asyncio==1.6.0",
57
+ "pytest-xdist>=3.6.1",
57
58
  ]
58
59
 
59
60
  [tool.rye.scripts]
@@ -125,7 +126,7 @@ replacement = '[\1](https://github.com/dodopayments/dodopayments-python/tree/mai
125
126
 
126
127
  [tool.pytest.ini_options]
127
128
  testpaths = ["tests"]
128
- addopts = "--tb=short"
129
+ addopts = "--tb=short -n auto"
129
130
  xfail_strict = true
130
131
  asyncio_mode = "auto"
131
132
  asyncio_default_fixture_loop_scope = "session"
@@ -30,6 +30,8 @@ distro==1.8.0
30
30
  exceptiongroup==1.2.2
31
31
  # via anyio
32
32
  # via pytest
33
+ execnet==2.1.1
34
+ # via pytest-xdist
33
35
  filelock==3.12.4
34
36
  # via virtualenv
35
37
  h11==0.14.0
@@ -72,7 +74,9 @@ pygments==2.18.0
72
74
  pyright==1.1.399
73
75
  pytest==8.3.3
74
76
  # via pytest-asyncio
77
+ # via pytest-xdist
75
78
  pytest-asyncio==0.24.0
79
+ pytest-xdist==3.7.0
76
80
  python-dateutil==2.8.2
77
81
  # via time-machine
78
82
  pytz==2023.3.post1
@@ -1071,7 +1071,14 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1071
1071
  ) -> ResponseT:
1072
1072
  origin = get_origin(cast_to) or cast_to
1073
1073
 
1074
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1074
+ if (
1075
+ inspect.isclass(origin)
1076
+ and issubclass(origin, BaseAPIResponse)
1077
+ # we only want to actually return the custom BaseAPIResponse class if we're
1078
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1079
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1080
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1081
+ ):
1075
1082
  if not issubclass(origin, APIResponse):
1076
1083
  raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}")
1077
1084
 
@@ -1574,7 +1581,14 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1574
1581
  ) -> ResponseT:
1575
1582
  origin = get_origin(cast_to) or cast_to
1576
1583
 
1577
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1584
+ if (
1585
+ inspect.isclass(origin)
1586
+ and issubclass(origin, BaseAPIResponse)
1587
+ # we only want to actually return the custom BaseAPIResponse class if we're
1588
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1589
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1590
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1591
+ ):
1578
1592
  if not issubclass(origin, AsyncAPIResponse):
1579
1593
  raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}")
1580
1594
 
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "dodopayments"
4
- __version__ = "1.32.0" # x-release-please-version
4
+ __version__ = "1.34.0" # x-release-please-version
@@ -19,6 +19,7 @@ from ...types import (
19
19
  product_list_params,
20
20
  product_create_params,
21
21
  product_update_params,
22
+ product_update_files_params,
22
23
  )
23
24
  from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
24
25
  from ..._utils import maybe_transform, async_maybe_transform
@@ -37,6 +38,7 @@ from ...types.price_param import PriceParam
37
38
  from ...types.tax_category import TaxCategory
38
39
  from ...types.product_list_response import ProductListResponse
39
40
  from ...types.license_key_duration_param import LicenseKeyDurationParam
41
+ from ...types.product_update_files_response import ProductUpdateFilesResponse
40
42
 
41
43
  __all__ = ["ProductsResource", "AsyncProductsResource"]
42
44
 
@@ -73,6 +75,7 @@ class ProductsResource(SyncAPIResource):
73
75
  addons: Optional[List[str]] | NotGiven = NOT_GIVEN,
74
76
  brand_id: Optional[str] | NotGiven = NOT_GIVEN,
75
77
  description: Optional[str] | NotGiven = NOT_GIVEN,
78
+ digital_product_delivery: Optional[product_create_params.DigitalProductDelivery] | NotGiven = NOT_GIVEN,
76
79
  license_key_activation_message: Optional[str] | NotGiven = NOT_GIVEN,
77
80
  license_key_activations_limit: Optional[int] | NotGiven = NOT_GIVEN,
78
81
  license_key_duration: Optional[LicenseKeyDurationParam] | NotGiven = NOT_GIVEN,
@@ -121,6 +124,7 @@ class ProductsResource(SyncAPIResource):
121
124
  "addons": addons,
122
125
  "brand_id": brand_id,
123
126
  "description": description,
127
+ "digital_product_delivery": digital_product_delivery,
124
128
  "license_key_activation_message": license_key_activation_message,
125
129
  "license_key_activations_limit": license_key_activations_limit,
126
130
  "license_key_duration": license_key_duration,
@@ -173,6 +177,7 @@ class ProductsResource(SyncAPIResource):
173
177
  addons: Optional[List[str]] | NotGiven = NOT_GIVEN,
174
178
  brand_id: Optional[str] | NotGiven = NOT_GIVEN,
175
179
  description: Optional[str] | NotGiven = NOT_GIVEN,
180
+ digital_product_delivery: Optional[product_update_params.DigitalProductDelivery] | NotGiven = NOT_GIVEN,
176
181
  image_id: Optional[str] | NotGiven = NOT_GIVEN,
177
182
  license_key_activation_message: Optional[str] | NotGiven = NOT_GIVEN,
178
183
  license_key_activations_limit: Optional[int] | NotGiven = NOT_GIVEN,
@@ -234,6 +239,7 @@ class ProductsResource(SyncAPIResource):
234
239
  "addons": addons,
235
240
  "brand_id": brand_id,
236
241
  "description": description,
242
+ "digital_product_delivery": digital_product_delivery,
237
243
  "image_id": image_id,
238
244
  "license_key_activation_message": license_key_activation_message,
239
245
  "license_key_activations_limit": license_key_activations_limit,
@@ -377,6 +383,39 @@ class ProductsResource(SyncAPIResource):
377
383
  cast_to=NoneType,
378
384
  )
379
385
 
386
+ def update_files(
387
+ self,
388
+ id: str,
389
+ *,
390
+ file_name: str,
391
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
392
+ # The extra values given here take precedence over values defined on the client or passed to this method.
393
+ extra_headers: Headers | None = None,
394
+ extra_query: Query | None = None,
395
+ extra_body: Body | None = None,
396
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
397
+ ) -> ProductUpdateFilesResponse:
398
+ """
399
+ Args:
400
+ extra_headers: Send extra headers
401
+
402
+ extra_query: Add additional query parameters to the request
403
+
404
+ extra_body: Add additional JSON properties to the request
405
+
406
+ timeout: Override the client-level default timeout for this request, in seconds
407
+ """
408
+ if not id:
409
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
410
+ return self._put(
411
+ f"/products/{id}/files",
412
+ body=maybe_transform({"file_name": file_name}, product_update_files_params.ProductUpdateFilesParams),
413
+ options=make_request_options(
414
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
415
+ ),
416
+ cast_to=ProductUpdateFilesResponse,
417
+ )
418
+
380
419
 
381
420
  class AsyncProductsResource(AsyncAPIResource):
382
421
  @cached_property
@@ -410,6 +449,7 @@ class AsyncProductsResource(AsyncAPIResource):
410
449
  addons: Optional[List[str]] | NotGiven = NOT_GIVEN,
411
450
  brand_id: Optional[str] | NotGiven = NOT_GIVEN,
412
451
  description: Optional[str] | NotGiven = NOT_GIVEN,
452
+ digital_product_delivery: Optional[product_create_params.DigitalProductDelivery] | NotGiven = NOT_GIVEN,
413
453
  license_key_activation_message: Optional[str] | NotGiven = NOT_GIVEN,
414
454
  license_key_activations_limit: Optional[int] | NotGiven = NOT_GIVEN,
415
455
  license_key_duration: Optional[LicenseKeyDurationParam] | NotGiven = NOT_GIVEN,
@@ -458,6 +498,7 @@ class AsyncProductsResource(AsyncAPIResource):
458
498
  "addons": addons,
459
499
  "brand_id": brand_id,
460
500
  "description": description,
501
+ "digital_product_delivery": digital_product_delivery,
461
502
  "license_key_activation_message": license_key_activation_message,
462
503
  "license_key_activations_limit": license_key_activations_limit,
463
504
  "license_key_duration": license_key_duration,
@@ -510,6 +551,7 @@ class AsyncProductsResource(AsyncAPIResource):
510
551
  addons: Optional[List[str]] | NotGiven = NOT_GIVEN,
511
552
  brand_id: Optional[str] | NotGiven = NOT_GIVEN,
512
553
  description: Optional[str] | NotGiven = NOT_GIVEN,
554
+ digital_product_delivery: Optional[product_update_params.DigitalProductDelivery] | NotGiven = NOT_GIVEN,
513
555
  image_id: Optional[str] | NotGiven = NOT_GIVEN,
514
556
  license_key_activation_message: Optional[str] | NotGiven = NOT_GIVEN,
515
557
  license_key_activations_limit: Optional[int] | NotGiven = NOT_GIVEN,
@@ -571,6 +613,7 @@ class AsyncProductsResource(AsyncAPIResource):
571
613
  "addons": addons,
572
614
  "brand_id": brand_id,
573
615
  "description": description,
616
+ "digital_product_delivery": digital_product_delivery,
574
617
  "image_id": image_id,
575
618
  "license_key_activation_message": license_key_activation_message,
576
619
  "license_key_activations_limit": license_key_activations_limit,
@@ -714,6 +757,41 @@ class AsyncProductsResource(AsyncAPIResource):
714
757
  cast_to=NoneType,
715
758
  )
716
759
 
760
+ async def update_files(
761
+ self,
762
+ id: str,
763
+ *,
764
+ file_name: str,
765
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
766
+ # The extra values given here take precedence over values defined on the client or passed to this method.
767
+ extra_headers: Headers | None = None,
768
+ extra_query: Query | None = None,
769
+ extra_body: Body | None = None,
770
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
771
+ ) -> ProductUpdateFilesResponse:
772
+ """
773
+ Args:
774
+ extra_headers: Send extra headers
775
+
776
+ extra_query: Add additional query parameters to the request
777
+
778
+ extra_body: Add additional JSON properties to the request
779
+
780
+ timeout: Override the client-level default timeout for this request, in seconds
781
+ """
782
+ if not id:
783
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
784
+ return await self._put(
785
+ f"/products/{id}/files",
786
+ body=await async_maybe_transform(
787
+ {"file_name": file_name}, product_update_files_params.ProductUpdateFilesParams
788
+ ),
789
+ options=make_request_options(
790
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
791
+ ),
792
+ cast_to=ProductUpdateFilesResponse,
793
+ )
794
+
717
795
 
718
796
  class ProductsResourceWithRawResponse:
719
797
  def __init__(self, products: ProductsResource) -> None:
@@ -737,6 +815,9 @@ class ProductsResourceWithRawResponse:
737
815
  self.unarchive = to_raw_response_wrapper(
738
816
  products.unarchive,
739
817
  )
818
+ self.update_files = to_raw_response_wrapper(
819
+ products.update_files,
820
+ )
740
821
 
741
822
  @cached_property
742
823
  def images(self) -> ImagesResourceWithRawResponse:
@@ -765,6 +846,9 @@ class AsyncProductsResourceWithRawResponse:
765
846
  self.unarchive = async_to_raw_response_wrapper(
766
847
  products.unarchive,
767
848
  )
849
+ self.update_files = async_to_raw_response_wrapper(
850
+ products.update_files,
851
+ )
768
852
 
769
853
  @cached_property
770
854
  def images(self) -> AsyncImagesResourceWithRawResponse:
@@ -793,6 +877,9 @@ class ProductsResourceWithStreamingResponse:
793
877
  self.unarchive = to_streamed_response_wrapper(
794
878
  products.unarchive,
795
879
  )
880
+ self.update_files = to_streamed_response_wrapper(
881
+ products.update_files,
882
+ )
796
883
 
797
884
  @cached_property
798
885
  def images(self) -> ImagesResourceWithStreamingResponse:
@@ -821,6 +908,9 @@ class AsyncProductsResourceWithStreamingResponse:
821
908
  self.unarchive = async_to_streamed_response_wrapper(
822
909
  products.unarchive,
823
910
  )
911
+ self.update_files = async_to_streamed_response_wrapper(
912
+ products.update_files,
913
+ )
824
914
 
825
915
  @cached_property
826
916
  def images(self) -> AsyncImagesResourceWithStreamingResponse:
@@ -324,7 +324,7 @@ class SubscriptionsResource(SyncAPIResource):
324
324
  subscription_id: str,
325
325
  *,
326
326
  product_id: str,
327
- proration_billing_mode: Literal["prorated_immediately"],
327
+ proration_billing_mode: Literal["prorated_immediately", "full_immediately"],
328
328
  quantity: int,
329
329
  addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
330
330
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -699,7 +699,7 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
699
699
  subscription_id: str,
700
700
  *,
701
701
  product_id: str,
702
- proration_billing_mode: Literal["prorated_immediately"],
702
+ proration_billing_mode: Literal["prorated_immediately", "full_immediately"],
703
703
  quantity: int,
704
704
  addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
705
705
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -78,10 +78,12 @@ from .subscription_charge_params import SubscriptionChargeParams as Subscription
78
78
  from .subscription_create_params import SubscriptionCreateParams as SubscriptionCreateParams
79
79
  from .subscription_list_response import SubscriptionListResponse as SubscriptionListResponse
80
80
  from .subscription_update_params import SubscriptionUpdateParams as SubscriptionUpdateParams
81
+ from .product_update_files_params import ProductUpdateFilesParams as ProductUpdateFilesParams
81
82
  from .addon_update_images_response import AddonUpdateImagesResponse as AddonUpdateImagesResponse
82
83
  from .brand_update_images_response import BrandUpdateImagesResponse as BrandUpdateImagesResponse
83
84
  from .subscription_charge_response import SubscriptionChargeResponse as SubscriptionChargeResponse
84
85
  from .subscription_create_response import SubscriptionCreateResponse as SubscriptionCreateResponse
86
+ from .product_update_files_response import ProductUpdateFilesResponse as ProductUpdateFilesResponse
85
87
  from .attach_existing_customer_param import AttachExistingCustomerParam as AttachExistingCustomerParam
86
88
  from .subscription_change_plan_params import SubscriptionChangePlanParams as SubscriptionChangePlanParams
87
89
  from .license_key_instance_list_params import LicenseKeyInstanceListParams as LicenseKeyInstanceListParams
@@ -37,6 +37,9 @@ class Payment(BaseModel):
37
37
 
38
38
  customer: CustomerLimitedDetails
39
39
 
40
+ digital_products_delivered: bool
41
+ """brand id this payment belongs to"""
42
+
40
43
  disputes: List[Dispute]
41
44
  """List of disputes associated with this payment"""
42
45
 
@@ -20,6 +20,8 @@ class PaymentListResponse(BaseModel):
20
20
 
21
21
  customer: CustomerLimitedDetails
22
22
 
23
+ digital_products_delivered: bool
24
+
23
25
  metadata: Dict[str, str]
24
26
 
25
27
  payment_id: str
@@ -8,7 +8,26 @@ from .._models import BaseModel
8
8
  from .tax_category import TaxCategory
9
9
  from .license_key_duration import LicenseKeyDuration
10
10
 
11
- __all__ = ["Product"]
11
+ __all__ = ["Product", "DigitalProductDelivery", "DigitalProductDeliveryFile"]
12
+
13
+
14
+ class DigitalProductDeliveryFile(BaseModel):
15
+ file_id: str
16
+
17
+ file_name: str
18
+
19
+ url: str
20
+
21
+
22
+ class DigitalProductDelivery(BaseModel):
23
+ external_url: Optional[str] = None
24
+ """External URL to digital product"""
25
+
26
+ files: Optional[List[DigitalProductDeliveryFile]] = None
27
+ """Uploaded files ids of digital product"""
28
+
29
+ instructions: Optional[str] = None
30
+ """Instructions to download and use the digital product"""
12
31
 
13
32
 
14
33
  class Product(BaseModel):
@@ -46,6 +65,8 @@ class Product(BaseModel):
46
65
  description: Optional[str] = None
47
66
  """Description of the product, optional."""
48
67
 
68
+ digital_product_delivery: Optional[DigitalProductDelivery] = None
69
+
49
70
  image: Optional[str] = None
50
71
  """URL of the product image, optional."""
51
72
 
@@ -9,7 +9,7 @@ from .price_param import PriceParam
9
9
  from .tax_category import TaxCategory
10
10
  from .license_key_duration_param import LicenseKeyDurationParam
11
11
 
12
- __all__ = ["ProductCreateParams"]
12
+ __all__ = ["ProductCreateParams", "DigitalProductDelivery"]
13
13
 
14
14
 
15
15
  class ProductCreateParams(TypedDict, total=False):
@@ -30,6 +30,8 @@ class ProductCreateParams(TypedDict, total=False):
30
30
  description: Optional[str]
31
31
  """Optional description of the product"""
32
32
 
33
+ digital_product_delivery: Optional[DigitalProductDelivery]
34
+
33
35
  license_key_activation_message: Optional[str]
34
36
  """Optional message displayed during license key activation"""
35
37
 
@@ -45,3 +47,11 @@ class ProductCreateParams(TypedDict, total=False):
45
47
 
46
48
  name: Optional[str]
47
49
  """Optional name of the product"""
50
+
51
+
52
+ class DigitalProductDelivery(TypedDict, total=False):
53
+ external_url: Optional[str]
54
+ """External URL to digital product"""
55
+
56
+ instructions: Optional[str]
57
+ """Instructions to download and use the digital product"""
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, TypedDict
6
+
7
+ __all__ = ["ProductUpdateFilesParams"]
8
+
9
+
10
+ class ProductUpdateFilesParams(TypedDict, total=False):
11
+ file_name: Required[str]
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .._models import BaseModel
4
+
5
+ __all__ = ["ProductUpdateFilesResponse"]
6
+
7
+
8
+ class ProductUpdateFilesResponse(BaseModel):
9
+ file_id: str
10
+
11
+ url: str
@@ -9,7 +9,7 @@ from .price_param import PriceParam
9
9
  from .tax_category import TaxCategory
10
10
  from .license_key_duration_param import LicenseKeyDurationParam
11
11
 
12
- __all__ = ["ProductUpdateParams"]
12
+ __all__ = ["ProductUpdateParams", "DigitalProductDelivery"]
13
13
 
14
14
 
15
15
  class ProductUpdateParams(TypedDict, total=False):
@@ -21,6 +21,8 @@ class ProductUpdateParams(TypedDict, total=False):
21
21
  description: Optional[str]
22
22
  """Description of the product, optional and must be at most 1000 characters."""
23
23
 
24
+ digital_product_delivery: Optional[DigitalProductDelivery]
25
+
24
26
  image_id: Optional[str]
25
27
  """Product image id after its uploaded to S3"""
26
28
 
@@ -57,3 +59,14 @@ class ProductUpdateParams(TypedDict, total=False):
57
59
  Represents the different categories of taxation applicable to various products
58
60
  and services.
59
61
  """
62
+
63
+
64
+ class DigitalProductDelivery(TypedDict, total=False):
65
+ external_url: Optional[str]
66
+ """External URL to digital product"""
67
+
68
+ files: Optional[List[str]]
69
+ """Uploaded files ids of digital product"""
70
+
71
+ instructions: Optional[str]
72
+ """Instructions to download and use the digital product"""
@@ -12,7 +12,7 @@ class SubscriptionChangePlanParams(TypedDict, total=False):
12
12
  product_id: Required[str]
13
13
  """Unique identifier of the product to subscribe to"""
14
14
 
15
- proration_billing_mode: Required[Literal["prorated_immediately"]]
15
+ proration_billing_mode: Required[Literal["prorated_immediately", "full_immediately"]]
16
16
 
17
17
  quantity: Required[int]
18
18
  """Number of units to subscribe for. Must be at least 1."""