paddle-python-sdk 0.1.0__py3-none-any.whl

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.
Files changed (517) hide show
  1. examples/__init__.py +0 -0
  2. examples/catalog_management.py +166 -0
  3. examples/event_polling.py +56 -0
  4. examples/get_products.py +46 -0
  5. examples/logger.py +31 -0
  6. paddle_billing/Client.py +201 -0
  7. paddle_billing/ConditionallyRemoveImportMeta.py +14 -0
  8. paddle_billing/Entities/Address.py +44 -0
  9. paddle_billing/Entities/Adjustment.py +45 -0
  10. paddle_billing/Entities/Adjustments/AdjustmentCustomerBalance.py +18 -0
  11. paddle_billing/Entities/Adjustments/AdjustmentItem.py +26 -0
  12. paddle_billing/Entities/Adjustments/__init__.py +2 -0
  13. paddle_billing/Entities/Business.py +38 -0
  14. paddle_billing/Entities/Collections/AddressCollection.py +18 -0
  15. paddle_billing/Entities/Collections/AdjustmentCollection.py +18 -0
  16. paddle_billing/Entities/Collections/BusinessCollection.py +18 -0
  17. paddle_billing/Entities/Collections/Collection.py +47 -0
  18. paddle_billing/Entities/Collections/CreditBalanceCollection.py +18 -0
  19. paddle_billing/Entities/Collections/CustomerCollection.py +18 -0
  20. paddle_billing/Entities/Collections/DiscountCollection.py +18 -0
  21. paddle_billing/Entities/Collections/EventCollection.py +18 -0
  22. paddle_billing/Entities/Collections/EventTypeCollection.py +18 -0
  23. paddle_billing/Entities/Collections/NotificationCollection.py +18 -0
  24. paddle_billing/Entities/Collections/NotificationLogCollection.py +18 -0
  25. paddle_billing/Entities/Collections/NotificationSettingCollection.py +18 -0
  26. paddle_billing/Entities/Collections/Paginator.py +29 -0
  27. paddle_billing/Entities/Collections/PriceCollection.py +18 -0
  28. paddle_billing/Entities/Collections/ProductCollection.py +18 -0
  29. paddle_billing/Entities/Collections/ReportCollection.py +18 -0
  30. paddle_billing/Entities/Collections/SubscriptionCollection.py +18 -0
  31. paddle_billing/Entities/Collections/SubscriptionPreviewCollection.py +18 -0
  32. paddle_billing/Entities/Collections/TransactionCollection.py +18 -0
  33. paddle_billing/Entities/Collections/TransactionPreviewCollection.py +18 -0
  34. paddle_billing/Entities/Collections/TransactionsDataCollection.py +18 -0
  35. paddle_billing/Entities/Collections/__init__.py +21 -0
  36. paddle_billing/Entities/CreditBalance.py +22 -0
  37. paddle_billing/Entities/Customer.py +36 -0
  38. paddle_billing/Entities/DateTime.py +43 -0
  39. paddle_billing/Entities/Discount.py +51 -0
  40. paddle_billing/Entities/Discounts/DiscountStatus.py +8 -0
  41. paddle_billing/Entities/Discounts/DiscountType.py +7 -0
  42. paddle_billing/Entities/Discounts/__init__.py +2 -0
  43. paddle_billing/Entities/Entity.py +12 -0
  44. paddle_billing/Entities/Event.py +51 -0
  45. paddle_billing/Entities/EventType.py +23 -0
  46. paddle_billing/Entities/Events/EventTypeName.py +52 -0
  47. paddle_billing/Entities/Events/__init__.py +1 -0
  48. paddle_billing/Entities/Notification.py +42 -0
  49. paddle_billing/Entities/NotificationLog.py +25 -0
  50. paddle_billing/Entities/NotificationSetting.py +34 -0
  51. paddle_billing/Entities/NotificationSettings/NotificationSettingType.py +6 -0
  52. paddle_billing/Entities/NotificationSettings/__init__.py +1 -0
  53. paddle_billing/Entities/Notifications/NotificationOrigin.py +6 -0
  54. paddle_billing/Entities/Notifications/NotificationPayout.py +24 -0
  55. paddle_billing/Entities/Notifications/NotificationPayoutStatus.py +6 -0
  56. paddle_billing/Entities/Notifications/NotificationStatus.py +8 -0
  57. paddle_billing/Entities/Notifications/__init__.py +4 -0
  58. paddle_billing/Entities/Price.py +68 -0
  59. paddle_billing/Entities/PricePreview.py +34 -0
  60. paddle_billing/Entities/PricingPreviews/PricePreviewDetails.py +15 -0
  61. paddle_billing/Entities/PricingPreviews/PricePreviewDiscounts.py +20 -0
  62. paddle_billing/Entities/PricingPreviews/PricePreviewItem.py +16 -0
  63. paddle_billing/Entities/PricingPreviews/PricePreviewLineItem.py +38 -0
  64. paddle_billing/Entities/PricingPreviews/PricePreviewTotalsFormatted.py +20 -0
  65. paddle_billing/Entities/PricingPreviews/PricePreviewUnitTotalsFormatted.py +20 -0
  66. paddle_billing/Entities/PricingPreviews/__init__.py +6 -0
  67. paddle_billing/Entities/Product.py +45 -0
  68. paddle_billing/Entities/Report.py +32 -0
  69. paddle_billing/Entities/ReportCSV.py +13 -0
  70. paddle_billing/Entities/Reports/ReportFilter.py +20 -0
  71. paddle_billing/Entities/Reports/ReportFilterName.py +17 -0
  72. paddle_billing/Entities/Reports/ReportFilterOperator.py +6 -0
  73. paddle_billing/Entities/Reports/ReportStatus.py +8 -0
  74. paddle_billing/Entities/Reports/ReportType.py +10 -0
  75. paddle_billing/Entities/Reports/__init__.py +5 -0
  76. paddle_billing/Entities/Shared/Action.py +10 -0
  77. paddle_billing/Entities/Shared/AddressPreview.py +18 -0
  78. paddle_billing/Entities/Shared/AdjustmentItemTotals.py +18 -0
  79. paddle_billing/Entities/Shared/AdjustmentProration.py +18 -0
  80. paddle_billing/Entities/Shared/AdjustmentStatus.py +8 -0
  81. paddle_billing/Entities/Shared/AdjustmentTimePeriod.py +17 -0
  82. paddle_billing/Entities/Shared/AdjustmentTotals.py +26 -0
  83. paddle_billing/Entities/Shared/AdjustmentType.py +8 -0
  84. paddle_billing/Entities/Shared/AvailablePaymentMethods.py +11 -0
  85. paddle_billing/Entities/Shared/BillingDetails.py +22 -0
  86. paddle_billing/Entities/Shared/BillingDetailsUpdate.py +22 -0
  87. paddle_billing/Entities/Shared/Card.py +24 -0
  88. paddle_billing/Entities/Shared/CatalogType.py +6 -0
  89. paddle_billing/Entities/Shared/ChargebackFee.py +18 -0
  90. paddle_billing/Entities/Shared/Checkout.py +12 -0
  91. paddle_billing/Entities/Shared/CollectionMode.py +6 -0
  92. paddle_billing/Entities/Shared/Contacts.py +16 -0
  93. paddle_billing/Entities/Shared/CountryCode.py +233 -0
  94. paddle_billing/Entities/Shared/CurrencyCode.py +34 -0
  95. paddle_billing/Entities/Shared/CurrencyCodeAdjustments.py +7 -0
  96. paddle_billing/Entities/Shared/CurrencyCodePayouts.py +17 -0
  97. paddle_billing/Entities/Shared/CustomData.py +10 -0
  98. paddle_billing/Entities/Shared/Data.py +9 -0
  99. paddle_billing/Entities/Shared/ErrorCode.py +21 -0
  100. paddle_billing/Entities/Shared/ImportMeta.py +16 -0
  101. paddle_billing/Entities/Shared/Interval.py +8 -0
  102. paddle_billing/Entities/Shared/Meta.py +7 -0
  103. paddle_billing/Entities/Shared/MetaPaginated.py +18 -0
  104. paddle_billing/Entities/Shared/MethodDetails.py +19 -0
  105. paddle_billing/Entities/Shared/Money.py +28 -0
  106. paddle_billing/Entities/Shared/Original.py +18 -0
  107. paddle_billing/Entities/Shared/Pagination.py +20 -0
  108. paddle_billing/Entities/Shared/PaymentAttemptStatus.py +13 -0
  109. paddle_billing/Entities/Shared/PaymentMethodType.py +14 -0
  110. paddle_billing/Entities/Shared/PayoutTotalsAdjustment.py +29 -0
  111. paddle_billing/Entities/Shared/PriceQuantity.py +16 -0
  112. paddle_billing/Entities/Shared/Status.py +6 -0
  113. paddle_billing/Entities/Shared/TaxCategory.py +13 -0
  114. paddle_billing/Entities/Shared/TaxMode.py +7 -0
  115. paddle_billing/Entities/Shared/TaxRatesUsed.py +18 -0
  116. paddle_billing/Entities/Shared/TimePeriod.py +18 -0
  117. paddle_billing/Entities/Shared/Totals.py +20 -0
  118. paddle_billing/Entities/Shared/TransactionDetailsPreview.py +22 -0
  119. paddle_billing/Entities/Shared/TransactionLineItemPreview.py +28 -0
  120. paddle_billing/Entities/Shared/TransactionOrigin.py +10 -0
  121. paddle_billing/Entities/Shared/TransactionPaymentAttempt.py +35 -0
  122. paddle_billing/Entities/Shared/TransactionPayoutTotals.py +36 -0
  123. paddle_billing/Entities/Shared/TransactionPayoutTotalsAdjusted.py +29 -0
  124. paddle_billing/Entities/Shared/TransactionStatus.py +11 -0
  125. paddle_billing/Entities/Shared/TransactionTotals.py +36 -0
  126. paddle_billing/Entities/Shared/TransactionTotalsAdjusted.py +28 -0
  127. paddle_billing/Entities/Shared/UnitPriceOverride.py +19 -0
  128. paddle_billing/Entities/Shared/UnitTotals.py +20 -0
  129. paddle_billing/Entities/Shared/__init__.py +56 -0
  130. paddle_billing/Entities/Subscription.py +86 -0
  131. paddle_billing/Entities/SubscriptionPreview.py +79 -0
  132. paddle_billing/Entities/Subscriptions/SubscriptionAdjustmentItem.py +24 -0
  133. paddle_billing/Entities/Subscriptions/SubscriptionAdjustmentPreview.py +22 -0
  134. paddle_billing/Entities/Subscriptions/SubscriptionCharge.py +18 -0
  135. paddle_billing/Entities/Subscriptions/SubscriptionCredit.py +18 -0
  136. paddle_billing/Entities/Subscriptions/SubscriptionDetails.py +34 -0
  137. paddle_billing/Entities/Subscriptions/SubscriptionDiscount.py +19 -0
  138. paddle_billing/Entities/Subscriptions/SubscriptionEffectiveFrom.py +6 -0
  139. paddle_billing/Entities/Subscriptions/SubscriptionItem.py +35 -0
  140. paddle_billing/Entities/Subscriptions/SubscriptionItemStatus.py +7 -0
  141. paddle_billing/Entities/Subscriptions/SubscriptionItems.py +20 -0
  142. paddle_billing/Entities/Subscriptions/SubscriptionItemsWithPrice.py +19 -0
  143. paddle_billing/Entities/Subscriptions/SubscriptionManagementUrls.py +16 -0
  144. paddle_billing/Entities/Subscriptions/SubscriptionNextTransaction.py +23 -0
  145. paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogPrice.py +30 -0
  146. paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogPriceWithProduct.py +32 -0
  147. paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogProduct.py +26 -0
  148. paddle_billing/Entities/Subscriptions/SubscriptionOnPaymentFailure.py +6 -0
  149. paddle_billing/Entities/Subscriptions/SubscriptionPreviewSubscriptionUpdateSummary.py +22 -0
  150. paddle_billing/Entities/Subscriptions/SubscriptionPrice.py +28 -0
  151. paddle_billing/Entities/Subscriptions/SubscriptionProration.py +18 -0
  152. paddle_billing/Entities/Subscriptions/SubscriptionProrationBillingMode.py +9 -0
  153. paddle_billing/Entities/Subscriptions/SubscriptionResult.py +22 -0
  154. paddle_billing/Entities/Subscriptions/SubscriptionResultAction.py +6 -0
  155. paddle_billing/Entities/Subscriptions/SubscriptionResumeEffectiveFrom.py +5 -0
  156. paddle_billing/Entities/Subscriptions/SubscriptionScheduledChange.py +21 -0
  157. paddle_billing/Entities/Subscriptions/SubscriptionScheduledChangeAction.py +7 -0
  158. paddle_billing/Entities/Subscriptions/SubscriptionStatus.py +10 -0
  159. paddle_billing/Entities/Subscriptions/SubscriptionTimePeriod.py +17 -0
  160. paddle_billing/Entities/Subscriptions/SubscriptionTransactionItem.py +23 -0
  161. paddle_billing/Entities/Subscriptions/SubscriptionTransactionLineItem.py +33 -0
  162. paddle_billing/Entities/Subscriptions/SubscriptionUpdateItem.py +16 -0
  163. paddle_billing/Entities/Subscriptions/__init__.py +31 -0
  164. paddle_billing/Entities/Transaction.py +98 -0
  165. paddle_billing/Entities/TransactionData.py +15 -0
  166. paddle_billing/Entities/TransactionPreview.py +40 -0
  167. paddle_billing/Entities/Transactions/TransactionAdjustmentsTotals.py +30 -0
  168. paddle_billing/Entities/Transactions/TransactionBreakdown.py +18 -0
  169. paddle_billing/Entities/Transactions/TransactionCardType.py +14 -0
  170. paddle_billing/Entities/Transactions/TransactionCreateItem.py +16 -0
  171. paddle_billing/Entities/Transactions/TransactionCreateItemWithPrice.py +11 -0
  172. paddle_billing/Entities/Transactions/TransactionDetails.py +32 -0
  173. paddle_billing/Entities/Transactions/TransactionItem.py +24 -0
  174. paddle_billing/Entities/Transactions/TransactionItemPreviewWithNonCatalogPrice.py +21 -0
  175. paddle_billing/Entities/Transactions/TransactionItemPreviewWithPrice.py +24 -0
  176. paddle_billing/Entities/Transactions/TransactionItemPreviewWithPriceId.py +18 -0
  177. paddle_billing/Entities/Transactions/TransactionLineItem.py +35 -0
  178. paddle_billing/Entities/Transactions/TransactionNonCatalogPrice.py +39 -0
  179. paddle_billing/Entities/Transactions/TransactionNonCatalogPriceWithProduct.py +41 -0
  180. paddle_billing/Entities/Transactions/TransactionNonCatalogProduct.py +25 -0
  181. paddle_billing/Entities/Transactions/TransactionProration.py +18 -0
  182. paddle_billing/Entities/Transactions/TransactionTimePeriod.py +17 -0
  183. paddle_billing/Entities/Transactions/TransactionUpdateTransactionItem.py +8 -0
  184. paddle_billing/Entities/Transactions/__init__.py +20 -0
  185. paddle_billing/Entities/__init__.py +0 -0
  186. paddle_billing/EnumStringify.py +2 -0
  187. paddle_billing/Environment.py +14 -0
  188. paddle_billing/Exceptions/ApiError.py +28 -0
  189. paddle_billing/Exceptions/ApiErrors/AddressApiError.py +5 -0
  190. paddle_billing/Exceptions/ApiErrors/AdjustmentApiError.py +5 -0
  191. paddle_billing/Exceptions/ApiErrors/BusinessApiError.py +5 -0
  192. paddle_billing/Exceptions/ApiErrors/CustomerApiError.py +5 -0
  193. paddle_billing/Exceptions/ApiErrors/DiscountApiError.py +5 -0
  194. paddle_billing/Exceptions/ApiErrors/PriceApiError.py +5 -0
  195. paddle_billing/Exceptions/ApiErrors/ProductApiError.py +5 -0
  196. paddle_billing/Exceptions/ApiErrors/SubscriptionApiError.py +5 -0
  197. paddle_billing/Exceptions/ApiErrors/TransactionApiError.py +5 -0
  198. paddle_billing/Exceptions/ApiErrors/__init__.py +0 -0
  199. paddle_billing/Exceptions/FieldError.py +8 -0
  200. paddle_billing/Exceptions/SdkException.py +2 -0
  201. paddle_billing/Exceptions/SdkExceptions/InvalidArgumentException.py +8 -0
  202. paddle_billing/Exceptions/SdkExceptions/MalformedResponse.py +7 -0
  203. paddle_billing/Exceptions/SdkExceptions/__init__.py +0 -0
  204. paddle_billing/Exceptions/__init__.py +0 -0
  205. paddle_billing/FiltersNone.py +8 -0
  206. paddle_billing/FiltersUndefined.py +11 -0
  207. paddle_billing/HasParameters.py +11 -0
  208. paddle_billing/Logger/Formatter.py +18 -0
  209. paddle_billing/Logger/NullHandler.py +6 -0
  210. paddle_billing/Logger/__init__.py +30 -0
  211. paddle_billing/Notifications/Entities/Address.py +44 -0
  212. paddle_billing/Notifications/Entities/Adjustment.py +45 -0
  213. paddle_billing/Notifications/Entities/Adjustments/AdjustmentItem.py +26 -0
  214. paddle_billing/Notifications/Entities/Adjustments/__init__.py +1 -0
  215. paddle_billing/Notifications/Entities/Business.py +39 -0
  216. paddle_billing/Notifications/Entities/Businesses/BusinessesContacts.py +16 -0
  217. paddle_billing/Notifications/Entities/Businesses/__init__.py +1 -0
  218. paddle_billing/Notifications/Entities/Customer.py +36 -0
  219. paddle_billing/Notifications/Entities/DateTime.py +43 -0
  220. paddle_billing/Notifications/Entities/Discount.py +51 -0
  221. paddle_billing/Notifications/Entities/Discounts/DiscountStatus.py +8 -0
  222. paddle_billing/Notifications/Entities/Discounts/DiscountType.py +7 -0
  223. paddle_billing/Notifications/Entities/Discounts/__init__.py +2 -0
  224. paddle_billing/Notifications/Entities/Entity.py +12 -0
  225. paddle_billing/Notifications/Entities/Payout.py +24 -0
  226. paddle_billing/Notifications/Entities/Payouts/PayoutStatus.py +6 -0
  227. paddle_billing/Notifications/Entities/Payouts/__init__.py +1 -0
  228. paddle_billing/Notifications/Entities/Price.py +66 -0
  229. paddle_billing/Notifications/Entities/Product.py +45 -0
  230. paddle_billing/Notifications/Entities/Report.py +32 -0
  231. paddle_billing/Notifications/Entities/Reports/ReportFilter.py +20 -0
  232. paddle_billing/Notifications/Entities/Reports/ReportFilterName.py +17 -0
  233. paddle_billing/Notifications/Entities/Reports/ReportFilterOperator.py +6 -0
  234. paddle_billing/Notifications/Entities/Reports/ReportStatus.py +8 -0
  235. paddle_billing/Notifications/Entities/Reports/ReportType.py +10 -0
  236. paddle_billing/Notifications/Entities/Reports/__init__.py +5 -0
  237. paddle_billing/Notifications/Entities/Shared/Action.py +10 -0
  238. paddle_billing/Notifications/Entities/Shared/AddressPreview.py +18 -0
  239. paddle_billing/Notifications/Entities/Shared/AdjustmentItemTotals.py +18 -0
  240. paddle_billing/Notifications/Entities/Shared/AdjustmentProration.py +18 -0
  241. paddle_billing/Notifications/Entities/Shared/AdjustmentStatus.py +8 -0
  242. paddle_billing/Notifications/Entities/Shared/AdjustmentTimePeriod.py +17 -0
  243. paddle_billing/Notifications/Entities/Shared/AdjustmentTotals.py +26 -0
  244. paddle_billing/Notifications/Entities/Shared/AdjustmentType.py +8 -0
  245. paddle_billing/Notifications/Entities/Shared/AvailablePaymentMethods.py +11 -0
  246. paddle_billing/Notifications/Entities/Shared/BillingDetails.py +22 -0
  247. paddle_billing/Notifications/Entities/Shared/Card.py +24 -0
  248. paddle_billing/Notifications/Entities/Shared/CatalogType.py +6 -0
  249. paddle_billing/Notifications/Entities/Shared/ChargebackFee.py +18 -0
  250. paddle_billing/Notifications/Entities/Shared/Checkout.py +12 -0
  251. paddle_billing/Notifications/Entities/Shared/CollectionMode.py +6 -0
  252. paddle_billing/Notifications/Entities/Shared/CountryCode.py +233 -0
  253. paddle_billing/Notifications/Entities/Shared/CurrencyCode.py +34 -0
  254. paddle_billing/Notifications/Entities/Shared/CurrencyCodeAdjustments.py +7 -0
  255. paddle_billing/Notifications/Entities/Shared/CurrencyCodePayouts.py +17 -0
  256. paddle_billing/Notifications/Entities/Shared/CustomData.py +10 -0
  257. paddle_billing/Notifications/Entities/Shared/Data.py +9 -0
  258. paddle_billing/Notifications/Entities/Shared/ErrorCode.py +21 -0
  259. paddle_billing/Notifications/Entities/Shared/ImportMeta.py +16 -0
  260. paddle_billing/Notifications/Entities/Shared/Interval.py +8 -0
  261. paddle_billing/Notifications/Entities/Shared/MethodDetails.py +19 -0
  262. paddle_billing/Notifications/Entities/Shared/Money.py +28 -0
  263. paddle_billing/Notifications/Entities/Shared/Original.py +18 -0
  264. paddle_billing/Notifications/Entities/Shared/PaymentAttemptStatus.py +13 -0
  265. paddle_billing/Notifications/Entities/Shared/PaymentMethodType.py +15 -0
  266. paddle_billing/Notifications/Entities/Shared/PayoutTotalsAdjustment.py +29 -0
  267. paddle_billing/Notifications/Entities/Shared/PriceQuantity.py +16 -0
  268. paddle_billing/Notifications/Entities/Shared/Status.py +6 -0
  269. paddle_billing/Notifications/Entities/Shared/TaxCategory.py +13 -0
  270. paddle_billing/Notifications/Entities/Shared/TaxMode.py +7 -0
  271. paddle_billing/Notifications/Entities/Shared/TaxRatesUsed.py +18 -0
  272. paddle_billing/Notifications/Entities/Shared/TimePeriod.py +18 -0
  273. paddle_billing/Notifications/Entities/Shared/Totals.py +20 -0
  274. paddle_billing/Notifications/Entities/Shared/TransactionOrigin.py +10 -0
  275. paddle_billing/Notifications/Entities/Shared/TransactionPaymentAttempt.py +35 -0
  276. paddle_billing/Notifications/Entities/Shared/TransactionPayoutTotals.py +36 -0
  277. paddle_billing/Notifications/Entities/Shared/TransactionPayoutTotalsAdjusted.py +29 -0
  278. paddle_billing/Notifications/Entities/Shared/TransactionStatus.py +11 -0
  279. paddle_billing/Notifications/Entities/Shared/TransactionTotals.py +36 -0
  280. paddle_billing/Notifications/Entities/Shared/TransactionTotalsAdjusted.py +28 -0
  281. paddle_billing/Notifications/Entities/Shared/UnitPriceOverride.py +19 -0
  282. paddle_billing/Notifications/Entities/Shared/UnitTotals.py +20 -0
  283. paddle_billing/Notifications/Entities/Shared/__init__.py +46 -0
  284. paddle_billing/Notifications/Entities/Subscription.py +76 -0
  285. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionAdjustmentItem.py +24 -0
  286. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionCharge.py +18 -0
  287. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionCredit.py +18 -0
  288. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionDiscount.py +19 -0
  289. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionEffectiveFrom.py +6 -0
  290. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionItem.py +35 -0
  291. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionItemStatus.py +7 -0
  292. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionOnPaymentFailure.py +6 -0
  293. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionPrice.py +28 -0
  294. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionScheduledChange.py +21 -0
  295. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionScheduledChangeAction.py +7 -0
  296. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionStatus.py +10 -0
  297. paddle_billing/Notifications/Entities/Subscriptions/SubscriptionTimePeriod.py +17 -0
  298. paddle_billing/Notifications/Entities/Subscriptions/__init__.py +13 -0
  299. paddle_billing/Notifications/Entities/Transaction.py +75 -0
  300. paddle_billing/Notifications/Entities/Transactions/TransactionAdjustmentsTotals.py +30 -0
  301. paddle_billing/Notifications/Entities/Transactions/TransactionBreakdown.py +18 -0
  302. paddle_billing/Notifications/Entities/Transactions/TransactionCardType.py +14 -0
  303. paddle_billing/Notifications/Entities/Transactions/TransactionDetails.py +32 -0
  304. paddle_billing/Notifications/Entities/Transactions/TransactionItem.py +24 -0
  305. paddle_billing/Notifications/Entities/Transactions/TransactionLineItem.py +35 -0
  306. paddle_billing/Notifications/Entities/Transactions/TransactionProration.py +18 -0
  307. paddle_billing/Notifications/Entities/Transactions/TransactionTimePeriod.py +17 -0
  308. paddle_billing/Notifications/Entities/Transactions/__init__.py +11 -0
  309. paddle_billing/Notifications/Entities/__init__.py +0 -0
  310. paddle_billing/Notifications/Events/AddressCreated.py +17 -0
  311. paddle_billing/Notifications/Events/AddressUpdated.py +17 -0
  312. paddle_billing/Notifications/Events/AdjustmentCreated.py +17 -0
  313. paddle_billing/Notifications/Events/AdjustmentUpdated.py +17 -0
  314. paddle_billing/Notifications/Events/BusinessCreated.py +17 -0
  315. paddle_billing/Notifications/Events/BusinessUpdated.py +17 -0
  316. paddle_billing/Notifications/Events/CustomerCreated.py +17 -0
  317. paddle_billing/Notifications/Events/CustomerUpdated.py +17 -0
  318. paddle_billing/Notifications/Events/DiscountCreated.py +17 -0
  319. paddle_billing/Notifications/Events/DiscountImported.py +17 -0
  320. paddle_billing/Notifications/Events/DiscountUpdated.py +17 -0
  321. paddle_billing/Notifications/Events/PayoutCreated.py +17 -0
  322. paddle_billing/Notifications/Events/PayoutPaid.py +17 -0
  323. paddle_billing/Notifications/Events/PriceCreated.py +17 -0
  324. paddle_billing/Notifications/Events/PriceUpdated.py +17 -0
  325. paddle_billing/Notifications/Events/ProductCreated.py +17 -0
  326. paddle_billing/Notifications/Events/ProductUpdated.py +17 -0
  327. paddle_billing/Notifications/Events/ReportCreated.py +17 -0
  328. paddle_billing/Notifications/Events/ReportUpdated.py +17 -0
  329. paddle_billing/Notifications/Events/SubscriptionActivated.py +17 -0
  330. paddle_billing/Notifications/Events/SubscriptionCanceled.py +17 -0
  331. paddle_billing/Notifications/Events/SubscriptionCreated.py +17 -0
  332. paddle_billing/Notifications/Events/SubscriptionImported.py +17 -0
  333. paddle_billing/Notifications/Events/SubscriptionPastDue.py +17 -0
  334. paddle_billing/Notifications/Events/SubscriptionPaused.py +17 -0
  335. paddle_billing/Notifications/Events/SubscriptionResumed.py +17 -0
  336. paddle_billing/Notifications/Events/SubscriptionTrialing.py +17 -0
  337. paddle_billing/Notifications/Events/SubscriptionUpdated.py +17 -0
  338. paddle_billing/Notifications/Events/TransactionBilled.py +17 -0
  339. paddle_billing/Notifications/Events/TransactionCanceled.py +17 -0
  340. paddle_billing/Notifications/Events/TransactionCompleted.py +16 -0
  341. paddle_billing/Notifications/Events/TransactionCreated.py +17 -0
  342. paddle_billing/Notifications/Events/TransactionPaid.py +17 -0
  343. paddle_billing/Notifications/Events/TransactionPastDue.py +17 -0
  344. paddle_billing/Notifications/Events/TransactionPaymentFailed.py +17 -0
  345. paddle_billing/Notifications/Events/TransactionReady.py +17 -0
  346. paddle_billing/Notifications/Events/TransactionUpdated.py +17 -0
  347. paddle_billing/Notifications/Events/__init__.py +0 -0
  348. paddle_billing/Notifications/PaddleSignature.py +128 -0
  349. paddle_billing/Notifications/Secret.py +8 -0
  350. paddle_billing/Notifications/Verifier.py +55 -0
  351. paddle_billing/Notifications/__init__.py +3 -0
  352. paddle_billing/Options.py +10 -0
  353. paddle_billing/PaddleStrEnum.py +44 -0
  354. paddle_billing/RecursivelyRemoveKey.py +14 -0
  355. paddle_billing/Resources/Addresses/AddressesClient.py +58 -0
  356. paddle_billing/Resources/Addresses/Operations/CreateAddress.py +20 -0
  357. paddle_billing/Resources/Addresses/Operations/ListAddresses.py +42 -0
  358. paddle_billing/Resources/Addresses/Operations/UpdateAddress.py +21 -0
  359. paddle_billing/Resources/Addresses/Operations/__init__.py +3 -0
  360. paddle_billing/Resources/Addresses/__init__.py +0 -0
  361. paddle_billing/Resources/Adjustments/AdjustmentsClient.py +36 -0
  362. paddle_billing/Resources/Adjustments/Operations/Create/AdjustmentItem.py +11 -0
  363. paddle_billing/Resources/Adjustments/Operations/Create/__init__.py +0 -0
  364. paddle_billing/Resources/Adjustments/Operations/CreateAdjustment.py +28 -0
  365. paddle_billing/Resources/Adjustments/Operations/ListAdjustments.py +60 -0
  366. paddle_billing/Resources/Adjustments/Operations/__init__.py +3 -0
  367. paddle_billing/Resources/Adjustments/__init__.py +0 -0
  368. paddle_billing/Resources/Businesses/BusinessesClient.py +58 -0
  369. paddle_billing/Resources/Businesses/Operations/CreateBusiness.py +17 -0
  370. paddle_billing/Resources/Businesses/Operations/ListBusinesses.py +45 -0
  371. paddle_billing/Resources/Businesses/Operations/UpdateBusiness.py +18 -0
  372. paddle_billing/Resources/Businesses/Operations/__init__.py +3 -0
  373. paddle_billing/Resources/Businesses/__init__.py +0 -0
  374. paddle_billing/Resources/Customers/CustomersClient.py +65 -0
  375. paddle_billing/Resources/Customers/Operations/CreateCustomer.py +16 -0
  376. paddle_billing/Resources/Customers/Operations/ListCreditBalances.py +28 -0
  377. paddle_billing/Resources/Customers/Operations/ListCustomers.py +50 -0
  378. paddle_billing/Resources/Customers/Operations/UpdateCustomer.py +17 -0
  379. paddle_billing/Resources/Customers/Operations/__init__.py +4 -0
  380. paddle_billing/Resources/Customers/__init__.py +0 -0
  381. paddle_billing/Resources/Discounts/DiscountsClient.py +55 -0
  382. paddle_billing/Resources/Discounts/Operations/CreateDiscount.py +24 -0
  383. paddle_billing/Resources/Discounts/Operations/ListDiscounts.py +46 -0
  384. paddle_billing/Resources/Discounts/Operations/UpdateDiscount.py +25 -0
  385. paddle_billing/Resources/Discounts/Operations/__init__.py +3 -0
  386. paddle_billing/Resources/Discounts/__init__.py +0 -0
  387. paddle_billing/Resources/EventTypes/EventTypesClient.py +22 -0
  388. paddle_billing/Resources/EventTypes/__init__.py +0 -0
  389. paddle_billing/Resources/Events/EventsClient.py +26 -0
  390. paddle_billing/Resources/Events/Operations/ListEvents.py +12 -0
  391. paddle_billing/Resources/Events/Operations/__init__.py +1 -0
  392. paddle_billing/Resources/Events/__init__.py +0 -0
  393. paddle_billing/Resources/NotificationLogs/NotificationLogsClient.py +26 -0
  394. paddle_billing/Resources/NotificationLogs/Operations/ListNotificationLogs.py +11 -0
  395. paddle_billing/Resources/NotificationLogs/Operations/__init__.py +1 -0
  396. paddle_billing/Resources/NotificationLogs/__init__.py +0 -0
  397. paddle_billing/Resources/NotificationSettings/NotificationSettingsClient.py +54 -0
  398. paddle_billing/Resources/NotificationSettings/Operations/CreateNotificationSetting.py +21 -0
  399. paddle_billing/Resources/NotificationSettings/Operations/UpdateNotificationSetting.py +20 -0
  400. paddle_billing/Resources/NotificationSettings/Operations/__init__.py +2 -0
  401. paddle_billing/Resources/NotificationSettings/__init__.py +0 -0
  402. paddle_billing/Resources/Notifications/NotificationsClient.py +44 -0
  403. paddle_billing/Resources/Notifications/Operations/ListNotifications.py +58 -0
  404. paddle_billing/Resources/Notifications/Operations/__init__.py +1 -0
  405. paddle_billing/Resources/Notifications/__init__.py +0 -0
  406. paddle_billing/Resources/Prices/Operations/CreatePrice.py +23 -0
  407. paddle_billing/Resources/Prices/Operations/List/Includes.py +5 -0
  408. paddle_billing/Resources/Prices/Operations/List/__init__.py +0 -0
  409. paddle_billing/Resources/Prices/Operations/ListPrices.py +62 -0
  410. paddle_billing/Resources/Prices/Operations/UpdatePrice.py +23 -0
  411. paddle_billing/Resources/Prices/Operations/__init__.py +4 -0
  412. paddle_billing/Resources/Prices/PricesClient.py +65 -0
  413. paddle_billing/Resources/Prices/__init__.py +0 -0
  414. paddle_billing/Resources/PricingPreviews/Operations/PreviewPrice.py +20 -0
  415. paddle_billing/Resources/PricingPreviews/Operations/__init__.py +1 -0
  416. paddle_billing/Resources/PricingPreviews/PricingPreviewsClient.py +20 -0
  417. paddle_billing/Resources/PricingPreviews/__init__.py +0 -0
  418. paddle_billing/Resources/Products/Operations/CreateProduct.py +18 -0
  419. paddle_billing/Resources/Products/Operations/List/Includes.py +5 -0
  420. paddle_billing/Resources/Products/Operations/List/__init__.py +0 -0
  421. paddle_billing/Resources/Products/Operations/ListProducts.py +59 -0
  422. paddle_billing/Resources/Products/Operations/UpdateProduct.py +19 -0
  423. paddle_billing/Resources/Products/Operations/__init__.py +4 -0
  424. paddle_billing/Resources/Products/ProductsClient.py +70 -0
  425. paddle_billing/Resources/Products/__init__.py +0 -0
  426. paddle_billing/Resources/Reports/Operations/CreateReport.py +27 -0
  427. paddle_billing/Resources/Reports/Operations/ListReports.py +35 -0
  428. paddle_billing/Resources/Reports/Operations/__init__.py +2 -0
  429. paddle_billing/Resources/Reports/ReportsClient.py +51 -0
  430. paddle_billing/Resources/Reports/__init__.py +0 -0
  431. paddle_billing/Resources/Shared/Operations/List/Comparator.py +8 -0
  432. paddle_billing/Resources/Shared/Operations/List/DateComparison.py +31 -0
  433. paddle_billing/Resources/Shared/Operations/List/OrderBy.py +21 -0
  434. paddle_billing/Resources/Shared/Operations/List/Pager.py +24 -0
  435. paddle_billing/Resources/Shared/Operations/List/__init__.py +0 -0
  436. paddle_billing/Resources/Shared/Operations/__init__.py +4 -0
  437. paddle_billing/Resources/Shared/__init__.py +0 -0
  438. paddle_billing/Resources/Subscriptions/Operations/CancelSubscription.py +12 -0
  439. paddle_billing/Resources/Subscriptions/Operations/CreateOneTimeCharge.py +22 -0
  440. paddle_billing/Resources/Subscriptions/Operations/Get/Includes.py +6 -0
  441. paddle_billing/Resources/Subscriptions/Operations/Get/__init__.py +0 -0
  442. paddle_billing/Resources/Subscriptions/Operations/ListSubscriptions.py +59 -0
  443. paddle_billing/Resources/Subscriptions/Operations/PauseSubscription.py +19 -0
  444. paddle_billing/Resources/Subscriptions/Operations/PreviewOneTimeCharge.py +22 -0
  445. paddle_billing/Resources/Subscriptions/Operations/PreviewUpdateSubscription.py +37 -0
  446. paddle_billing/Resources/Subscriptions/Operations/ResumeSubscription.py +17 -0
  447. paddle_billing/Resources/Subscriptions/Operations/Update/SubscriptionDiscount.py +9 -0
  448. paddle_billing/Resources/Subscriptions/Operations/Update/__init__.py +0 -0
  449. paddle_billing/Resources/Subscriptions/Operations/UpdateSubscription.py +37 -0
  450. paddle_billing/Resources/Subscriptions/Operations/__init__.py +10 -0
  451. paddle_billing/Resources/Subscriptions/SubscriptionsClient.py +121 -0
  452. paddle_billing/Resources/Subscriptions/__init__.py +0 -0
  453. paddle_billing/Resources/Transactions/Operations/CreateTransaction.py +25 -0
  454. paddle_billing/Resources/Transactions/Operations/List/Includes.py +11 -0
  455. paddle_billing/Resources/Transactions/Operations/List/Origin.py +10 -0
  456. paddle_billing/Resources/Transactions/Operations/List/__init__.py +0 -0
  457. paddle_billing/Resources/Transactions/Operations/ListTransactions.py +86 -0
  458. paddle_billing/Resources/Transactions/Operations/PreviewTransaction.py +24 -0
  459. paddle_billing/Resources/Transactions/Operations/UpdateTransaction.py +25 -0
  460. paddle_billing/Resources/Transactions/Operations/__init__.py +6 -0
  461. paddle_billing/Resources/Transactions/TransactionsClient.py +90 -0
  462. paddle_billing/Resources/Transactions/__init__.py +0 -0
  463. paddle_billing/Resources/__init__.py +0 -0
  464. paddle_billing/ResponseParser.py +65 -0
  465. paddle_billing/Undefined.py +2 -0
  466. paddle_billing/__init__.py +4 -0
  467. paddle_python_sdk-0.1.0.dist-info/LICENSE +190 -0
  468. paddle_python_sdk-0.1.0.dist-info/METADATA +184 -0
  469. paddle_python_sdk-0.1.0.dist-info/RECORD +517 -0
  470. paddle_python_sdk-0.1.0.dist-info/WHEEL +5 -0
  471. paddle_python_sdk-0.1.0.dist-info/top_level.txt +3 -0
  472. tests/Functional/Resources/Addresses/__init__.py +0 -0
  473. tests/Functional/Resources/Addresses/test_AddressesClient.py +274 -0
  474. tests/Functional/Resources/Adjustments/__init__.py +0 -0
  475. tests/Functional/Resources/Adjustments/test_AdjustmentsClient.py +188 -0
  476. tests/Functional/Resources/Businesses/__init__.py +0 -0
  477. tests/Functional/Resources/Businesses/test_BusinessesClient.py +279 -0
  478. tests/Functional/Resources/Customers/__init__.py +0 -0
  479. tests/Functional/Resources/Customers/test_CustomersClient.py +291 -0
  480. tests/Functional/Resources/Discounts/__init__.py +0 -0
  481. tests/Functional/Resources/Discounts/test_DiscountsClient.py +280 -0
  482. tests/Functional/Resources/EventTypes/__init__.py +0 -0
  483. tests/Functional/Resources/EventTypes/test_EventTypesClient.py +43 -0
  484. tests/Functional/Resources/Events/__init__.py +0 -0
  485. tests/Functional/Resources/Events/test_EventsClient.py +64 -0
  486. tests/Functional/Resources/NotificationLogs/__init__.py +0 -0
  487. tests/Functional/Resources/NotificationLogs/test_NotificationLogsClient.py +68 -0
  488. tests/Functional/Resources/NotificationSettings/__init__.py +0 -0
  489. tests/Functional/Resources/NotificationSettings/test_NotificationSettingsClient.py +287 -0
  490. tests/Functional/Resources/Notifications/__init__.py +0 -0
  491. tests/Functional/Resources/Notifications/test_NotificationsClient.py +202 -0
  492. tests/Functional/Resources/Prices/__init__.py +0 -0
  493. tests/Functional/Resources/Prices/test_PricesClient.py +307 -0
  494. tests/Functional/Resources/PricingPreviews/__init__.py +0 -0
  495. tests/Functional/Resources/PricingPreviews/test_PricingPreviewsClient.py +92 -0
  496. tests/Functional/Resources/Products/__init__.py +0 -0
  497. tests/Functional/Resources/Products/test_ProductsClient.py +271 -0
  498. tests/Functional/Resources/Reports/__init__.py +0 -0
  499. tests/Functional/Resources/Reports/test_ReportsClient.py +197 -0
  500. tests/Functional/Resources/Subscriptions/__init__.py +0 -0
  501. tests/Functional/Resources/Subscriptions/test_SubscriptionsClient.py +758 -0
  502. tests/Functional/Resources/Transactions/__init__.py +0 -0
  503. tests/Functional/Resources/Transactions/test_TransactionsClient.py +585 -0
  504. tests/Functional/Resources/__init__.py +0 -0
  505. tests/Functional/__init__.py +0 -0
  506. tests/Unit/Logger/__init__.py +0 -0
  507. tests/Unit/Logger/test_Logger.py +10 -0
  508. tests/Unit/Notification/__init__.py +0 -0
  509. tests/Unit/Notification/test_Verifier.py +63 -0
  510. tests/Unit/PaddleStrEnum/__init__.py +0 -0
  511. tests/Unit/PaddleStrEnum/test_PaddleStrEnum.py +52 -0
  512. tests/Unit/__init__.py +0 -0
  513. tests/Utils/FakeResponse.py +6 -0
  514. tests/Utils/ReadsFixture.py +33 -0
  515. tests/Utils/TestClient.py +48 -0
  516. tests/Utils/__init__.py +1 -0
  517. tests/__init__.py +0 -0
@@ -0,0 +1,59 @@
1
+ from paddle_billing.EnumStringify import enum_stringify
2
+ from paddle_billing.HasParameters import HasParameters
3
+
4
+ from paddle_billing.Entities.Shared import CatalogType, Status, TaxCategory
5
+
6
+ from paddle_billing.Exceptions.SdkExceptions.InvalidArgumentException import InvalidArgumentException
7
+
8
+ from paddle_billing.Resources.Products.Operations.List.Includes import Includes as ProductIncludes
9
+ from paddle_billing.Resources.Shared.Operations import Pager
10
+
11
+
12
+ class ListProducts(HasParameters):
13
+ def __init__(
14
+ self,
15
+ pager: Pager | None = None,
16
+ includes: list[ProductIncludes] = None,
17
+ ids: list[str] = None,
18
+ types: list[CatalogType] = None,
19
+ product_ids: list[str] = None,
20
+ statuses: list[Status] = None,
21
+ tax_categories: list[TaxCategory] = None,
22
+ ):
23
+ self.pager = pager
24
+ self.includes = includes if includes is not None else []
25
+ self.ids = ids if ids is not None else []
26
+ self.types = types if types is not None else []
27
+ self.product_ids = product_ids if product_ids is not None else []
28
+ self.statuses = statuses if statuses is not None else []
29
+ self.tax_categories = tax_categories if tax_categories is not None else []
30
+
31
+ # Validation
32
+ for field_name, field_value, field_type in [
33
+ ('ids', self.ids, str),
34
+ ('includes', self.includes, ProductIncludes),
35
+ ('statuses', self.statuses, Status),
36
+ ('tax_categories', self.tax_categories, TaxCategory),
37
+ ('types', self.types, CatalogType),
38
+ ]:
39
+ invalid_items = [item for item in field_value if not isinstance(item, field_type)]
40
+ if invalid_items:
41
+ raise InvalidArgumentException(field_name, field_type.__name__, invalid_items)
42
+
43
+
44
+ def get_parameters(self) -> dict:
45
+ parameters = {}
46
+ if self.pager:
47
+ parameters.update(self.pager.get_parameters())
48
+ if self.ids:
49
+ parameters['id'] = ','.join(self.ids)
50
+ if self.includes:
51
+ parameters['include'] = ','.join(map(enum_stringify, self.includes))
52
+ if self.statuses:
53
+ parameters['status'] = ','.join(map(enum_stringify, self.statuses))
54
+ if self.tax_categories:
55
+ parameters['tax_category'] = ','.join(map(enum_stringify, self.tax_categories))
56
+ if self.types:
57
+ parameters['type'] = ','.join(map(enum_stringify, self.types))
58
+
59
+ return parameters
@@ -0,0 +1,19 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Undefined import Undefined
4
+ from paddle_billing.Entities.Shared import CatalogType, CustomData, Status, TaxCategory
5
+
6
+
7
+ @dataclass
8
+ class UpdateProduct:
9
+ name: str | Undefined = Undefined()
10
+ description: str | None | Undefined = Undefined()
11
+ type: CatalogType | None | Undefined = Undefined()
12
+ tax_category: TaxCategory | Undefined = Undefined()
13
+ image_url: str | None | Undefined = Undefined()
14
+ custom_data: CustomData | None | Undefined = Undefined()
15
+ status: Status | Undefined = Undefined()
16
+
17
+
18
+ def get_parameters(self) -> dict:
19
+ return asdict(self)
@@ -0,0 +1,4 @@
1
+ from paddle_billing.Resources.Products.Operations.CreateProduct import CreateProduct
2
+ from paddle_billing.Resources.Products.Operations.ListProducts import ListProducts
3
+ from paddle_billing.Resources.Products.Operations.List.Includes import Includes as ProductIncludes
4
+ from paddle_billing.Resources.Products.Operations.UpdateProduct import UpdateProduct
@@ -0,0 +1,70 @@
1
+ from paddle_billing.ResponseParser import ResponseParser
2
+
3
+ from paddle_billing.Entities.Collections import Paginator, ProductCollection
4
+ from paddle_billing.Entities.Product import Product
5
+ from paddle_billing.Entities.Shared import Status
6
+
7
+ from paddle_billing.Exceptions.SdkExceptions.InvalidArgumentException import InvalidArgumentException
8
+
9
+ from paddle_billing.Resources.Products.Operations import CreateProduct, ListProducts, UpdateProduct, ProductIncludes
10
+
11
+ from typing import TYPE_CHECKING
12
+ if TYPE_CHECKING:
13
+ from paddle_billing.Client import Client
14
+
15
+
16
+ class ProductsClient:
17
+ def __init__(self, client: 'Client'):
18
+ self.client = client
19
+ self.response = None
20
+
21
+
22
+ def list(self, operation: ListProducts = None) -> ProductCollection:
23
+ if operation is None:
24
+ operation = ListProducts()
25
+
26
+ self.response = self.client.get_raw('/products', operation.get_parameters())
27
+ parser = ResponseParser(self.response)
28
+
29
+ return ProductCollection.from_list(
30
+ parser.get_data(),
31
+ Paginator(self.client, parser.get_pagination(), ProductCollection)
32
+ )
33
+
34
+
35
+ def get(self, product_id: str, includes = None) -> Product | Product:
36
+ if product_id is None:
37
+ raise ValueError('product_id is required')
38
+ if not isinstance(product_id, str):
39
+ raise ValueError('product_id must be a string')
40
+
41
+ if includes is None:
42
+ includes = []
43
+
44
+ invalid_items = [item for item in includes if not isinstance(item, ProductIncludes)]
45
+ if invalid_items:
46
+ raise InvalidArgumentException('includes', ProductIncludes.__name__, invalid_items)
47
+
48
+ params = {'include': ','.join(include.value for include in includes)} if includes else {}
49
+ self.response = self.client.get_raw(f"/products/{product_id}", params)
50
+ parser = ResponseParser(self.response)
51
+
52
+ return Product.from_dict(parser.get_data())
53
+
54
+
55
+ def create(self, operation: CreateProduct) -> Product:
56
+ self.response = self.client.post_raw('/products', operation.get_parameters())
57
+ parser = ResponseParser(self.response)
58
+
59
+ return Product.from_dict(parser.get_data())
60
+
61
+
62
+ def update(self, product_id: str, operation: UpdateProduct) -> Product:
63
+ self.response = self.client.patch_raw(f"/products/{product_id}", operation.get_parameters())
64
+ parser = ResponseParser(self.response)
65
+
66
+ return Product.from_dict(parser.get_data())
67
+
68
+
69
+ def archive(self, product_id: str) -> Product:
70
+ return self.update(product_id, UpdateProduct(status=Status.Archived))
File without changes
@@ -0,0 +1,27 @@
1
+ from dataclasses import dataclass, field
2
+
3
+ from paddle_billing.Entities.Reports import ReportType, ReportFilter
4
+
5
+ from paddle_billing.Exceptions.SdkExceptions.InvalidArgumentException import InvalidArgumentException
6
+
7
+
8
+ @dataclass
9
+ class CreateReport:
10
+ type: ReportType
11
+ filters: list[ReportFilter] = field(default_factory=list)
12
+
13
+
14
+ def __post_init__(self):
15
+ # Validation
16
+ if any(not isinstance(filter_item, ReportFilter) for filter_item in self.filters):
17
+ invalid_items = [filter_item for filter_item in self.filters if not isinstance(filter_item, ReportFilter)]
18
+ raise InvalidArgumentException('filters', 'ReportFilter', ', '.join(map(str, invalid_items)))
19
+
20
+
21
+ def get_parameters(self) -> dict:
22
+ parameters = {'type': self.type}
23
+
24
+ if self.filters is not None and self.filters != []:
25
+ parameters.update({'filters': [filter_.get_parameters() for filter_ in self.filters]})
26
+
27
+ return parameters
@@ -0,0 +1,35 @@
1
+ from paddle_billing.EnumStringify import enum_stringify
2
+ from paddle_billing.HasParameters import HasParameters
3
+
4
+ from paddle_billing.Entities.Reports import ReportStatus
5
+
6
+ from paddle_billing.Exceptions.SdkExceptions.InvalidArgumentException import InvalidArgumentException
7
+
8
+ from paddle_billing.Resources.Shared.Operations import Pager
9
+
10
+
11
+
12
+ class ListReports(HasParameters):
13
+ def __init__(
14
+ self,
15
+ pager: Pager | None = None,
16
+ statuses: list[ReportStatus] = None,
17
+ ):
18
+ self.pager = pager
19
+ self.statuses = statuses if statuses is not None else []
20
+
21
+ # Validation
22
+ for field_name, field_value, field_type in [('statuses', self.statuses, ReportStatus)]:
23
+ invalid_items = [item for item in field_value if not isinstance(item, field_type)]
24
+ if invalid_items:
25
+ raise InvalidArgumentException(field_name, field_type.__name__, invalid_items)
26
+
27
+
28
+ def get_parameters(self) -> dict:
29
+ parameters = {}
30
+ if self.pager:
31
+ parameters.update(self.pager.get_parameters())
32
+ if self.statuses:
33
+ parameters['status'] = ','.join(map(enum_stringify, self.statuses))
34
+
35
+ return parameters
@@ -0,0 +1,2 @@
1
+ from paddle_billing.Resources.Reports.Operations.CreateReport import CreateReport
2
+ from paddle_billing.Resources.Reports.Operations.ListReports import ListReports
@@ -0,0 +1,51 @@
1
+ from paddle_billing.ResponseParser import ResponseParser
2
+
3
+ from paddle_billing.Entities.Report import Report
4
+ from paddle_billing.Entities.ReportCSV import ReportCSV
5
+ from paddle_billing.Entities.Collections import Paginator, ReportCollection
6
+
7
+ from paddle_billing.Resources.Reports.Operations import CreateReport, ListReports
8
+
9
+ from typing import TYPE_CHECKING
10
+ if TYPE_CHECKING:
11
+ from paddle_billing.Client import Client
12
+
13
+
14
+ class ReportsClient:
15
+ def __init__(self, client: 'Client'):
16
+ self.client = client
17
+ self.response = None
18
+
19
+
20
+ def list(self, operation: ListReports = None) -> ReportCollection:
21
+ if operation is None:
22
+ operation = ListReports()
23
+
24
+ self.response = self.client.get_raw('/reports', operation.get_parameters())
25
+ parser = ResponseParser(self.response)
26
+
27
+ return ReportCollection.from_list(
28
+ parser.get_data(),
29
+ Paginator(self.client, parser.get_pagination(), ReportCollection)
30
+ )
31
+
32
+
33
+ def get(self, report_id: str) -> Report:
34
+ self.response = self.client.get_raw(f"/reports/{report_id}")
35
+ parser = ResponseParser(self.response)
36
+
37
+ return Report.from_dict(parser.get_data())
38
+
39
+
40
+ def get_report_csv(self, report_id: str) -> ReportCSV:
41
+ self.response = self.client.get_raw(f"/reports/{report_id}/download-url")
42
+ parser = ResponseParser(self.response)
43
+
44
+ return ReportCSV.from_dict(parser.get_data())
45
+
46
+
47
+ def create(self, operation: CreateReport) -> Report:
48
+ self.response = self.client.post_raw('/reports', operation.get_parameters())
49
+ parser = ResponseParser(self.response)
50
+
51
+ return Report.from_dict(parser.get_data())
File without changes
@@ -0,0 +1,8 @@
1
+ from paddle_billing.PaddleStrEnum import PaddleStrEnum
2
+
3
+
4
+ class Comparator(PaddleStrEnum):
5
+ LT = 'LT'
6
+ LTE = 'LTE'
7
+ GT = 'GT'
8
+ GTE = 'GTE'
@@ -0,0 +1,31 @@
1
+ from datetime import datetime
2
+
3
+ from paddle_billing.Entities.DateTime import DateTime
4
+
5
+ from paddle_billing.Resources.Shared.Operations.List.Comparator import Comparator
6
+
7
+
8
+ class DateComparison:
9
+ def __init__(
10
+ self,
11
+ date: datetime,
12
+ comparator: Comparator | None = None,
13
+ ):
14
+ self.date = date
15
+ self._comparator = comparator
16
+
17
+
18
+ @property
19
+ def comparator(self) -> str:
20
+ return f"[{self._comparator.value}]" if self._comparator else ''
21
+
22
+
23
+ def formatted(self) -> str:
24
+ if isinstance(self.date, datetime):
25
+ date_obj = DateTime.from_datetime(self.date)
26
+ elif isinstance(self.date, DateTime):
27
+ date_obj = self.date
28
+ else:
29
+ raise TypeError(f"Invalid '{type(self.date)}' type for date")
30
+
31
+ return date_obj.format() if date_obj else ''
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ class OrderBy:
5
+ def __init__(self, field: str, direction: str):
6
+ self.field = field
7
+ self.direction = direction
8
+
9
+
10
+ @classmethod
11
+ def id_ascending(cls) -> OrderBy:
12
+ return OrderBy('id', 'asc')
13
+
14
+
15
+ @classmethod
16
+ def id_descending(cls) -> OrderBy:
17
+ return OrderBy('id', 'desc')
18
+
19
+
20
+ def __str__(self):
21
+ return f"{self.field}[{self.direction}]"
@@ -0,0 +1,24 @@
1
+ from paddle_billing.FiltersNone import FiltersNone
2
+ from paddle_billing.HasParameters import HasParameters
3
+
4
+ from paddle_billing.Resources.Shared.Operations.List.OrderBy import OrderBy
5
+
6
+
7
+ class Pager(HasParameters):
8
+ def __init__(
9
+ self,
10
+ after: str | None = None,
11
+ order_by: OrderBy | None = None,
12
+ per_page: int = 50,
13
+ ):
14
+ self.after = after
15
+ self.order_by = order_by if order_by is not None else OrderBy.id_ascending()
16
+ self.per_page = per_page
17
+
18
+
19
+ def get_parameters(self) -> dict:
20
+ return FiltersNone.filter_none_values({
21
+ 'after': self.after,
22
+ 'order_by': str(self.order_by),
23
+ 'per_page': self.per_page
24
+ })
@@ -0,0 +1,4 @@
1
+ from paddle_billing.Resources.Shared.Operations.List.Comparator import Comparator
2
+ from paddle_billing.Resources.Shared.Operations.List.DateComparison import DateComparison
3
+ from paddle_billing.Resources.Shared.Operations.List.OrderBy import OrderBy
4
+ from paddle_billing.Resources.Shared.Operations.List.Pager import Pager
File without changes
@@ -0,0 +1,12 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Entities.Subscriptions import SubscriptionEffectiveFrom
4
+
5
+
6
+ @dataclass
7
+ class CancelSubscription:
8
+ effective_from: SubscriptionEffectiveFrom = None
9
+
10
+
11
+ def get_parameters(self) -> dict:
12
+ return asdict(self)
@@ -0,0 +1,22 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Undefined import Undefined
4
+
5
+ from paddle_billing.Entities.Subscriptions import (
6
+ SubscriptionEffectiveFrom,
7
+ SubscriptionItems,
8
+ SubscriptionItemsWithPrice,
9
+ SubscriptionOnPaymentFailure,
10
+ )
11
+
12
+
13
+ @dataclass
14
+ class CreateOneTimeCharge:
15
+ effective_from: SubscriptionEffectiveFrom
16
+ items: list[SubscriptionItems | SubscriptionItemsWithPrice]
17
+ on_payment_failure: SubscriptionOnPaymentFailure | Undefined = Undefined()
18
+ receipt_data: str | Undefined = Undefined()
19
+
20
+
21
+ def get_parameters(self) -> dict:
22
+ return asdict(self)
@@ -0,0 +1,6 @@
1
+ from paddle_billing.PaddleStrEnum import PaddleStrEnum
2
+
3
+
4
+ class Includes(PaddleStrEnum):
5
+ NextTransaction = 'next_transaction'
6
+ RecurringTransactionDetails = 'recurring_transaction_details'
@@ -0,0 +1,59 @@
1
+ from paddle_billing.EnumStringify import enum_stringify
2
+ from paddle_billing.HasParameters import HasParameters
3
+
4
+ from paddle_billing.Entities.Shared import CollectionMode
5
+ from paddle_billing.Entities.Subscriptions import SubscriptionStatus, SubscriptionScheduledChangeAction
6
+
7
+ from paddle_billing.Exceptions.SdkExceptions.InvalidArgumentException import InvalidArgumentException
8
+
9
+ from paddle_billing.Resources.Shared.Operations import Pager
10
+
11
+
12
+ class ListSubscriptions(HasParameters):
13
+ def __init__(
14
+ self,
15
+ pager: Pager | None = None,
16
+ address_ids: list[str] = None,
17
+ collection_mode: CollectionMode | None = None,
18
+ customer_ids: list[str] = None,
19
+ ids: list[str] = None,
20
+ price_ids: list[str] = None,
21
+ scheduled_change_actions: list[SubscriptionScheduledChangeAction] = None,
22
+ statuses: list[SubscriptionStatus] = None,
23
+ ):
24
+ self.pager = pager
25
+ self.collection_mode = collection_mode
26
+ self.address_ids = address_ids if address_ids is not None else []
27
+ self.customer_ids = customer_ids if customer_ids is not None else []
28
+ self.ids = ids if ids is not None else []
29
+ self.price_ids = price_ids if price_ids is not None else []
30
+ self.scheduled_change_actions = scheduled_change_actions if scheduled_change_actions is not None else []
31
+ self.statuses = statuses if statuses is not None else []
32
+
33
+ # Validation
34
+ for field_name, field_value, field_type in [
35
+ ('address_ids', self.address_ids, str),
36
+ ('customer_ids', self.customer_ids, str),
37
+ ('ids', self.ids, str),
38
+ ('price_ids', self.price_ids, str),
39
+ ('scheduled_change_actions', self.scheduled_change_actions, SubscriptionScheduledChangeAction),
40
+ ('statuses', self.statuses, SubscriptionStatus),
41
+ ]:
42
+ invalid_items = [item for item in field_value if not isinstance(item, field_type)]
43
+ if invalid_items:
44
+ raise InvalidArgumentException(field_name, field_type.__name__, invalid_items)
45
+
46
+
47
+ def get_parameters(self) -> dict:
48
+ parameters = self.pager.get_parameters() if self.pager else {}
49
+ parameters.update({
50
+ 'address_id': ','.join(self.address_ids),
51
+ 'collection_mode': self.collection_mode.value if self.collection_mode else None,
52
+ 'customer_id': ','.join(self.customer_ids),
53
+ 'id': ','.join(self.ids),
54
+ 'price_id': ','.join(self.price_ids),
55
+ 'scheduled_change_action': ','.join(map(enum_stringify, self.scheduled_change_actions)),
56
+ 'status': ','.join(map(enum_stringify, self.statuses)),
57
+ })
58
+
59
+ return {key: value for key, value in parameters.items() if value}
@@ -0,0 +1,19 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Entities.DateTime import DateTime
4
+ from paddle_billing.Entities.Subscriptions import SubscriptionEffectiveFrom
5
+
6
+
7
+ @dataclass
8
+ class PauseSubscription:
9
+ effective_from: SubscriptionEffectiveFrom | None = None
10
+ resume_at: DateTime | None = None
11
+
12
+
13
+ def get_parameters(self) -> dict:
14
+ parameters = asdict(self)
15
+ parameters['resume_at'] = self.resume_at.format() \
16
+ if isinstance(self.resume_at, DateTime) \
17
+ else self.resume_at
18
+
19
+ return parameters
@@ -0,0 +1,22 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Undefined import Undefined
4
+
5
+ from paddle_billing.Entities.Subscriptions import (
6
+ SubscriptionEffectiveFrom,
7
+ SubscriptionItems,
8
+ SubscriptionItemsWithPrice,
9
+ SubscriptionOnPaymentFailure,
10
+ )
11
+
12
+
13
+ @dataclass
14
+ class PreviewOneTimeCharge:
15
+ effective_from: SubscriptionEffectiveFrom
16
+ items: list[SubscriptionItems | SubscriptionItemsWithPrice]
17
+ on_payment_failure: SubscriptionOnPaymentFailure | Undefined = Undefined()
18
+ receipt_data: str | Undefined = Undefined()
19
+
20
+
21
+ def get_parameters(self) -> dict:
22
+ return asdict(self)
@@ -0,0 +1,37 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Undefined import Undefined
4
+
5
+ from paddle_billing.Entities.DateTime import DateTime
6
+ from paddle_billing.Entities.Shared import BillingDetails, CollectionMode, CurrencyCode, CustomData
7
+ from paddle_billing.Entities.Subscriptions import SubscriptionItems, SubscriptionOnPaymentFailure, SubscriptionProrationBillingMode
8
+
9
+ from paddle_billing.Resources.Subscriptions.Operations.Update.SubscriptionDiscount import SubscriptionDiscount
10
+
11
+
12
+ @dataclass
13
+ class PreviewUpdateSubscription:
14
+ customer_id: str | Undefined = Undefined()
15
+ address_id: str | Undefined = Undefined()
16
+ business_id: str | None | Undefined = Undefined()
17
+ currency_code: CurrencyCode | Undefined = Undefined()
18
+ next_billed_at: DateTime | Undefined = Undefined()
19
+ discount: SubscriptionDiscount | None | Undefined = Undefined()
20
+ collection_mode: CollectionMode | Undefined = Undefined()
21
+ billing_details: BillingDetails | None | Undefined = Undefined()
22
+ scheduled_change: None | Undefined = Undefined()
23
+ items: list[SubscriptionItems] | Undefined = Undefined()
24
+ custom_data: CustomData | None | Undefined = Undefined()
25
+ proration_billing_mode: SubscriptionProrationBillingMode | Undefined = Undefined()
26
+ on_payment_failure: SubscriptionOnPaymentFailure | Undefined = Undefined()
27
+
28
+
29
+ def get_parameters(self) -> dict:
30
+ parameters = asdict(self)
31
+
32
+ if isinstance(self.next_billed_at, DateTime):
33
+ parameters['next_billed_at'] = self.next_billed_at.format()
34
+ if not isinstance(self.items, Undefined):
35
+ parameters['items'] = [item.get_parameters() for item in self.items]
36
+
37
+ return parameters
@@ -0,0 +1,17 @@
1
+ from dataclasses import dataclass
2
+
3
+ from paddle_billing.Entities.DateTime import DateTime
4
+ from paddle_billing.Entities.Subscriptions import SubscriptionResumeEffectiveFrom
5
+
6
+
7
+ @dataclass
8
+ class ResumeSubscription:
9
+ effective_from: SubscriptionResumeEffectiveFrom | DateTime | None = None
10
+
11
+
12
+ def get_parameters(self) -> dict:
13
+ effective_from = self.effective_from.format() \
14
+ if isinstance(self.effective_from, DateTime) \
15
+ else self.effective_from
16
+
17
+ return {'effective_from': effective_from}
@@ -0,0 +1,9 @@
1
+ from dataclasses import dataclass
2
+
3
+ from paddle_billing.Entities.Subscriptions.SubscriptionEffectiveFrom import SubscriptionEffectiveFrom
4
+
5
+
6
+ @dataclass
7
+ class SubscriptionDiscount:
8
+ id: str
9
+ effective_from: SubscriptionEffectiveFrom
@@ -0,0 +1,37 @@
1
+ from dataclasses import asdict, dataclass
2
+
3
+ from paddle_billing.Undefined import Undefined
4
+
5
+ from paddle_billing.Entities.DateTime import DateTime
6
+ from paddle_billing.Entities.Shared import BillingDetails, CollectionMode, CurrencyCode, CustomData
7
+ from paddle_billing.Entities.Subscriptions import SubscriptionItems, SubscriptionOnPaymentFailure, SubscriptionProrationBillingMode
8
+
9
+ from paddle_billing.Resources.Subscriptions.Operations.Update.SubscriptionDiscount import SubscriptionDiscount
10
+
11
+
12
+ @dataclass
13
+ class UpdateSubscription:
14
+ customer_id: str | Undefined = Undefined()
15
+ address_id: str | Undefined = Undefined()
16
+ business_id: str | None | Undefined = Undefined()
17
+ currency_code: CurrencyCode | Undefined = Undefined()
18
+ next_billed_at: DateTime | Undefined = Undefined()
19
+ discount: SubscriptionDiscount | None | Undefined = Undefined()
20
+ collection_mode: CollectionMode | Undefined = Undefined()
21
+ billing_details: BillingDetails | None | Undefined = Undefined()
22
+ scheduled_change: None | Undefined = Undefined()
23
+ items: list[SubscriptionItems] | Undefined = Undefined()
24
+ custom_data: CustomData | None | Undefined = Undefined()
25
+ proration_billing_mode: SubscriptionProrationBillingMode | Undefined = Undefined()
26
+ on_payment_failure: SubscriptionOnPaymentFailure | Undefined = Undefined()
27
+
28
+
29
+ def get_parameters(self) -> dict:
30
+ parameters = asdict(self)
31
+
32
+ if isinstance(self.next_billed_at, DateTime):
33
+ parameters['next_billed_at'] = self.next_billed_at.format()
34
+ if not isinstance(self.items, Undefined):
35
+ parameters['items'] = [item.get_parameters() for item in self.items]
36
+
37
+ return parameters
@@ -0,0 +1,10 @@
1
+ from paddle_billing.Resources.Subscriptions.Operations.CancelSubscription import CancelSubscription
2
+ from paddle_billing.Resources.Subscriptions.Operations.CreateOneTimeCharge import CreateOneTimeCharge
3
+ from paddle_billing.Resources.Subscriptions.Operations.Get.Includes import Includes as SubscriptionIncludes
4
+ from paddle_billing.Resources.Subscriptions.Operations.ListSubscriptions import ListSubscriptions
5
+ from paddle_billing.Resources.Subscriptions.Operations.PauseSubscription import PauseSubscription
6
+ from paddle_billing.Resources.Subscriptions.Operations.PreviewOneTimeCharge import PreviewOneTimeCharge
7
+ from paddle_billing.Resources.Subscriptions.Operations.PreviewUpdateSubscription import PreviewUpdateSubscription
8
+ from paddle_billing.Resources.Subscriptions.Operations.ResumeSubscription import ResumeSubscription
9
+ from paddle_billing.Resources.Subscriptions.Operations.UpdateSubscription import UpdateSubscription
10
+ from paddle_billing.Resources.Subscriptions.Operations.Update.SubscriptionDiscount import SubscriptionDiscount