dodopayments 1.27.0__tar.gz → 1.30.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 (202) hide show
  1. dodopayments-1.30.0/.release-please-manifest.json +3 -0
  2. {dodopayments-1.27.0 → dodopayments-1.30.0}/CHANGELOG.md +8 -0
  3. {dodopayments-1.27.0 → dodopayments-1.30.0}/PKG-INFO +1 -1
  4. {dodopayments-1.27.0 → dodopayments-1.30.0}/api.md +2 -2
  5. {dodopayments-1.27.0 → dodopayments-1.30.0}/pyproject.toml +1 -1
  6. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_version.py +1 -1
  7. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/customers/customers.py +1 -19
  8. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/subscriptions.py +0 -41
  9. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/__init__.py +0 -2
  10. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment.py +3 -0
  11. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_customers.py +8 -26
  12. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_subscriptions.py +8 -64
  13. dodopayments-1.27.0/.release-please-manifest.json +0 -3
  14. dodopayments-1.27.0/src/dodopayments/types/customer_update_params.py +0 -14
  15. dodopayments-1.27.0/src/dodopayments/types/subscription_change_plan_params.py +0 -30
  16. {dodopayments-1.27.0 → dodopayments-1.30.0}/.gitignore +0 -0
  17. {dodopayments-1.27.0 → dodopayments-1.30.0}/CONTRIBUTING.md +0 -0
  18. {dodopayments-1.27.0 → dodopayments-1.30.0}/LICENSE +0 -0
  19. {dodopayments-1.27.0 → dodopayments-1.30.0}/README.md +0 -0
  20. {dodopayments-1.27.0 → dodopayments-1.30.0}/SECURITY.md +0 -0
  21. {dodopayments-1.27.0 → dodopayments-1.30.0}/bin/check-release-environment +0 -0
  22. {dodopayments-1.27.0 → dodopayments-1.30.0}/bin/publish-pypi +0 -0
  23. {dodopayments-1.27.0 → dodopayments-1.30.0}/examples/.keep +0 -0
  24. {dodopayments-1.27.0 → dodopayments-1.30.0}/mypy.ini +0 -0
  25. {dodopayments-1.27.0 → dodopayments-1.30.0}/noxfile.py +0 -0
  26. {dodopayments-1.27.0 → dodopayments-1.30.0}/release-please-config.json +0 -0
  27. {dodopayments-1.27.0 → dodopayments-1.30.0}/requirements-dev.lock +0 -0
  28. {dodopayments-1.27.0 → dodopayments-1.30.0}/requirements.lock +0 -0
  29. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodo_payments/lib/.keep +0 -0
  30. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/__init__.py +0 -0
  31. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_base_client.py +0 -0
  32. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_client.py +0 -0
  33. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_compat.py +0 -0
  34. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_constants.py +0 -0
  35. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_exceptions.py +0 -0
  36. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_files.py +0 -0
  37. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_models.py +0 -0
  38. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_qs.py +0 -0
  39. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_resource.py +0 -0
  40. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_response.py +0 -0
  41. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_streaming.py +0 -0
  42. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_types.py +0 -0
  43. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/__init__.py +0 -0
  44. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_logs.py +0 -0
  45. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_proxy.py +0 -0
  46. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_reflection.py +0 -0
  47. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_resources_proxy.py +0 -0
  48. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_streams.py +0 -0
  49. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_sync.py +0 -0
  50. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_transform.py +0 -0
  51. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_typing.py +0 -0
  52. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/_utils/_utils.py +0 -0
  53. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/lib/.keep +0 -0
  54. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/pagination.py +0 -0
  55. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/py.typed +0 -0
  56. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/__init__.py +0 -0
  57. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/addons.py +0 -0
  58. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/brands.py +0 -0
  59. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/customers/__init__.py +0 -0
  60. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/customers/customer_portal.py +0 -0
  61. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/discounts.py +0 -0
  62. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/disputes.py +0 -0
  63. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/invoices/__init__.py +0 -0
  64. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/invoices/invoices.py +0 -0
  65. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/invoices/payments.py +0 -0
  66. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/license_key_instances.py +0 -0
  67. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/license_keys.py +0 -0
  68. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/licenses.py +0 -0
  69. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/misc.py +0 -0
  70. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/payments.py +0 -0
  71. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/payouts.py +0 -0
  72. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/products/__init__.py +0 -0
  73. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/products/images.py +0 -0
  74. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/products/products.py +0 -0
  75. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/refunds.py +0 -0
  76. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/resources/webhook_events.py +0 -0
  77. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_cart_response_item.py +0 -0
  78. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_create_params.py +0 -0
  79. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_list_params.py +0 -0
  80. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_response.py +0 -0
  81. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_update_images_response.py +0 -0
  82. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/addon_update_params.py +0 -0
  83. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/attach_existing_customer_param.py +0 -0
  84. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/billing_address.py +0 -0
  85. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/billing_address_param.py +0 -0
  86. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_create_params.py +0 -0
  87. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_create_response.py +0 -0
  88. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_list_response.py +0 -0
  89. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_retrieve_response.py +0 -0
  90. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_update_images_response.py +0 -0
  91. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_update_params.py +0 -0
  92. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/brand_update_response.py +0 -0
  93. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/country_code.py +0 -0
  94. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/create_new_customer_param.py +0 -0
  95. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/currency.py +0 -0
  96. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer.py +0 -0
  97. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer_create_params.py +0 -0
  98. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer_limited_details.py +0 -0
  99. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer_list_params.py +0 -0
  100. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer_portal_session.py +0 -0
  101. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customer_request_param.py +0 -0
  102. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customers/__init__.py +0 -0
  103. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/customers/customer_portal_create_params.py +0 -0
  104. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/discount.py +0 -0
  105. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/discount_create_params.py +0 -0
  106. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/discount_list_params.py +0 -0
  107. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/discount_type.py +0 -0
  108. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/discount_update_params.py +0 -0
  109. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute.py +0 -0
  110. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute_list_params.py +0 -0
  111. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute_list_response.py +0 -0
  112. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute_retrieve_response.py +0 -0
  113. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute_stage.py +0 -0
  114. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/dispute_status.py +0 -0
  115. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/intent_status.py +0 -0
  116. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/invoices/__init__.py +0 -0
  117. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_activate_params.py +0 -0
  118. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_deactivate_params.py +0 -0
  119. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key.py +0 -0
  120. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_duration.py +0 -0
  121. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_duration_param.py +0 -0
  122. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_instance.py +0 -0
  123. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_instance_list_params.py +0 -0
  124. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_instance_update_params.py +0 -0
  125. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_list_params.py +0 -0
  126. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_status.py +0 -0
  127. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_key_update_params.py +0 -0
  128. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_validate_params.py +0 -0
  129. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/license_validate_response.py +0 -0
  130. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/misc_list_supported_countries_response.py +0 -0
  131. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/one_time_product_cart_item.py +0 -0
  132. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/one_time_product_cart_item_param.py +0 -0
  133. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment_create_params.py +0 -0
  134. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment_create_response.py +0 -0
  135. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment_list_params.py +0 -0
  136. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment_list_response.py +0 -0
  137. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payment_retrieve_line_items_response.py +0 -0
  138. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payout_list_params.py +0 -0
  139. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/payout_list_response.py +0 -0
  140. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/price.py +0 -0
  141. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/price_param.py +0 -0
  142. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/product.py +0 -0
  143. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/product_create_params.py +0 -0
  144. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/product_list_params.py +0 -0
  145. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/product_list_response.py +0 -0
  146. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/product_update_params.py +0 -0
  147. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/products/__init__.py +0 -0
  148. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/products/image_update_params.py +0 -0
  149. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/products/image_update_response.py +0 -0
  150. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/refund.py +0 -0
  151. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/refund_create_params.py +0 -0
  152. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/refund_list_params.py +0 -0
  153. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/refund_status.py +0 -0
  154. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription.py +0 -0
  155. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_charge_params.py +0 -0
  156. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_charge_response.py +0 -0
  157. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_create_params.py +0 -0
  158. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_create_response.py +0 -0
  159. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_list_params.py +0 -0
  160. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_list_response.py +0 -0
  161. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_status.py +0 -0
  162. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/subscription_update_params.py +0 -0
  163. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/tax_category.py +0 -0
  164. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/time_interval.py +0 -0
  165. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/webhook_event.py +0 -0
  166. {dodopayments-1.27.0 → dodopayments-1.30.0}/src/dodopayments/types/webhook_event_list_params.py +0 -0
  167. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/__init__.py +0 -0
  168. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/__init__.py +0 -0
  169. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/customers/__init__.py +0 -0
  170. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/customers/test_customer_portal.py +0 -0
  171. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/invoices/__init__.py +0 -0
  172. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/invoices/test_payments.py +0 -0
  173. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/products/__init__.py +0 -0
  174. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/products/test_images.py +0 -0
  175. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_addons.py +0 -0
  176. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_brands.py +0 -0
  177. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_discounts.py +0 -0
  178. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_disputes.py +0 -0
  179. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_license_key_instances.py +0 -0
  180. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_license_keys.py +0 -0
  181. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_licenses.py +0 -0
  182. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_misc.py +0 -0
  183. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_payments.py +0 -0
  184. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_payouts.py +0 -0
  185. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_products.py +0 -0
  186. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_refunds.py +0 -0
  187. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/api_resources/test_webhook_events.py +0 -0
  188. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/conftest.py +0 -0
  189. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/sample_file.txt +0 -0
  190. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_client.py +0 -0
  191. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_deepcopy.py +0 -0
  192. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_extract_files.py +0 -0
  193. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_files.py +0 -0
  194. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_models.py +0 -0
  195. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_qs.py +0 -0
  196. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_required_args.py +0 -0
  197. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_response.py +0 -0
  198. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_streaming.py +0 -0
  199. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_transform.py +0 -0
  200. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_utils/test_proxy.py +0 -0
  201. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/test_utils/test_typing.py +0 -0
  202. {dodopayments-1.27.0 → dodopayments-1.30.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.30.0"
3
+ }
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.30.0 (2025-06-02)
4
+
5
+ Full Changelog: [v1.27.0...v1.30.0](https://github.com/dodopayments/dodopayments-python/compare/v1.27.0...v1.30.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([7bd55ab](https://github.com/dodopayments/dodopayments-python/commit/7bd55ab6d9cf1671a0f5c5b38132a87a997fd25f))
10
+
3
11
  ## 1.27.0 (2025-05-26)
4
12
 
5
13
  Full Changelog: [v1.25.0...v1.27.0](https://github.com/dodopayments/dodopayments-python/compare/v1.25.0...v1.27.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dodopayments
3
- Version: 1.27.0
3
+ Version: 1.30.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
@@ -47,7 +47,7 @@ Methods:
47
47
  - <code title="get /subscriptions/{subscription_id}">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">retrieve</a>(subscription_id) -> <a href="./src/dodopayments/types/subscription.py">Subscription</a></code>
48
48
  - <code title="patch /subscriptions/{subscription_id}">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">update</a>(subscription_id, \*\*<a href="src/dodopayments/types/subscription_update_params.py">params</a>) -> <a href="./src/dodopayments/types/subscription.py">Subscription</a></code>
49
49
  - <code title="get /subscriptions">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">list</a>(\*\*<a href="src/dodopayments/types/subscription_list_params.py">params</a>) -> <a href="./src/dodopayments/types/subscription_list_response.py">SyncDefaultPageNumberPagination[SubscriptionListResponse]</a></code>
50
- - <code title="post /subscriptions/{subscription_id}/change-plan">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">change_plan</a>(subscription_id, \*\*<a href="src/dodopayments/types/subscription_change_plan_params.py">params</a>) -> None</code>
50
+ - <code title="post /subscriptions/{subscription_id}/change-plan">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">change_plan</a>(subscription_id) -> None</code>
51
51
  - <code title="post /subscriptions/{subscription_id}/charge">client.subscriptions.<a href="./src/dodopayments/resources/subscriptions.py">charge</a>(subscription_id, \*\*<a href="src/dodopayments/types/subscription_charge_params.py">params</a>) -> <a href="./src/dodopayments/types/subscription_charge_response.py">SubscriptionChargeResponse</a></code>
52
52
 
53
53
  # Invoices
@@ -112,7 +112,7 @@ Methods:
112
112
 
113
113
  - <code title="post /customers">client.customers.<a href="./src/dodopayments/resources/customers/customers.py">create</a>(\*\*<a href="src/dodopayments/types/customer_create_params.py">params</a>) -> <a href="./src/dodopayments/types/customer.py">Customer</a></code>
114
114
  - <code title="get /customers/{customer_id}">client.customers.<a href="./src/dodopayments/resources/customers/customers.py">retrieve</a>(customer_id) -> <a href="./src/dodopayments/types/customer.py">Customer</a></code>
115
- - <code title="patch /customers/{customer_id}">client.customers.<a href="./src/dodopayments/resources/customers/customers.py">update</a>(customer_id, \*\*<a href="src/dodopayments/types/customer_update_params.py">params</a>) -> <a href="./src/dodopayments/types/customer.py">Customer</a></code>
115
+ - <code title="patch /customers/{customer_id}">client.customers.<a href="./src/dodopayments/resources/customers/customers.py">update</a>(customer_id) -> <a href="./src/dodopayments/types/customer.py">Customer</a></code>
116
116
  - <code title="get /customers">client.customers.<a href="./src/dodopayments/resources/customers/customers.py">list</a>(\*\*<a href="src/dodopayments/types/customer_list_params.py">params</a>) -> <a href="./src/dodopayments/types/customer.py">SyncDefaultPageNumberPagination[Customer]</a></code>
117
117
 
118
118
  ## CustomerPortal
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dodopayments"
3
- version = "1.27.0"
3
+ version = "1.30.0"
4
4
  description = "The official Python library for the Dodo Payments API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -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.27.0" # x-release-please-version
4
+ __version__ = "1.30.0" # x-release-please-version
@@ -6,7 +6,7 @@ from typing import Optional
6
6
 
7
7
  import httpx
8
8
 
9
- from ...types import customer_list_params, customer_create_params, customer_update_params
9
+ from ...types import customer_list_params, customer_create_params
10
10
  from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
11
11
  from ..._utils import maybe_transform, async_maybe_transform
12
12
  from ..._compat import cached_property
@@ -130,8 +130,6 @@ class CustomersResource(SyncAPIResource):
130
130
  self,
131
131
  customer_id: str,
132
132
  *,
133
- name: Optional[str] | NotGiven = NOT_GIVEN,
134
- phone_number: Optional[str] | NotGiven = NOT_GIVEN,
135
133
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
136
134
  # The extra values given here take precedence over values defined on the client or passed to this method.
137
135
  extra_headers: Headers | None = None,
@@ -153,13 +151,6 @@ class CustomersResource(SyncAPIResource):
153
151
  raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
154
152
  return self._patch(
155
153
  f"/customers/{customer_id}",
156
- body=maybe_transform(
157
- {
158
- "name": name,
159
- "phone_number": phone_number,
160
- },
161
- customer_update_params.CustomerUpdateParams,
162
- ),
163
154
  options=make_request_options(
164
155
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
165
156
  ),
@@ -310,8 +301,6 @@ class AsyncCustomersResource(AsyncAPIResource):
310
301
  self,
311
302
  customer_id: str,
312
303
  *,
313
- name: Optional[str] | NotGiven = NOT_GIVEN,
314
- phone_number: Optional[str] | NotGiven = NOT_GIVEN,
315
304
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
316
305
  # The extra values given here take precedence over values defined on the client or passed to this method.
317
306
  extra_headers: Headers | None = None,
@@ -333,13 +322,6 @@ class AsyncCustomersResource(AsyncAPIResource):
333
322
  raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
334
323
  return await self._patch(
335
324
  f"/customers/{customer_id}",
336
- body=await async_maybe_transform(
337
- {
338
- "name": name,
339
- "phone_number": phone_number,
340
- },
341
- customer_update_params.CustomerUpdateParams,
342
- ),
343
325
  options=make_request_options(
344
326
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
345
327
  ),
@@ -15,7 +15,6 @@ from ..types import (
15
15
  subscription_charge_params,
16
16
  subscription_create_params,
17
17
  subscription_update_params,
18
- subscription_change_plan_params,
19
18
  )
20
19
  from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
21
20
  from .._utils import maybe_transform, async_maybe_transform
@@ -321,10 +320,6 @@ class SubscriptionsResource(SyncAPIResource):
321
320
  self,
322
321
  subscription_id: str,
323
322
  *,
324
- product_id: str,
325
- proration_billing_mode: Literal["prorated_immediately"],
326
- quantity: int,
327
- addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
328
323
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
329
324
  # The extra values given here take precedence over values defined on the client or passed to this method.
330
325
  extra_headers: Headers | None = None,
@@ -334,13 +329,6 @@ class SubscriptionsResource(SyncAPIResource):
334
329
  ) -> None:
335
330
  """
336
331
  Args:
337
- product_id: Unique identifier of the product to subscribe to
338
-
339
- quantity: Number of units to subscribe for. Must be at least 1.
340
-
341
- addons: Addons for the new plan. Note : Leaving this empty would remove any existing
342
- addons
343
-
344
332
  extra_headers: Send extra headers
345
333
 
346
334
  extra_query: Add additional query parameters to the request
@@ -354,15 +342,6 @@ class SubscriptionsResource(SyncAPIResource):
354
342
  extra_headers = {"Accept": "*/*", **(extra_headers or {})}
355
343
  return self._post(
356
344
  f"/subscriptions/{subscription_id}/change-plan",
357
- body=maybe_transform(
358
- {
359
- "product_id": product_id,
360
- "proration_billing_mode": proration_billing_mode,
361
- "quantity": quantity,
362
- "addons": addons,
363
- },
364
- subscription_change_plan_params.SubscriptionChangePlanParams,
365
- ),
366
345
  options=make_request_options(
367
346
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
368
347
  ),
@@ -694,10 +673,6 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
694
673
  self,
695
674
  subscription_id: str,
696
675
  *,
697
- product_id: str,
698
- proration_billing_mode: Literal["prorated_immediately"],
699
- quantity: int,
700
- addons: Optional[Iterable[subscription_change_plan_params.Addon]] | NotGiven = NOT_GIVEN,
701
676
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
702
677
  # The extra values given here take precedence over values defined on the client or passed to this method.
703
678
  extra_headers: Headers | None = None,
@@ -707,13 +682,6 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
707
682
  ) -> None:
708
683
  """
709
684
  Args:
710
- product_id: Unique identifier of the product to subscribe to
711
-
712
- quantity: Number of units to subscribe for. Must be at least 1.
713
-
714
- addons: Addons for the new plan. Note : Leaving this empty would remove any existing
715
- addons
716
-
717
685
  extra_headers: Send extra headers
718
686
 
719
687
  extra_query: Add additional query parameters to the request
@@ -727,15 +695,6 @@ class AsyncSubscriptionsResource(AsyncAPIResource):
727
695
  extra_headers = {"Accept": "*/*", **(extra_headers or {})}
728
696
  return await self._post(
729
697
  f"/subscriptions/{subscription_id}/change-plan",
730
- body=await async_maybe_transform(
731
- {
732
- "product_id": product_id,
733
- "proration_billing_mode": proration_billing_mode,
734
- "quantity": quantity,
735
- "addons": addons,
736
- },
737
- subscription_change_plan_params.SubscriptionChangePlanParams,
738
- ),
739
698
  options=make_request_options(
740
699
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
741
700
  ),
@@ -54,7 +54,6 @@ from .product_list_response import ProductListResponse as ProductListResponse
54
54
  from .product_update_params import ProductUpdateParams as ProductUpdateParams
55
55
  from .customer_create_params import CustomerCreateParams as CustomerCreateParams
56
56
  from .customer_request_param import CustomerRequestParam as CustomerRequestParam
57
- from .customer_update_params import CustomerUpdateParams as CustomerUpdateParams
58
57
  from .discount_create_params import DiscountCreateParams as DiscountCreateParams
59
58
  from .discount_update_params import DiscountUpdateParams as DiscountUpdateParams
60
59
  from .brand_retrieve_response import BrandRetrieveResponse as BrandRetrieveResponse
@@ -83,7 +82,6 @@ from .brand_update_images_response import BrandUpdateImagesResponse as BrandUpda
83
82
  from .subscription_charge_response import SubscriptionChargeResponse as SubscriptionChargeResponse
84
83
  from .subscription_create_response import SubscriptionCreateResponse as SubscriptionCreateResponse
85
84
  from .attach_existing_customer_param import AttachExistingCustomerParam as AttachExistingCustomerParam
86
- from .subscription_change_plan_params import SubscriptionChangePlanParams as SubscriptionChangePlanParams
87
85
  from .license_key_instance_list_params import LicenseKeyInstanceListParams as LicenseKeyInstanceListParams
88
86
  from .one_time_product_cart_item_param import OneTimeProductCartItemParam as OneTimeProductCartItemParam
89
87
  from .license_key_instance_update_params import LicenseKeyInstanceUpdateParams as LicenseKeyInstanceUpdateParams
@@ -78,6 +78,9 @@ class Payment(BaseModel):
78
78
  discount_id: Optional[str] = None
79
79
  """The discount id if discount is applied"""
80
80
 
81
+ error_code: Optional[str] = None
82
+ """An error code if the payment failed"""
83
+
81
84
  error_message: Optional[str] = None
82
85
  """An error message if the payment failed"""
83
86
 
@@ -102,23 +102,14 @@ class TestCustomers:
102
102
  @parametrize
103
103
  def test_method_update(self, client: DodoPayments) -> None:
104
104
  customer = client.customers.update(
105
- customer_id="customer_id",
106
- )
107
- assert_matches_type(Customer, customer, path=["response"])
108
-
109
- @parametrize
110
- def test_method_update_with_all_params(self, client: DodoPayments) -> None:
111
- customer = client.customers.update(
112
- customer_id="customer_id",
113
- name="name",
114
- phone_number="phone_number",
105
+ "customer_id",
115
106
  )
116
107
  assert_matches_type(Customer, customer, path=["response"])
117
108
 
118
109
  @parametrize
119
110
  def test_raw_response_update(self, client: DodoPayments) -> None:
120
111
  response = client.customers.with_raw_response.update(
121
- customer_id="customer_id",
112
+ "customer_id",
122
113
  )
123
114
 
124
115
  assert response.is_closed is True
@@ -129,7 +120,7 @@ class TestCustomers:
129
120
  @parametrize
130
121
  def test_streaming_response_update(self, client: DodoPayments) -> None:
131
122
  with client.customers.with_streaming_response.update(
132
- customer_id="customer_id",
123
+ "customer_id",
133
124
  ) as response:
134
125
  assert not response.is_closed
135
126
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -143,7 +134,7 @@ class TestCustomers:
143
134
  def test_path_params_update(self, client: DodoPayments) -> None:
144
135
  with pytest.raises(ValueError, match=r"Expected a non-empty value for `customer_id` but received ''"):
145
136
  client.customers.with_raw_response.update(
146
- customer_id="",
137
+ "",
147
138
  )
148
139
 
149
140
  @parametrize
@@ -267,23 +258,14 @@ class TestAsyncCustomers:
267
258
  @parametrize
268
259
  async def test_method_update(self, async_client: AsyncDodoPayments) -> None:
269
260
  customer = await async_client.customers.update(
270
- customer_id="customer_id",
271
- )
272
- assert_matches_type(Customer, customer, path=["response"])
273
-
274
- @parametrize
275
- async def test_method_update_with_all_params(self, async_client: AsyncDodoPayments) -> None:
276
- customer = await async_client.customers.update(
277
- customer_id="customer_id",
278
- name="name",
279
- phone_number="phone_number",
261
+ "customer_id",
280
262
  )
281
263
  assert_matches_type(Customer, customer, path=["response"])
282
264
 
283
265
  @parametrize
284
266
  async def test_raw_response_update(self, async_client: AsyncDodoPayments) -> None:
285
267
  response = await async_client.customers.with_raw_response.update(
286
- customer_id="customer_id",
268
+ "customer_id",
287
269
  )
288
270
 
289
271
  assert response.is_closed is True
@@ -294,7 +276,7 @@ class TestAsyncCustomers:
294
276
  @parametrize
295
277
  async def test_streaming_response_update(self, async_client: AsyncDodoPayments) -> None:
296
278
  async with async_client.customers.with_streaming_response.update(
297
- customer_id="customer_id",
279
+ "customer_id",
298
280
  ) as response:
299
281
  assert not response.is_closed
300
282
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -308,7 +290,7 @@ class TestAsyncCustomers:
308
290
  async def test_path_params_update(self, async_client: AsyncDodoPayments) -> None:
309
291
  with pytest.raises(ValueError, match=r"Expected a non-empty value for `customer_id` but received ''"):
310
292
  await async_client.customers.with_raw_response.update(
311
- customer_id="",
293
+ "",
312
294
  )
313
295
 
314
296
  @parametrize
@@ -254,36 +254,14 @@ class TestSubscriptions:
254
254
  @parametrize
255
255
  def test_method_change_plan(self, client: DodoPayments) -> None:
256
256
  subscription = client.subscriptions.change_plan(
257
- subscription_id="subscription_id",
258
- product_id="product_id",
259
- proration_billing_mode="prorated_immediately",
260
- quantity=0,
261
- )
262
- assert subscription is None
263
-
264
- @parametrize
265
- def test_method_change_plan_with_all_params(self, client: DodoPayments) -> None:
266
- subscription = client.subscriptions.change_plan(
267
- subscription_id="subscription_id",
268
- product_id="product_id",
269
- proration_billing_mode="prorated_immediately",
270
- quantity=0,
271
- addons=[
272
- {
273
- "addon_id": "addon_id",
274
- "quantity": 0,
275
- }
276
- ],
257
+ "subscription_id",
277
258
  )
278
259
  assert subscription is None
279
260
 
280
261
  @parametrize
281
262
  def test_raw_response_change_plan(self, client: DodoPayments) -> None:
282
263
  response = client.subscriptions.with_raw_response.change_plan(
283
- subscription_id="subscription_id",
284
- product_id="product_id",
285
- proration_billing_mode="prorated_immediately",
286
- quantity=0,
264
+ "subscription_id",
287
265
  )
288
266
 
289
267
  assert response.is_closed is True
@@ -294,10 +272,7 @@ class TestSubscriptions:
294
272
  @parametrize
295
273
  def test_streaming_response_change_plan(self, client: DodoPayments) -> None:
296
274
  with client.subscriptions.with_streaming_response.change_plan(
297
- subscription_id="subscription_id",
298
- product_id="product_id",
299
- proration_billing_mode="prorated_immediately",
300
- quantity=0,
275
+ "subscription_id",
301
276
  ) as response:
302
277
  assert not response.is_closed
303
278
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -311,10 +286,7 @@ class TestSubscriptions:
311
286
  def test_path_params_change_plan(self, client: DodoPayments) -> None:
312
287
  with pytest.raises(ValueError, match=r"Expected a non-empty value for `subscription_id` but received ''"):
313
288
  client.subscriptions.with_raw_response.change_plan(
314
- subscription_id="",
315
- product_id="product_id",
316
- proration_billing_mode="prorated_immediately",
317
- quantity=0,
289
+ "",
318
290
  )
319
291
 
320
292
  @parametrize
@@ -602,36 +574,14 @@ class TestAsyncSubscriptions:
602
574
  @parametrize
603
575
  async def test_method_change_plan(self, async_client: AsyncDodoPayments) -> None:
604
576
  subscription = await async_client.subscriptions.change_plan(
605
- subscription_id="subscription_id",
606
- product_id="product_id",
607
- proration_billing_mode="prorated_immediately",
608
- quantity=0,
609
- )
610
- assert subscription is None
611
-
612
- @parametrize
613
- async def test_method_change_plan_with_all_params(self, async_client: AsyncDodoPayments) -> None:
614
- subscription = await async_client.subscriptions.change_plan(
615
- subscription_id="subscription_id",
616
- product_id="product_id",
617
- proration_billing_mode="prorated_immediately",
618
- quantity=0,
619
- addons=[
620
- {
621
- "addon_id": "addon_id",
622
- "quantity": 0,
623
- }
624
- ],
577
+ "subscription_id",
625
578
  )
626
579
  assert subscription is None
627
580
 
628
581
  @parametrize
629
582
  async def test_raw_response_change_plan(self, async_client: AsyncDodoPayments) -> None:
630
583
  response = await async_client.subscriptions.with_raw_response.change_plan(
631
- subscription_id="subscription_id",
632
- product_id="product_id",
633
- proration_billing_mode="prorated_immediately",
634
- quantity=0,
584
+ "subscription_id",
635
585
  )
636
586
 
637
587
  assert response.is_closed is True
@@ -642,10 +592,7 @@ class TestAsyncSubscriptions:
642
592
  @parametrize
643
593
  async def test_streaming_response_change_plan(self, async_client: AsyncDodoPayments) -> None:
644
594
  async with async_client.subscriptions.with_streaming_response.change_plan(
645
- subscription_id="subscription_id",
646
- product_id="product_id",
647
- proration_billing_mode="prorated_immediately",
648
- quantity=0,
595
+ "subscription_id",
649
596
  ) as response:
650
597
  assert not response.is_closed
651
598
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -659,10 +606,7 @@ class TestAsyncSubscriptions:
659
606
  async def test_path_params_change_plan(self, async_client: AsyncDodoPayments) -> None:
660
607
  with pytest.raises(ValueError, match=r"Expected a non-empty value for `subscription_id` but received ''"):
661
608
  await async_client.subscriptions.with_raw_response.change_plan(
662
- subscription_id="",
663
- product_id="product_id",
664
- proration_billing_mode="prorated_immediately",
665
- quantity=0,
609
+ "",
666
610
  )
667
611
 
668
612
  @parametrize
@@ -1,3 +0,0 @@
1
- {
2
- ".": "1.27.0"
3
- }
@@ -1,14 +0,0 @@
1
- # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Optional
6
- from typing_extensions import TypedDict
7
-
8
- __all__ = ["CustomerUpdateParams"]
9
-
10
-
11
- class CustomerUpdateParams(TypedDict, total=False):
12
- name: Optional[str]
13
-
14
- phone_number: Optional[str]
@@ -1,30 +0,0 @@
1
- # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Iterable, Optional
6
- from typing_extensions import Literal, Required, TypedDict
7
-
8
- __all__ = ["SubscriptionChangePlanParams", "Addon"]
9
-
10
-
11
- class SubscriptionChangePlanParams(TypedDict, total=False):
12
- product_id: Required[str]
13
- """Unique identifier of the product to subscribe to"""
14
-
15
- proration_billing_mode: Required[Literal["prorated_immediately"]]
16
-
17
- quantity: Required[int]
18
- """Number of units to subscribe for. Must be at least 1."""
19
-
20
- addons: Optional[Iterable[Addon]]
21
- """
22
- Addons for the new plan. Note : Leaving this empty would remove any existing
23
- addons
24
- """
25
-
26
-
27
- class Addon(TypedDict, total=False):
28
- addon_id: Required[str]
29
-
30
- quantity: Required[int]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes