dodopayments 1.38.1__tar.gz → 1.39.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 (205) hide show
  1. dodopayments-1.39.0/.release-please-manifest.json +3 -0
  2. {dodopayments-1.38.1 → dodopayments-1.39.0}/CHANGELOG.md +23 -0
  3. {dodopayments-1.38.1 → dodopayments-1.39.0}/PKG-INFO +5 -7
  4. {dodopayments-1.38.1 → dodopayments-1.39.0}/README.md +3 -5
  5. {dodopayments-1.38.1 → dodopayments-1.39.0}/pyproject.toml +2 -2
  6. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_base_client.py +9 -2
  7. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_models.py +8 -5
  8. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_version.py +1 -1
  9. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/subscriptions.py +22 -0
  10. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_charge_params.py +15 -0
  11. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_create_params.py +13 -0
  12. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_subscriptions.py +8 -0
  13. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_client.py +2 -2
  14. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_models.py +45 -0
  15. dodopayments-1.38.1/.release-please-manifest.json +0 -3
  16. {dodopayments-1.38.1 → dodopayments-1.39.0}/.gitignore +0 -0
  17. {dodopayments-1.38.1 → dodopayments-1.39.0}/CONTRIBUTING.md +0 -0
  18. {dodopayments-1.38.1 → dodopayments-1.39.0}/LICENSE +0 -0
  19. {dodopayments-1.38.1 → dodopayments-1.39.0}/SECURITY.md +0 -0
  20. {dodopayments-1.38.1 → dodopayments-1.39.0}/api.md +0 -0
  21. {dodopayments-1.38.1 → dodopayments-1.39.0}/bin/check-release-environment +0 -0
  22. {dodopayments-1.38.1 → dodopayments-1.39.0}/bin/publish-pypi +0 -0
  23. {dodopayments-1.38.1 → dodopayments-1.39.0}/examples/.keep +0 -0
  24. {dodopayments-1.38.1 → dodopayments-1.39.0}/mypy.ini +0 -0
  25. {dodopayments-1.38.1 → dodopayments-1.39.0}/noxfile.py +0 -0
  26. {dodopayments-1.38.1 → dodopayments-1.39.0}/release-please-config.json +0 -0
  27. {dodopayments-1.38.1 → dodopayments-1.39.0}/requirements-dev.lock +0 -0
  28. {dodopayments-1.38.1 → dodopayments-1.39.0}/requirements.lock +0 -0
  29. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodo_payments/lib/.keep +0 -0
  30. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/__init__.py +0 -0
  31. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_client.py +0 -0
  32. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_compat.py +0 -0
  33. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_constants.py +0 -0
  34. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_exceptions.py +0 -0
  35. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_files.py +0 -0
  36. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_qs.py +0 -0
  37. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_resource.py +0 -0
  38. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_response.py +0 -0
  39. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_streaming.py +0 -0
  40. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_types.py +0 -0
  41. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/__init__.py +0 -0
  42. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_logs.py +0 -0
  43. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_proxy.py +0 -0
  44. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_reflection.py +0 -0
  45. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_resources_proxy.py +0 -0
  46. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_streams.py +0 -0
  47. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_sync.py +0 -0
  48. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_transform.py +0 -0
  49. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_typing.py +0 -0
  50. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/_utils/_utils.py +0 -0
  51. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/lib/.keep +0 -0
  52. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/pagination.py +0 -0
  53. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/py.typed +0 -0
  54. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/__init__.py +0 -0
  55. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/addons.py +0 -0
  56. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/brands.py +0 -0
  57. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/customers/__init__.py +0 -0
  58. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/customers/customer_portal.py +0 -0
  59. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/customers/customers.py +0 -0
  60. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/discounts.py +0 -0
  61. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/disputes.py +0 -0
  62. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/invoices/__init__.py +0 -0
  63. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/invoices/invoices.py +0 -0
  64. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/invoices/payments.py +0 -0
  65. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/license_key_instances.py +0 -0
  66. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/license_keys.py +0 -0
  67. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/licenses.py +0 -0
  68. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/misc.py +0 -0
  69. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/payments.py +0 -0
  70. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/payouts.py +0 -0
  71. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/products/__init__.py +0 -0
  72. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/products/images.py +0 -0
  73. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/products/products.py +0 -0
  74. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/refunds.py +0 -0
  75. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/resources/webhook_events.py +0 -0
  76. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/__init__.py +0 -0
  77. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_cart_response_item.py +0 -0
  78. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_create_params.py +0 -0
  79. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_list_params.py +0 -0
  80. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_response.py +0 -0
  81. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_update_images_response.py +0 -0
  82. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/addon_update_params.py +0 -0
  83. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/attach_existing_customer_param.py +0 -0
  84. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/billing_address.py +0 -0
  85. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/billing_address_param.py +0 -0
  86. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_create_params.py +0 -0
  87. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_create_response.py +0 -0
  88. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_list_response.py +0 -0
  89. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_retrieve_response.py +0 -0
  90. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_update_images_response.py +0 -0
  91. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_update_params.py +0 -0
  92. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/brand_update_response.py +0 -0
  93. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/country_code.py +0 -0
  94. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/create_new_customer_param.py +0 -0
  95. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/currency.py +0 -0
  96. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer.py +0 -0
  97. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_create_params.py +0 -0
  98. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_limited_details.py +0 -0
  99. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_list_params.py +0 -0
  100. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_portal_session.py +0 -0
  101. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_request_param.py +0 -0
  102. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customer_update_params.py +0 -0
  103. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customers/__init__.py +0 -0
  104. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/customers/customer_portal_create_params.py +0 -0
  105. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/discount.py +0 -0
  106. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/discount_create_params.py +0 -0
  107. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/discount_list_params.py +0 -0
  108. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/discount_type.py +0 -0
  109. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/discount_update_params.py +0 -0
  110. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute.py +0 -0
  111. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute_list_params.py +0 -0
  112. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute_list_response.py +0 -0
  113. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute_retrieve_response.py +0 -0
  114. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute_stage.py +0 -0
  115. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/dispute_status.py +0 -0
  116. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/intent_status.py +0 -0
  117. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/invoices/__init__.py +0 -0
  118. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_activate_params.py +0 -0
  119. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_deactivate_params.py +0 -0
  120. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key.py +0 -0
  121. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_duration.py +0 -0
  122. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_duration_param.py +0 -0
  123. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_instance.py +0 -0
  124. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_instance_list_params.py +0 -0
  125. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_instance_update_params.py +0 -0
  126. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_list_params.py +0 -0
  127. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_status.py +0 -0
  128. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_key_update_params.py +0 -0
  129. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_validate_params.py +0 -0
  130. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/license_validate_response.py +0 -0
  131. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/misc_list_supported_countries_response.py +0 -0
  132. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/one_time_product_cart_item.py +0 -0
  133. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/one_time_product_cart_item_param.py +0 -0
  134. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment.py +0 -0
  135. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment_create_params.py +0 -0
  136. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment_create_response.py +0 -0
  137. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment_list_params.py +0 -0
  138. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment_list_response.py +0 -0
  139. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payment_retrieve_line_items_response.py +0 -0
  140. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payout_list_params.py +0 -0
  141. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/payout_list_response.py +0 -0
  142. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/price.py +0 -0
  143. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/price_param.py +0 -0
  144. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product.py +0 -0
  145. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_create_params.py +0 -0
  146. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_list_params.py +0 -0
  147. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_list_response.py +0 -0
  148. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_update_files_params.py +0 -0
  149. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_update_files_response.py +0 -0
  150. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/product_update_params.py +0 -0
  151. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/products/__init__.py +0 -0
  152. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/products/image_update_params.py +0 -0
  153. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/products/image_update_response.py +0 -0
  154. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/refund.py +0 -0
  155. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/refund_create_params.py +0 -0
  156. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/refund_list_params.py +0 -0
  157. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/refund_status.py +0 -0
  158. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription.py +0 -0
  159. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_change_plan_params.py +0 -0
  160. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_charge_response.py +0 -0
  161. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_create_response.py +0 -0
  162. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_list_params.py +0 -0
  163. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_list_response.py +0 -0
  164. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_status.py +0 -0
  165. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/subscription_update_params.py +0 -0
  166. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/tax_category.py +0 -0
  167. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/time_interval.py +0 -0
  168. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/webhook_event.py +0 -0
  169. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/webhook_event_list_params.py +0 -0
  170. {dodopayments-1.38.1 → dodopayments-1.39.0}/src/dodopayments/types/webhook_event_type.py +0 -0
  171. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/__init__.py +0 -0
  172. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/__init__.py +0 -0
  173. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/customers/__init__.py +0 -0
  174. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/customers/test_customer_portal.py +0 -0
  175. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/invoices/__init__.py +0 -0
  176. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/invoices/test_payments.py +0 -0
  177. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/products/__init__.py +0 -0
  178. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/products/test_images.py +0 -0
  179. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_addons.py +0 -0
  180. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_brands.py +0 -0
  181. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_customers.py +0 -0
  182. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_discounts.py +0 -0
  183. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_disputes.py +0 -0
  184. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_license_key_instances.py +0 -0
  185. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_license_keys.py +0 -0
  186. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_licenses.py +0 -0
  187. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_misc.py +0 -0
  188. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_payments.py +0 -0
  189. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_payouts.py +0 -0
  190. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_products.py +0 -0
  191. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_refunds.py +0 -0
  192. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/api_resources/test_webhook_events.py +0 -0
  193. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/conftest.py +0 -0
  194. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/sample_file.txt +0 -0
  195. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_deepcopy.py +0 -0
  196. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_extract_files.py +0 -0
  197. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_files.py +0 -0
  198. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_qs.py +0 -0
  199. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_required_args.py +0 -0
  200. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_response.py +0 -0
  201. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_streaming.py +0 -0
  202. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_transform.py +0 -0
  203. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_utils/test_proxy.py +0 -0
  204. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/test_utils/test_typing.py +0 -0
  205. {dodopayments-1.38.1 → dodopayments-1.39.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.39.0"
3
+ }
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.39.0 (2025-07-15)
4
+
5
+ Full Changelog: [v1.38.2...v1.39.0](https://github.com/dodopayments/dodopayments-python/compare/v1.38.2...v1.39.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** updated openapi spec to v1.40.0 ([91da77a](https://github.com/dodopayments/dodopayments-python/commit/91da77acd02f39295613e55454005f0a90bca600))
10
+ * clean up environment call outs ([8bbe9b4](https://github.com/dodopayments/dodopayments-python/commit/8bbe9b4cccc55a6f08fd9760b45aa46b94bc6a2d))
11
+
12
+ ## 1.38.2 (2025-07-12)
13
+
14
+ Full Changelog: [v1.38.1...v1.38.2](https://github.com/dodopayments/dodopayments-python/compare/v1.38.1...v1.38.2)
15
+
16
+ ### Bug Fixes
17
+
18
+ * **client:** don't send Content-Type header on GET requests ([9807cc2](https://github.com/dodopayments/dodopayments-python/commit/9807cc2f47241f9168c7eb766c7c9f0e8f32e4ad))
19
+ * **parsing:** correctly handle nested discriminated unions ([4147e1f](https://github.com/dodopayments/dodopayments-python/commit/4147e1ffcf8c2790e21c9667ce759086612e4e1e))
20
+
21
+
22
+ ### Chores
23
+
24
+ * **readme:** fix version rendering on pypi ([5f7a3c2](https://github.com/dodopayments/dodopayments-python/commit/5f7a3c2c710878faaa7840a9d82eb3cab5f761c5))
25
+
3
26
  ## 1.38.1 (2025-07-09)
4
27
 
5
28
  Full Changelog: [v1.38.0...v1.38.1](https://github.com/dodopayments/dodopayments-python/compare/v1.38.0...v1.38.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.38.1
3
+ Version: 1.39.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
@@ -30,12 +30,13 @@ Requires-Dist: sniffio
30
30
  Requires-Dist: typing-extensions<5,>=4.10
31
31
  Provides-Extra: aiohttp
32
32
  Requires-Dist: aiohttp; extra == 'aiohttp'
33
- Requires-Dist: httpx-aiohttp>=0.1.6; extra == 'aiohttp'
33
+ Requires-Dist: httpx-aiohttp>=0.1.8; extra == 'aiohttp'
34
34
  Description-Content-Type: text/markdown
35
35
 
36
36
  # Dodo Payments Python API library
37
37
 
38
- [![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/)
38
+ <!-- prettier-ignore -->
39
+ [![PyPI version](https://img.shields.io/pypi/v/dodopayments.svg?label=pypi%20(stable))](https://pypi.org/project/dodopayments/)
39
40
 
40
41
  The [Dodo Payments](https://dodopayments.com) Python library provides convenient access to the Dodo Payments REST API from any Python 3.8+
41
42
  application. The library includes type definitions for all request params and response fields,
@@ -147,7 +148,6 @@ pip install dodopayments[aiohttp]
147
148
  Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
148
149
 
149
150
  ```python
150
- import os
151
151
  import asyncio
152
152
  from dodopayments import DefaultAioHttpClient
153
153
  from dodopayments import AsyncDodoPayments
@@ -155,9 +155,7 @@ from dodopayments import AsyncDodoPayments
155
155
 
156
156
  async def main() -> None:
157
157
  async with AsyncDodoPayments(
158
- bearer_token=os.environ.get(
159
- "DODO_PAYMENTS_API_KEY"
160
- ), # This is the default and can be omitted
158
+ bearer_token="My Bearer Token",
161
159
  http_client=DefaultAioHttpClient(),
162
160
  ) as client:
163
161
  payment = await client.payments.create(
@@ -1,6 +1,7 @@
1
1
  # Dodo Payments Python API library
2
2
 
3
- [![PyPI version](<https://img.shields.io/pypi/v/dodopayments.svg?label=pypi%20(stable)>)](https://pypi.org/project/dodopayments/)
3
+ <!-- prettier-ignore -->
4
+ [![PyPI version](https://img.shields.io/pypi/v/dodopayments.svg?label=pypi%20(stable))](https://pypi.org/project/dodopayments/)
4
5
 
5
6
  The [Dodo Payments](https://dodopayments.com) Python library provides convenient access to the Dodo Payments REST API from any Python 3.8+
6
7
  application. The library includes type definitions for all request params and response fields,
@@ -112,7 +113,6 @@ pip install dodopayments[aiohttp]
112
113
  Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
113
114
 
114
115
  ```python
115
- import os
116
116
  import asyncio
117
117
  from dodopayments import DefaultAioHttpClient
118
118
  from dodopayments import AsyncDodoPayments
@@ -120,9 +120,7 @@ from dodopayments import AsyncDodoPayments
120
120
 
121
121
  async def main() -> None:
122
122
  async with AsyncDodoPayments(
123
- bearer_token=os.environ.get(
124
- "DODO_PAYMENTS_API_KEY"
125
- ), # This is the default and can be omitted
123
+ bearer_token="My Bearer Token",
126
124
  http_client=DefaultAioHttpClient(),
127
125
  ) as client:
128
126
  payment = await client.payments.create(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dodopayments"
3
- version = "1.38.1"
3
+ version = "1.39.0"
4
4
  description = "The official Python library for the Dodo Payments API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -39,7 +39,7 @@ Homepage = "https://github.com/dodopayments/dodopayments-python"
39
39
  Repository = "https://github.com/dodopayments/dodopayments-python"
40
40
 
41
41
  [project.optional-dependencies]
42
- aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.6"]
42
+ aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
43
43
 
44
44
  [tool.rye]
45
45
  managed = true
@@ -529,6 +529,15 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
529
529
  # work around https://github.com/encode/httpx/discussions/2880
530
530
  kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
531
531
 
532
+ is_body_allowed = options.method.lower() != "get"
533
+
534
+ if is_body_allowed:
535
+ kwargs["json"] = json_data if is_given(json_data) else None
536
+ kwargs["files"] = files
537
+ else:
538
+ headers.pop("Content-Type", None)
539
+ kwargs.pop("data", None)
540
+
532
541
  # TODO: report this error to httpx
533
542
  return self._client.build_request( # pyright: ignore[reportUnknownMemberType]
534
543
  headers=headers,
@@ -540,8 +549,6 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
540
549
  # so that passing a `TypedDict` doesn't cause an error.
541
550
  # https://github.com/microsoft/pyright/issues/3526#event-6715453066
542
551
  params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None,
543
- json=json_data if is_given(json_data) else None,
544
- files=files,
545
552
  **kwargs,
546
553
  )
547
554
 
@@ -2,9 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import inspect
5
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast
5
+ from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
6
  from datetime import date, datetime
7
7
  from typing_extensions import (
8
+ List,
8
9
  Unpack,
9
10
  Literal,
10
11
  ClassVar,
@@ -366,7 +367,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
366
367
  if type_ is None:
367
368
  raise RuntimeError(f"Unexpected field type is None for {key}")
368
369
 
369
- return construct_type(value=value, type_=type_)
370
+ return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
370
371
 
371
372
 
372
373
  def is_basemodel(type_: type) -> bool:
@@ -420,7 +421,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T:
420
421
  return cast(_T, construct_type(value=value, type_=type_))
421
422
 
422
423
 
423
- def construct_type(*, value: object, type_: object) -> object:
424
+ def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object:
424
425
  """Loose coercion to the expected type with construction of nested values.
425
426
 
426
427
  If the given value does not match the expected type then it is returned as-is.
@@ -438,8 +439,10 @@ def construct_type(*, value: object, type_: object) -> object:
438
439
  type_ = type_.__value__ # type: ignore[unreachable]
439
440
 
440
441
  # unwrap `Annotated[T, ...]` -> `T`
441
- if is_annotated_type(type_):
442
- meta: tuple[Any, ...] = get_args(type_)[1:]
442
+ if metadata is not None:
443
+ meta: tuple[Any, ...] = tuple(metadata)
444
+ elif is_annotated_type(type_):
445
+ meta = get_args(type_)[1:]
443
446
  type_ = extract_type_arg(type_, 0)
444
447
  else:
445
448
  meta = tuple()
@@ -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.38.1" # x-release-please-version
4
+ __version__ = "1.39.0" # x-release-please-version
@@ -388,7 +388,9 @@ class SubscriptionsResource(SyncAPIResource):
388
388
  subscription_id: str,
389
389
  *,
390
390
  product_price: int,
391
+ adaptive_currency_fees_inclusive: Optional[bool] | NotGiven = NOT_GIVEN,
391
392
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
393
+ product_currency: Optional[Currency] | NotGiven = NOT_GIVEN,
392
394
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
393
395
  # The extra values given here take precedence over values defined on the client or passed to this method.
394
396
  extra_headers: Headers | None = None,
@@ -402,9 +404,16 @@ class SubscriptionsResource(SyncAPIResource):
402
404
  Represented in the lowest denomination of the currency (e.g.,
403
405
  cents for USD). For example, to charge $1.00, pass `100`.
404
406
 
407
+ adaptive_currency_fees_inclusive: Whether adaptive currency fees should be included in the product_price (true) or
408
+ added on top (false). This field is ignored if adaptive pricing is not enabled
409
+ for the business.
410
+
405
411
  metadata: Metadata for the payment. If not passed, the metadata of the subscription will
406
412
  be taken
407
413
 
414
+ product_currency: Optional currency of the product price. If not specified, defaults to the
415
+ currency of the product.
416
+
408
417
  extra_headers: Send extra headers
409
418
 
410
419
  extra_query: Add additional query parameters to the request
@@ -420,7 +429,9 @@ class SubscriptionsResource(SyncAPIResource):
420
429
  body=maybe_transform(
421
430
  {
422
431
  "product_price": product_price,
432
+ "adaptive_currency_fees_inclusive": adaptive_currency_fees_inclusive,
423
433
  "metadata": metadata,
434
+ "product_currency": product_currency,
424
435
  },
425
436
  subscription_charge_params.SubscriptionChargeParams,
426
437
  ),
@@ -778,7 +789,9 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
778
789
  subscription_id: str,
779
790
  *,
780
791
  product_price: int,
792
+ adaptive_currency_fees_inclusive: Optional[bool] | NotGiven = NOT_GIVEN,
781
793
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
794
+ product_currency: Optional[Currency] | NotGiven = NOT_GIVEN,
782
795
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
783
796
  # The extra values given here take precedence over values defined on the client or passed to this method.
784
797
  extra_headers: Headers | None = None,
@@ -792,9 +805,16 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
792
805
  Represented in the lowest denomination of the currency (e.g.,
793
806
  cents for USD). For example, to charge $1.00, pass `100`.
794
807
 
808
+ adaptive_currency_fees_inclusive: Whether adaptive currency fees should be included in the product_price (true) or
809
+ added on top (false). This field is ignored if adaptive pricing is not enabled
810
+ for the business.
811
+
795
812
  metadata: Metadata for the payment. If not passed, the metadata of the subscription will
796
813
  be taken
797
814
 
815
+ product_currency: Optional currency of the product price. If not specified, defaults to the
816
+ currency of the product.
817
+
798
818
  extra_headers: Send extra headers
799
819
 
800
820
  extra_query: Add additional query parameters to the request
@@ -810,7 +830,9 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
810
830
  body=await async_maybe_transform(
811
831
  {
812
832
  "product_price": product_price,
833
+ "adaptive_currency_fees_inclusive": adaptive_currency_fees_inclusive,
813
834
  "metadata": metadata,
835
+ "product_currency": product_currency,
814
836
  },
815
837
  subscription_charge_params.SubscriptionChargeParams,
816
838
  ),
@@ -5,6 +5,8 @@ from __future__ import annotations
5
5
  from typing import Dict, Optional
6
6
  from typing_extensions import Required, TypedDict
7
7
 
8
+ from .currency import Currency
9
+
8
10
  __all__ = ["SubscriptionChargeParams"]
9
11
 
10
12
 
@@ -16,8 +18,21 @@ class SubscriptionChargeParams(TypedDict, total=False):
16
18
  For example, to charge $1.00, pass `100`.
17
19
  """
18
20
 
21
+ adaptive_currency_fees_inclusive: Optional[bool]
22
+ """
23
+ Whether adaptive currency fees should be included in the product_price (true) or
24
+ added on top (false). This field is ignored if adaptive pricing is not enabled
25
+ for the business.
26
+ """
27
+
19
28
  metadata: Optional[Dict[str, str]]
20
29
  """Metadata for the payment.
21
30
 
22
31
  If not passed, the metadata of the subscription will be taken
23
32
  """
33
+
34
+ product_currency: Optional[Currency]
35
+ """Optional currency of the product price.
36
+
37
+ If not specified, defaults to the currency of the product.
38
+ """
@@ -109,6 +109,19 @@ class OnDemand(TypedDict, total=False):
109
109
  details for future use.
110
110
  """
111
111
 
112
+ adaptive_currency_fees_inclusive: Optional[bool]
113
+ """
114
+ Whether adaptive currency fees should be included in the product_price (true) or
115
+ added on top (false). This field is ignored if adaptive pricing is not enabled
116
+ for the business.
117
+ """
118
+
119
+ product_currency: Optional[Currency]
120
+ """Optional currency of the product price.
121
+
122
+ If not specified, defaults to the currency of the product.
123
+ """
124
+
112
125
  product_price: Optional[int]
113
126
  """
114
127
  Product price for the initial charge to customer If not specified the stored
@@ -65,6 +65,8 @@ class TestSubscriptions:
65
65
  metadata={"foo": "string"},
66
66
  on_demand={
67
67
  "mandate_only": True,
68
+ "adaptive_currency_fees_inclusive": True,
69
+ "product_currency": "AED",
68
70
  "product_price": 0,
69
71
  },
70
72
  payment_link=True,
@@ -331,7 +333,9 @@ class TestSubscriptions:
331
333
  subscription = client.subscriptions.charge(
332
334
  subscription_id="subscription_id",
333
335
  product_price=0,
336
+ adaptive_currency_fees_inclusive=True,
334
337
  metadata={"foo": "string"},
338
+ product_currency="AED",
335
339
  )
336
340
  assert_matches_type(SubscriptionChargeResponse, subscription, path=["response"])
337
341
 
@@ -416,6 +420,8 @@ class TestAsyncSubscriptions:
416
420
  metadata={"foo": "string"},
417
421
  on_demand={
418
422
  "mandate_only": True,
423
+ "adaptive_currency_fees_inclusive": True,
424
+ "product_currency": "AED",
419
425
  "product_price": 0,
420
426
  },
421
427
  payment_link=True,
@@ -682,7 +688,9 @@ class TestAsyncSubscriptions:
682
688
  subscription = await async_client.subscriptions.charge(
683
689
  subscription_id="subscription_id",
684
690
  product_price=0,
691
+ adaptive_currency_fees_inclusive=True,
685
692
  metadata={"foo": "string"},
693
+ product_currency="AED",
686
694
  )
687
695
  assert_matches_type(SubscriptionChargeResponse, subscription, path=["response"])
688
696
 
@@ -473,7 +473,7 @@ class TestDodoPayments:
473
473
  def test_multipart_repeating_array(self, client: DodoPayments) -> None:
474
474
  request = client._build_request(
475
475
  FinalRequestOptions.construct(
476
- method="get",
476
+ method="post",
477
477
  url="/foo",
478
478
  headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"},
479
479
  json_data={"array": ["foo", "bar"]},
@@ -1389,7 +1389,7 @@ class TestAsyncDodoPayments:
1389
1389
  def test_multipart_repeating_array(self, async_client: AsyncDodoPayments) -> None:
1390
1390
  request = async_client._build_request(
1391
1391
  FinalRequestOptions.construct(
1392
- method="get",
1392
+ method="post",
1393
1393
  url="/foo",
1394
1394
  headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"},
1395
1395
  json_data={"array": ["foo", "bar"]},
@@ -889,3 +889,48 @@ def test_discriminated_union_case() -> None:
889
889
  )
890
890
 
891
891
  assert isinstance(m, ModelB)
892
+
893
+
894
+ def test_nested_discriminated_union() -> None:
895
+ class InnerType1(BaseModel):
896
+ type: Literal["type_1"]
897
+
898
+ class InnerModel(BaseModel):
899
+ inner_value: str
900
+
901
+ class InnerType2(BaseModel):
902
+ type: Literal["type_2"]
903
+ some_inner_model: InnerModel
904
+
905
+ class Type1(BaseModel):
906
+ base_type: Literal["base_type_1"]
907
+ value: Annotated[
908
+ Union[
909
+ InnerType1,
910
+ InnerType2,
911
+ ],
912
+ PropertyInfo(discriminator="type"),
913
+ ]
914
+
915
+ class Type2(BaseModel):
916
+ base_type: Literal["base_type_2"]
917
+
918
+ T = Annotated[
919
+ Union[
920
+ Type1,
921
+ Type2,
922
+ ],
923
+ PropertyInfo(discriminator="base_type"),
924
+ ]
925
+
926
+ model = construct_type(
927
+ type_=T,
928
+ value={
929
+ "base_type": "base_type_1",
930
+ "value": {
931
+ "type": "type_2",
932
+ },
933
+ },
934
+ )
935
+ assert isinstance(model, Type1)
936
+ assert isinstance(model.value, InnerType2)
@@ -1,3 +0,0 @@
1
- {
2
- ".": "1.38.1"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes