paddle-python-sdk 0.2.2__py3-none-any.whl → 0.3.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.
- examples/catalog_management.py +67 -58
- examples/event_polling.py +10 -12
- examples/get_products.py +14 -11
- examples/logger.py +9 -7
- examples/webhook_verification.py +33 -0
- paddle_billing/Client.py +104 -103
- paddle_billing/Entities/Address.py +29 -30
- paddle_billing/Entities/Adjustment.py +42 -33
- paddle_billing/Entities/AdjustmentCreditNote.py +13 -0
- paddle_billing/Entities/Adjustments/AdjustmentCustomerBalance.py +6 -7
- paddle_billing/Entities/Adjustments/AdjustmentItem.py +14 -15
- paddle_billing/Entities/Adjustments/AdjustmentTaxRatesUsed.py +17 -0
- paddle_billing/Entities/Adjustments/AdjustmentTotals.py +17 -0
- paddle_billing/Entities/Adjustments/__init__.py +2 -1
- paddle_billing/Entities/Business.py +22 -23
- paddle_billing/Entities/Collections/AddressCollection.py +1 -1
- paddle_billing/Entities/Collections/AdjustmentCollection.py +1 -1
- paddle_billing/Entities/Collections/BusinessCollection.py +1 -1
- paddle_billing/Entities/Collections/Collection.py +6 -11
- paddle_billing/Entities/Collections/CreditBalanceCollection.py +1 -1
- paddle_billing/Entities/Collections/CustomerCollection.py +1 -1
- paddle_billing/Entities/Collections/DiscountCollection.py +1 -1
- paddle_billing/Entities/Collections/EventCollection.py +1 -1
- paddle_billing/Entities/Collections/EventTypeCollection.py +1 -1
- paddle_billing/Entities/Collections/NotificationCollection.py +1 -1
- paddle_billing/Entities/Collections/NotificationLogCollection.py +1 -2
- paddle_billing/Entities/Collections/NotificationSettingCollection.py +1 -1
- paddle_billing/Entities/Collections/Paginator.py +10 -12
- paddle_billing/Entities/Collections/PriceCollection.py +1 -1
- paddle_billing/Entities/Collections/ProductCollection.py +1 -1
- paddle_billing/Entities/Collections/ReportCollection.py +1 -1
- paddle_billing/Entities/Collections/SubscriptionCollection.py +1 -1
- paddle_billing/Entities/Collections/SubscriptionPreviewCollection.py +1 -1
- paddle_billing/Entities/Collections/TransactionCollection.py +1 -1
- paddle_billing/Entities/Collections/TransactionPreviewCollection.py +1 -1
- paddle_billing/Entities/Collections/TransactionsDataCollection.py +1 -1
- paddle_billing/Entities/Collections/__init__.py +19 -19
- paddle_billing/Entities/CreditBalance.py +8 -9
- paddle_billing/Entities/Customer.py +21 -22
- paddle_billing/Entities/DateTime.py +9 -11
- paddle_billing/Entities/Discount.py +39 -38
- paddle_billing/Entities/Discounts/DiscountStatus.py +4 -4
- paddle_billing/Entities/Discounts/DiscountType.py +3 -3
- paddle_billing/Entities/Discounts/__init__.py +1 -1
- paddle_billing/Entities/Entity.py +1 -1
- paddle_billing/Entities/Event.py +11 -35
- paddle_billing/Entities/EventType.py +8 -9
- paddle_billing/Entities/Events/EventTypeName.py +48 -48
- paddle_billing/Entities/IPAddresses.py +15 -0
- paddle_billing/Entities/Notification.py +28 -29
- paddle_billing/Entities/NotificationLog.py +11 -12
- paddle_billing/Entities/NotificationSetting.py +20 -21
- paddle_billing/Entities/NotificationSettings/NotificationSettingType.py +2 -2
- paddle_billing/Entities/Notifications/NotificationEvent.py +44 -0
- paddle_billing/Entities/Notifications/NotificationOrigin.py +2 -2
- paddle_billing/Entities/Notifications/NotificationPayout.py +10 -11
- paddle_billing/Entities/Notifications/NotificationPayoutStatus.py +2 -2
- paddle_billing/Entities/Notifications/NotificationStatus.py +4 -4
- paddle_billing/Entities/Notifications/__init__.py +4 -3
- paddle_billing/Entities/Price.py +39 -38
- paddle_billing/Entities/PricePreview.py +21 -22
- paddle_billing/Entities/PricingPreviews/PricePreviewDetails.py +2 -3
- paddle_billing/Entities/PricingPreviews/PricePreviewDiscounts.py +6 -7
- paddle_billing/Entities/PricingPreviews/PricePreviewItem.py +3 -4
- paddle_billing/Entities/PricingPreviews/PricePreviewLineItem.py +22 -23
- paddle_billing/Entities/PricingPreviews/PricePreviewTotalsFormatted.py +7 -8
- paddle_billing/Entities/PricingPreviews/PricePreviewUnitTotalsFormatted.py +7 -8
- paddle_billing/Entities/PricingPreviews/__init__.py +5 -5
- paddle_billing/Entities/Product.py +26 -28
- paddle_billing/Entities/Report.py +16 -17
- paddle_billing/Entities/ReportCSV.py +2 -2
- paddle_billing/Entities/Reports/AdjustmentsReportType.py +8 -0
- paddle_billing/Entities/Reports/DiscountsReportType.py +7 -0
- paddle_billing/Entities/Reports/ProductsPricesReportType.py +7 -0
- paddle_billing/Entities/Reports/ReportFilter.py +3 -5
- paddle_billing/Entities/Reports/ReportFilterName.py +13 -13
- paddle_billing/Entities/Reports/ReportFilterOperator.py +2 -2
- paddle_billing/Entities/Reports/ReportStatus.py +4 -4
- paddle_billing/Entities/Reports/ReportType.py +6 -6
- paddle_billing/Entities/Reports/TransactionsReportType.py +8 -0
- paddle_billing/Entities/Reports/__init__.py +8 -4
- paddle_billing/Entities/Shared/Action.py +6 -6
- paddle_billing/Entities/Shared/AddressPreview.py +4 -5
- paddle_billing/Entities/Shared/AdjustmentItemTotals.py +6 -7
- paddle_billing/Entities/Shared/AdjustmentStatus.py +4 -4
- paddle_billing/Entities/Shared/AdjustmentTotals.py +12 -13
- paddle_billing/Entities/Shared/AdjustmentType.py +4 -4
- paddle_billing/Entities/Shared/BillingDetails.py +9 -10
- paddle_billing/Entities/Shared/Card.py +10 -11
- paddle_billing/Entities/Shared/CatalogType.py +2 -2
- paddle_billing/Entities/Shared/ChargebackFee.py +4 -5
- paddle_billing/Entities/Shared/Checkout.py +2 -3
- paddle_billing/Entities/Shared/CollectionMode.py +2 -2
- paddle_billing/Entities/Shared/Contacts.py +4 -5
- paddle_billing/Entities/Shared/CountryCode.py +229 -229
- paddle_billing/Entities/Shared/CurrencyCode.py +30 -30
- paddle_billing/Entities/Shared/CurrencyCodeAdjustments.py +3 -3
- paddle_billing/Entities/Shared/CurrencyCodePayouts.py +13 -13
- paddle_billing/Entities/Shared/CustomData.py +5 -4
- paddle_billing/Entities/Shared/Data.py +1 -1
- paddle_billing/Entities/Shared/Disposition.py +6 -0
- paddle_billing/Entities/Shared/Duration.py +17 -0
- paddle_billing/Entities/Shared/ErrorCode.py +17 -17
- paddle_billing/Entities/Shared/ImportMeta.py +4 -5
- paddle_billing/Entities/Shared/Interval.py +4 -4
- paddle_billing/Entities/Shared/Meta.py +1 -1
- paddle_billing/Entities/Shared/MetaPaginated.py +3 -4
- paddle_billing/Entities/Shared/MethodDetails.py +4 -5
- paddle_billing/Entities/Shared/Money.py +7 -8
- paddle_billing/Entities/Shared/Original.py +4 -5
- paddle_billing/Entities/Shared/Pagination.py +8 -9
- paddle_billing/Entities/Shared/PaymentAttemptStatus.py +9 -9
- paddle_billing/Entities/Shared/PaymentMethodType.py +10 -10
- paddle_billing/Entities/Shared/PayoutTotalsAdjustment.py +15 -16
- paddle_billing/Entities/Shared/PriceQuantity.py +3 -4
- paddle_billing/Entities/Shared/Proration.py +17 -0
- paddle_billing/Entities/Shared/Status.py +2 -2
- paddle_billing/Entities/Shared/TaxCategory.py +9 -9
- paddle_billing/Entities/Shared/TaxMode.py +3 -3
- paddle_billing/Entities/Shared/TaxRatesUsed.py +4 -5
- paddle_billing/Entities/Shared/TimePeriod.py +6 -8
- paddle_billing/Entities/Shared/Totals.py +7 -8
- paddle_billing/Entities/Shared/TransactionDetailsPreview.py +8 -9
- paddle_billing/Entities/Shared/TransactionLineItemPreview.py +17 -15
- paddle_billing/Entities/Shared/TransactionOrigin.py +6 -6
- paddle_billing/Entities/Shared/TransactionPaymentAttempt.py +21 -22
- paddle_billing/Entities/Shared/TransactionPayoutTotals.py +22 -23
- paddle_billing/Entities/Shared/TransactionPayoutTotalsAdjusted.py +15 -16
- paddle_billing/Entities/Shared/TransactionStatus.py +7 -7
- paddle_billing/Entities/Shared/TransactionTotals.py +22 -23
- paddle_billing/Entities/Shared/TransactionTotalsAdjusted.py +14 -15
- paddle_billing/Entities/Shared/UnitPriceOverride.py +5 -6
- paddle_billing/Entities/Shared/UnitTotals.py +7 -8
- paddle_billing/Entities/Shared/__init__.py +49 -50
- paddle_billing/Entities/Subscription.py +69 -55
- paddle_billing/Entities/SubscriptionPreview.py +87 -55
- paddle_billing/Entities/Subscriptions/SubscriptionAdjustmentItem.py +12 -13
- paddle_billing/Entities/Subscriptions/SubscriptionAdjustmentPreview.py +6 -7
- paddle_billing/Entities/Subscriptions/SubscriptionCharge.py +3 -4
- paddle_billing/Entities/Subscriptions/SubscriptionCredit.py +4 -5
- paddle_billing/Entities/Subscriptions/SubscriptionDiscount.py +7 -8
- paddle_billing/Entities/Subscriptions/SubscriptionEffectiveFrom.py +2 -2
- paddle_billing/Entities/Subscriptions/SubscriptionItem.py +27 -22
- paddle_billing/Entities/Subscriptions/SubscriptionItemStatus.py +3 -3
- paddle_billing/Entities/Subscriptions/SubscriptionItems.py +3 -5
- paddle_billing/Entities/Subscriptions/SubscriptionItemsWithPrice.py +12 -8
- paddle_billing/Entities/Subscriptions/SubscriptionManagementUrls.py +4 -5
- paddle_billing/Entities/Subscriptions/SubscriptionNextTransaction.py +8 -9
- paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogPrice.py +21 -18
- paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogPriceWithProduct.py +21 -18
- paddle_billing/Entities/Subscriptions/SubscriptionNonCatalogProduct.py +12 -13
- paddle_billing/Entities/Subscriptions/SubscriptionOnPaymentFailure.py +2 -2
- paddle_billing/Entities/Subscriptions/SubscriptionPreviewSubscriptionUpdateSummary.py +4 -5
- paddle_billing/Entities/Subscriptions/SubscriptionProrationBillingMode.py +5 -5
- paddle_billing/Entities/Subscriptions/SubscriptionResult.py +5 -6
- paddle_billing/Entities/Subscriptions/SubscriptionResultAction.py +2 -2
- paddle_billing/Entities/Subscriptions/SubscriptionResumeEffectiveFrom.py +1 -1
- paddle_billing/Entities/Subscriptions/SubscriptionScheduledChange.py +7 -8
- paddle_billing/Entities/Subscriptions/SubscriptionScheduledChangeAction.py +3 -3
- paddle_billing/Entities/Subscriptions/SubscriptionStatus.py +6 -6
- paddle_billing/Entities/Subscriptions/SubscriptionUpdateItem.py +3 -4
- paddle_billing/Entities/Subscriptions/__init__.py +29 -30
- paddle_billing/Entities/Transaction.py +73 -73
- paddle_billing/Entities/TransactionData.py +2 -4
- paddle_billing/Entities/TransactionPreview.py +25 -26
- paddle_billing/Entities/Transactions/TransactionAdjustmentsTotals.py +14 -15
- paddle_billing/Entities/Transactions/TransactionBreakdown.py +6 -7
- paddle_billing/Entities/Transactions/TransactionCardType.py +10 -10
- paddle_billing/Entities/Transactions/TransactionCreateItem.py +3 -4
- paddle_billing/Entities/Transactions/TransactionCreateItemWithPrice.py +6 -4
- paddle_billing/Entities/Transactions/TransactionDetails.py +24 -17
- paddle_billing/Entities/Transactions/TransactionItem.py +10 -11
- paddle_billing/Entities/Transactions/TransactionItemPreviewWithNonCatalogPrice.py +17 -9
- paddle_billing/Entities/Transactions/TransactionItemPreviewWithPrice.py +9 -10
- paddle_billing/Entities/Transactions/TransactionItemPreviewWithPriceId.py +6 -7
- paddle_billing/Entities/Transactions/TransactionLineItem.py +18 -20
- paddle_billing/Entities/Transactions/TransactionNonCatalogPrice.py +25 -26
- paddle_billing/Entities/Transactions/TransactionNonCatalogPriceWithProduct.py +25 -26
- paddle_billing/Entities/Transactions/TransactionNonCatalogProduct.py +11 -12
- paddle_billing/Entities/Transactions/TransactionUpdateTransactionItem.py +1 -1
- paddle_billing/Entities/Transactions/__init__.py +16 -13
- paddle_billing/Environment.py +4 -5
- paddle_billing/Exceptions/ApiError.py +11 -17
- paddle_billing/Exceptions/FieldError.py +0 -1
- paddle_billing/Exceptions/SdkExceptions/InvalidArgumentException.py +16 -2
- paddle_billing/FiltersNone.py +0 -1
- paddle_billing/FiltersUndefined.py +0 -1
- paddle_billing/Logger/Formatter.py +1 -1
- paddle_billing/Logger/__init__.py +4 -4
- paddle_billing/Notifications/Entities/Address.py +29 -30
- paddle_billing/Notifications/Entities/Adjustment.py +46 -33
- paddle_billing/Notifications/Entities/Adjustments/AdjustmentItem.py +14 -15
- paddle_billing/Notifications/Entities/Adjustments/AdjustmentTaxRatesUsed.py +17 -0
- paddle_billing/Notifications/Entities/Adjustments/AdjustmentTotals.py +17 -0
- paddle_billing/Notifications/Entities/Adjustments/__init__.py +1 -0
- paddle_billing/Notifications/Entities/Business.py +24 -25
- paddle_billing/Notifications/Entities/Businesses/BusinessesContacts.py +4 -5
- paddle_billing/Notifications/Entities/Customer.py +21 -22
- paddle_billing/Notifications/Entities/DateTime.py +6 -11
- paddle_billing/Notifications/Entities/Discount.py +38 -39
- paddle_billing/Notifications/Entities/Discounts/DiscountStatus.py +4 -4
- paddle_billing/Notifications/Entities/Discounts/DiscountType.py +3 -3
- paddle_billing/Notifications/Entities/Discounts/__init__.py +1 -1
- paddle_billing/Notifications/Entities/Entity.py +43 -2
- paddle_billing/Notifications/Entities/EntityDict.py +6 -0
- paddle_billing/Notifications/Entities/Payout.py +10 -11
- paddle_billing/Notifications/Entities/Payouts/PayoutStatus.py +2 -2
- paddle_billing/Notifications/Entities/Price.py +37 -36
- paddle_billing/Notifications/Entities/Product.py +26 -28
- paddle_billing/Notifications/Entities/Report.py +16 -17
- paddle_billing/Notifications/Entities/Reports/ReportFilter.py +3 -5
- paddle_billing/Notifications/Entities/Reports/ReportFilterName.py +13 -13
- paddle_billing/Notifications/Entities/Reports/ReportFilterOperator.py +2 -2
- paddle_billing/Notifications/Entities/Reports/ReportStatus.py +4 -4
- paddle_billing/Notifications/Entities/Reports/ReportType.py +6 -6
- paddle_billing/Notifications/Entities/Reports/__init__.py +4 -4
- paddle_billing/Notifications/Entities/Shared/Action.py +6 -6
- paddle_billing/Notifications/Entities/Shared/AddressPreview.py +4 -5
- paddle_billing/Notifications/Entities/Shared/AdjustmentItemTotals.py +6 -7
- paddle_billing/Notifications/Entities/Shared/AdjustmentStatus.py +4 -4
- paddle_billing/Notifications/Entities/Shared/AdjustmentTotals.py +12 -13
- paddle_billing/Notifications/Entities/Shared/AdjustmentType.py +4 -4
- paddle_billing/Notifications/Entities/Shared/BillingDetails.py +9 -10
- paddle_billing/Notifications/Entities/Shared/Card.py +10 -11
- paddle_billing/Notifications/Entities/Shared/CatalogType.py +2 -2
- paddle_billing/Notifications/Entities/Shared/ChargebackFee.py +4 -5
- paddle_billing/Notifications/Entities/Shared/Checkout.py +2 -3
- paddle_billing/Notifications/Entities/Shared/CollectionMode.py +2 -2
- paddle_billing/Notifications/Entities/Shared/CountryCode.py +229 -229
- paddle_billing/Notifications/Entities/Shared/CurrencyCode.py +30 -30
- paddle_billing/Notifications/Entities/Shared/CurrencyCodeAdjustments.py +3 -3
- paddle_billing/Notifications/Entities/Shared/CurrencyCodePayouts.py +13 -13
- paddle_billing/Notifications/Entities/Shared/CustomData.py +0 -1
- paddle_billing/Notifications/Entities/Shared/Data.py +1 -1
- paddle_billing/Notifications/Entities/Shared/Duration.py +17 -0
- paddle_billing/Notifications/Entities/Shared/ErrorCode.py +17 -17
- paddle_billing/Notifications/Entities/Shared/ImportMeta.py +4 -5
- paddle_billing/Notifications/Entities/Shared/Interval.py +4 -4
- paddle_billing/Notifications/Entities/Shared/MethodDetails.py +4 -5
- paddle_billing/Notifications/Entities/Shared/Money.py +7 -8
- paddle_billing/Notifications/Entities/Shared/Original.py +4 -5
- paddle_billing/Notifications/Entities/Shared/PaymentAttemptStatus.py +9 -9
- paddle_billing/Notifications/Entities/Shared/PaymentMethodType.py +11 -11
- paddle_billing/Notifications/Entities/Shared/PayoutTotalsAdjustment.py +15 -16
- paddle_billing/Notifications/Entities/Shared/PriceQuantity.py +3 -4
- paddle_billing/Notifications/Entities/Shared/Proration.py +17 -0
- paddle_billing/Notifications/Entities/Shared/Status.py +2 -2
- paddle_billing/Notifications/Entities/Shared/TaxCategory.py +9 -9
- paddle_billing/Notifications/Entities/Shared/TaxMode.py +3 -3
- paddle_billing/Notifications/Entities/Shared/TaxRatesUsed.py +4 -5
- paddle_billing/Notifications/Entities/Shared/TimePeriod.py +6 -8
- paddle_billing/Notifications/Entities/Shared/Totals.py +7 -8
- paddle_billing/Notifications/Entities/Shared/TransactionOrigin.py +6 -6
- paddle_billing/Notifications/Entities/Shared/TransactionPaymentAttempt.py +21 -22
- paddle_billing/Notifications/Entities/Shared/TransactionPayoutTotals.py +22 -23
- paddle_billing/Notifications/Entities/Shared/TransactionPayoutTotalsAdjusted.py +15 -16
- paddle_billing/Notifications/Entities/Shared/TransactionStatus.py +7 -7
- paddle_billing/Notifications/Entities/Shared/TransactionTotals.py +22 -23
- paddle_billing/Notifications/Entities/Shared/TransactionTotalsAdjusted.py +14 -15
- paddle_billing/Notifications/Entities/Shared/UnitPriceOverride.py +5 -6
- paddle_billing/Notifications/Entities/Shared/UnitTotals.py +7 -8
- paddle_billing/Notifications/Entities/Shared/__init__.py +44 -45
- paddle_billing/Notifications/Entities/Subscription.py +54 -51
- paddle_billing/Notifications/Entities/SubscriptionCreated.py +81 -0
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionAdjustmentItem.py +12 -13
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionCharge.py +3 -4
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionCredit.py +4 -5
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionDiscount.py +7 -8
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionEffectiveFrom.py +2 -2
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionItem.py +27 -22
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionItemStatus.py +3 -3
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionOnPaymentFailure.py +2 -2
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionPrice.py +36 -35
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionScheduledChange.py +10 -9
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionScheduledChangeAction.py +3 -3
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionStatus.py +6 -6
- paddle_billing/Notifications/Entities/Subscriptions/__init__.py +16 -13
- paddle_billing/Notifications/Entities/Transaction.py +49 -52
- paddle_billing/Notifications/Entities/Transactions/TransactionAdjustmentsTotals.py +14 -15
- paddle_billing/Notifications/Entities/Transactions/TransactionBreakdown.py +6 -7
- paddle_billing/Notifications/Entities/Transactions/TransactionCardType.py +10 -10
- paddle_billing/Notifications/Entities/Transactions/TransactionDetails.py +24 -17
- paddle_billing/Notifications/Entities/Transactions/TransactionItem.py +10 -11
- paddle_billing/Notifications/Entities/Transactions/TransactionLineItem.py +18 -20
- paddle_billing/Notifications/Entities/Transactions/__init__.py +2 -4
- paddle_billing/Notifications/Entities/UndefinedEntity.py +13 -0
- paddle_billing/Notifications/Events/AddressCreated.py +4 -4
- paddle_billing/Notifications/Events/AddressUpdated.py +4 -4
- paddle_billing/Notifications/Events/AdjustmentCreated.py +4 -4
- paddle_billing/Notifications/Events/AdjustmentUpdated.py +4 -4
- paddle_billing/Notifications/Events/BusinessCreated.py +4 -4
- paddle_billing/Notifications/Events/BusinessUpdated.py +4 -4
- paddle_billing/Notifications/Events/CustomerCreated.py +4 -4
- paddle_billing/Notifications/Events/CustomerUpdated.py +4 -4
- paddle_billing/Notifications/Events/DiscountCreated.py +4 -4
- paddle_billing/Notifications/Events/DiscountImported.py +4 -4
- paddle_billing/Notifications/Events/DiscountUpdated.py +4 -4
- paddle_billing/Notifications/Events/PayoutCreated.py +4 -4
- paddle_billing/Notifications/Events/PayoutPaid.py +4 -4
- paddle_billing/Notifications/Events/PriceCreated.py +4 -4
- paddle_billing/Notifications/Events/PriceUpdated.py +4 -4
- paddle_billing/Notifications/Events/ProductCreated.py +4 -4
- paddle_billing/Notifications/Events/ProductUpdated.py +4 -4
- paddle_billing/Notifications/Events/ReportCreated.py +4 -4
- paddle_billing/Notifications/Events/ReportUpdated.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionActivated.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionCanceled.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionCreated.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionImported.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionPastDue.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionPaused.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionResumed.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionTrialing.py +4 -4
- paddle_billing/Notifications/Events/SubscriptionUpdated.py +4 -4
- paddle_billing/Notifications/Events/TransactionBilled.py +4 -4
- paddle_billing/Notifications/Events/TransactionCanceled.py +4 -4
- paddle_billing/Notifications/Events/TransactionCompleted.py +5 -4
- paddle_billing/Notifications/Events/TransactionCreated.py +4 -4
- paddle_billing/Notifications/Events/TransactionPaid.py +4 -4
- paddle_billing/Notifications/Events/TransactionPastDue.py +4 -4
- paddle_billing/Notifications/Events/TransactionPaymentFailed.py +4 -4
- paddle_billing/Notifications/Events/TransactionReady.py +4 -4
- paddle_billing/Notifications/Events/TransactionUpdated.py +4 -4
- paddle_billing/Notifications/PaddleSignature.py +27 -31
- paddle_billing/Notifications/Requests/Headers.py +5 -0
- paddle_billing/Notifications/Requests/Request.py +10 -0
- paddle_billing/Notifications/Requests/__init__.py +1 -0
- paddle_billing/Notifications/Secret.py +0 -1
- paddle_billing/Notifications/Verifier.py +16 -19
- paddle_billing/Notifications/__init__.py +2 -2
- paddle_billing/Operation.py +7 -0
- paddle_billing/Options.py +2 -2
- paddle_billing/PaddleStrEnum.py +4 -14
- paddle_billing/Resources/Addresses/AddressesClient.py +10 -16
- paddle_billing/Resources/Addresses/Operations/CreateAddress.py +8 -9
- paddle_billing/Resources/Addresses/Operations/ListAddresses.py +13 -14
- paddle_billing/Resources/Addresses/Operations/UpdateAddress.py +10 -11
- paddle_billing/Resources/Adjustments/AdjustmentsClient.py +17 -12
- paddle_billing/Resources/Adjustments/Operations/Create/AdjustmentItem.py +4 -4
- paddle_billing/Resources/Adjustments/Operations/CreateAdjustment.py +15 -13
- paddle_billing/Resources/Adjustments/Operations/GetCreditNote.py +19 -0
- paddle_billing/Resources/Adjustments/Operations/ListAdjustments.py +27 -26
- paddle_billing/Resources/Adjustments/Operations/__init__.py +3 -2
- paddle_billing/Resources/Businesses/BusinessesClient.py +11 -17
- paddle_billing/Resources/Businesses/Operations/CreateBusiness.py +6 -7
- paddle_billing/Resources/Businesses/Operations/ListBusinesses.py +14 -13
- paddle_billing/Resources/Businesses/Operations/UpdateBusiness.py +7 -8
- paddle_billing/Resources/Customers/CustomersClient.py +20 -21
- paddle_billing/Resources/Customers/Operations/CreateCustomer.py +4 -5
- paddle_billing/Resources/Customers/Operations/ListCreditBalances.py +5 -4
- paddle_billing/Resources/Customers/Operations/ListCustomers.py +19 -18
- paddle_billing/Resources/Customers/Operations/UpdateCustomer.py +5 -6
- paddle_billing/Resources/Customers/Operations/__init__.py +3 -3
- paddle_billing/Resources/Discounts/DiscountsClient.py +13 -18
- paddle_billing/Resources/Discounts/Operations/CreateDiscount.py +14 -14
- paddle_billing/Resources/Discounts/Operations/ListDiscounts.py +15 -14
- paddle_billing/Resources/Discounts/Operations/UpdateDiscount.py +15 -15
- paddle_billing/Resources/Discounts/Operations/__init__.py +1 -1
- paddle_billing/Resources/EventTypes/EventTypesClient.py +7 -8
- paddle_billing/Resources/Events/EventsClient.py +8 -9
- paddle_billing/Resources/Events/Operations/ListEvents.py +0 -1
- paddle_billing/Resources/NotificationLogs/NotificationLogsClient.py +7 -8
- paddle_billing/Resources/NotificationLogs/Operations/ListNotificationLogs.py +1 -2
- paddle_billing/Resources/NotificationSettings/NotificationSettingsClient.py +25 -21
- paddle_billing/Resources/NotificationSettings/Operations/CreateNotificationSetting.py +7 -10
- paddle_billing/Resources/NotificationSettings/Operations/ListNotificationSettings.py +22 -0
- paddle_billing/Resources/NotificationSettings/Operations/UpdateNotificationSetting.py +7 -10
- paddle_billing/Resources/NotificationSettings/Operations/__init__.py +1 -0
- paddle_billing/Resources/Notifications/NotificationsClient.py +11 -14
- paddle_billing/Resources/Notifications/Operations/ListNotifications.py +25 -24
- paddle_billing/Resources/Prices/Operations/CreatePrice.py +21 -14
- paddle_billing/Resources/Prices/Operations/List/Includes.py +1 -1
- paddle_billing/Resources/Prices/Operations/ListPrices.py +29 -29
- paddle_billing/Resources/Prices/Operations/UpdatePrice.py +22 -14
- paddle_billing/Resources/Prices/Operations/__init__.py +3 -3
- paddle_billing/Resources/Prices/PricesClient.py +17 -20
- paddle_billing/Resources/PricingPreviews/Operations/PreviewPrice.py +23 -10
- paddle_billing/Resources/PricingPreviews/PricingPreviewsClient.py +7 -7
- paddle_billing/Resources/Products/Operations/CreateProduct.py +6 -7
- paddle_billing/Resources/Products/Operations/List/Includes.py +1 -1
- paddle_billing/Resources/Products/Operations/ListProducts.py +27 -26
- paddle_billing/Resources/Products/Operations/UpdateProduct.py +8 -9
- paddle_billing/Resources/Products/Operations/__init__.py +1 -1
- paddle_billing/Resources/Products/ProductsClient.py +19 -22
- paddle_billing/Resources/Reports/Operations/CreateAdjustmentsReport.py +31 -0
- paddle_billing/Resources/Reports/Operations/CreateDiscountsReport.py +27 -0
- paddle_billing/Resources/Reports/Operations/CreateProductsAndPricesReport.py +40 -0
- paddle_billing/Resources/Reports/Operations/CreateReport.py +16 -8
- paddle_billing/Resources/Reports/Operations/CreateTransactionsReport.py +33 -0
- paddle_billing/Resources/Reports/Operations/Filters/AdjustmentActionFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/AdjustmentStatusFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/CollectionModeFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/CurrencyCodeFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/DiscountStatusFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/DiscountTypeFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/Filter.py +29 -0
- paddle_billing/Resources/Reports/Operations/Filters/PriceStatusFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/PriceTypeFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/PriceUpdatedAtFilter.py +34 -0
- paddle_billing/Resources/Reports/Operations/Filters/ProductStatusFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/ProductTypeFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/ProductUpdatedAtFilter.py +34 -0
- paddle_billing/Resources/Reports/Operations/Filters/TransactionOriginFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/TransactionStatusFilter.py +22 -0
- paddle_billing/Resources/Reports/Operations/Filters/UpdatedAtFilter.py +34 -0
- paddle_billing/Resources/Reports/Operations/Filters/__init__.py +15 -0
- paddle_billing/Resources/Reports/Operations/ListReports.py +7 -7
- paddle_billing/Resources/Reports/Operations/__init__.py +5 -2
- paddle_billing/Resources/Reports/ReportsClient.py +13 -17
- paddle_billing/Resources/Shared/Operations/List/Comparator.py +4 -4
- paddle_billing/Resources/Shared/Operations/List/DateComparison.py +4 -6
- paddle_billing/Resources/Shared/Operations/List/OrderBy.py +3 -6
- paddle_billing/Resources/Shared/Operations/List/Pager.py +8 -11
- paddle_billing/Resources/Shared/Operations/__init__.py +3 -3
- paddle_billing/Resources/Subscriptions/Operations/CancelSubscription.py +0 -1
- paddle_billing/Resources/Subscriptions/Operations/CreateOneTimeCharge.py +2 -4
- paddle_billing/Resources/Subscriptions/Operations/Get/Includes.py +2 -2
- paddle_billing/Resources/Subscriptions/Operations/ListSubscriptions.py +35 -32
- paddle_billing/Resources/Subscriptions/Operations/PauseSubscription.py +3 -6
- paddle_billing/Resources/Subscriptions/Operations/PreviewOneTimeCharge.py +2 -4
- paddle_billing/Resources/Subscriptions/Operations/PreviewUpdateSubscription.py +28 -30
- paddle_billing/Resources/Subscriptions/Operations/ResumeSubscription.py +5 -6
- paddle_billing/Resources/Subscriptions/Operations/Update/SubscriptionDiscount.py +1 -1
- paddle_billing/Resources/Subscriptions/Operations/Update/UpdateBillingDetails.py +13 -0
- paddle_billing/Resources/Subscriptions/Operations/Update/__init__.py +2 -0
- paddle_billing/Resources/Subscriptions/Operations/UpdateSubscription.py +28 -30
- paddle_billing/Resources/Subscriptions/Operations/__init__.py +9 -9
- paddle_billing/Resources/Subscriptions/SubscriptionsClient.py +29 -36
- paddle_billing/Resources/Transactions/Operations/Create/CreateBillingDetails.py +13 -0
- paddle_billing/Resources/Transactions/Operations/Create/__init__.py +1 -0
- paddle_billing/Resources/Transactions/Operations/CreateTransaction.py +26 -21
- paddle_billing/Resources/Transactions/Operations/GetTransactionInvoice.py +19 -0
- paddle_billing/Resources/Transactions/Operations/List/Includes.py +7 -7
- paddle_billing/Resources/Transactions/Operations/List/Origin.py +6 -6
- paddle_billing/Resources/Transactions/Operations/ListTransactions.py +43 -42
- paddle_billing/Resources/Transactions/Operations/PreviewTransactionByAddress.py +21 -0
- paddle_billing/Resources/Transactions/Operations/PreviewTransactionByCustomer.py +22 -0
- paddle_billing/Resources/Transactions/Operations/PreviewTransactionByIP.py +21 -0
- paddle_billing/Resources/Transactions/Operations/Update/UpdateBillingDetails.py +13 -0
- paddle_billing/Resources/Transactions/Operations/Update/__init__.py +1 -0
- paddle_billing/Resources/Transactions/Operations/UpdateTransaction.py +26 -21
- paddle_billing/Resources/Transactions/Operations/__init__.py +9 -6
- paddle_billing/Resources/Transactions/TransactionsClient.py +36 -33
- paddle_billing/ResponseParser.py +17 -22
- paddle_billing/__init__.py +2 -2
- {paddle_python_sdk-0.2.2.dist-info → paddle_python_sdk-0.3.0.dist-info}/METADATA +4 -1
- paddle_python_sdk-0.3.0.dist-info/RECORD +558 -0
- {paddle_python_sdk-0.2.2.dist-info → paddle_python_sdk-0.3.0.dist-info}/WHEEL +1 -1
- tests/Functional/Client/test_Client.py +70 -67
- tests/Functional/Resources/Addresses/test_AddressesClient.py +184 -167
- tests/Functional/Resources/Adjustments/test_AdjustmentsClient.py +238 -85
- tests/Functional/Resources/Businesses/test_BusinessesClient.py +144 -128
- tests/Functional/Resources/Customers/test_CustomersClient.py +164 -130
- tests/Functional/Resources/Discounts/test_DiscountsClient.py +179 -119
- tests/Functional/Resources/EventTypes/test_EventTypesClient.py +17 -16
- tests/Functional/Resources/Events/test_EventsClient.py +82 -20
- tests/Functional/Resources/IPAddresses/__init__.py +0 -0
- tests/Functional/Resources/IPAddresses/test_IPAddressesClient.py +31 -0
- tests/Functional/Resources/NotificationLogs/test_NotificationLogsClient.py +23 -22
- tests/Functional/Resources/NotificationSettings/test_NotificationSettingsClient.py +225 -110
- tests/Functional/Resources/Notifications/test_NotificationsClient.py +201 -108
- tests/Functional/Resources/Prices/test_PricesClient.py +148 -131
- tests/Functional/Resources/PricingPreviews/test_PricingPreviewsClient.py +46 -42
- tests/Functional/Resources/Products/test_ProductsClient.py +123 -123
- tests/Functional/Resources/Reports/test_ReportsClient.py +240 -87
- tests/Functional/Resources/Subscriptions/test_SubscriptionsClient.py +680 -326
- tests/Functional/Resources/Transactions/test_TransactionsClient.py +717 -278
- tests/Unit/Logger/test_Logger.py +1 -1
- tests/Unit/Notification/test_Verifier.py +18 -22
- tests/Unit/PaddleStrEnum/test_PaddleStrEnum.py +28 -30
- tests/Utils/{FakeResponse.py → FakeRequest.py} +3 -3
- tests/Utils/ReadsFixture.py +4 -5
- tests/Utils/TestClient.py +13 -17
- tests/Utils/TestLogger.py +2 -4
- tests/Utils/__init__.py +1 -1
- paddle_billing/ConditionallyRemoveImportMeta.py +0 -14
- paddle_billing/Entities/Shared/AdjustmentProration.py +0 -18
- paddle_billing/Entities/Shared/AdjustmentTimePeriod.py +0 -17
- paddle_billing/Entities/Shared/AvailablePaymentMethods.py +0 -11
- paddle_billing/Entities/Shared/BillingDetailsUpdate.py +0 -22
- paddle_billing/Entities/Subscriptions/SubscriptionDetails.py +0 -34
- paddle_billing/Entities/Subscriptions/SubscriptionProration.py +0 -18
- paddle_billing/Entities/Subscriptions/SubscriptionTimePeriod.py +0 -17
- paddle_billing/Entities/Subscriptions/SubscriptionTransactionItem.py +0 -23
- paddle_billing/Entities/Subscriptions/SubscriptionTransactionLineItem.py +0 -33
- paddle_billing/Entities/Transactions/TransactionProration.py +0 -18
- paddle_billing/Entities/Transactions/TransactionTimePeriod.py +0 -17
- paddle_billing/Exceptions/SdkExceptions/MalformedResponse.py +0 -7
- paddle_billing/Notifications/Entities/Shared/AdjustmentProration.py +0 -18
- paddle_billing/Notifications/Entities/Shared/AdjustmentTimePeriod.py +0 -17
- paddle_billing/Notifications/Entities/Shared/AvailablePaymentMethods.py +0 -11
- paddle_billing/Notifications/Entities/Subscriptions/SubscriptionTimePeriod.py +0 -17
- paddle_billing/Notifications/Entities/Transactions/TransactionProration.py +0 -18
- paddle_billing/Notifications/Entities/Transactions/TransactionTimePeriod.py +0 -17
- paddle_billing/Resources/Transactions/Operations/PreviewTransaction.py +0 -24
- paddle_python_sdk-0.2.2.dist-info/RECORD +0 -520
- {paddle_python_sdk-0.2.2.dist-info → paddle_python_sdk-0.3.0.dist-info}/LICENSE +0 -0
- {paddle_python_sdk-0.2.2.dist-info → paddle_python_sdk-0.3.0.dist-info}/top_level.txt +0 -0
examples/catalog_management.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from logging import getLogger
|
|
2
|
-
from os
|
|
3
|
-
from sys
|
|
2
|
+
from os import getenv
|
|
3
|
+
from sys import exit # You should use classes/functions that returns instead of exits
|
|
4
4
|
|
|
5
5
|
from paddle_billing import Client, Environment, Options
|
|
6
6
|
|
|
@@ -8,50 +8,50 @@ from paddle_billing.Entities.Shared import (
|
|
|
8
8
|
CountryCode,
|
|
9
9
|
CurrencyCode,
|
|
10
10
|
CustomData,
|
|
11
|
+
Duration,
|
|
11
12
|
Money,
|
|
12
|
-
TimePeriod,
|
|
13
13
|
PriceQuantity,
|
|
14
14
|
UnitPriceOverride,
|
|
15
15
|
Interval,
|
|
16
16
|
Status,
|
|
17
|
-
TaxCategory
|
|
17
|
+
TaxCategory,
|
|
18
18
|
)
|
|
19
19
|
|
|
20
|
-
from paddle_billing.Exceptions.ApiError
|
|
21
|
-
from paddle_billing.Exceptions.SdkExceptions.MalformedResponse import MalformedResponse
|
|
20
|
+
from paddle_billing.Exceptions.ApiError import ApiError
|
|
22
21
|
|
|
23
|
-
from paddle_billing.Resources.Prices.Operations
|
|
22
|
+
from paddle_billing.Resources.Prices.Operations import CreatePrice, UpdatePrice, PriceIncludes
|
|
24
23
|
from paddle_billing.Resources.Products.Operations import CreateProduct, UpdateProduct, ProductIncludes, ListProducts
|
|
25
24
|
|
|
26
|
-
log = getLogger(
|
|
25
|
+
log = getLogger("my_app")
|
|
27
26
|
|
|
28
27
|
# Verify your Paddle API key was provided by a PADDLE_SECRET_API_KEY environment variable
|
|
29
28
|
# It is strongly advised that you do not include secrets in your source code
|
|
30
29
|
# Use environment variables, and/or secrets management like Vault to obtain your secrets
|
|
31
|
-
api_key: str = getenv(
|
|
30
|
+
api_key: str = getenv("PADDLE_SECRET_API_KEY", None)
|
|
32
31
|
if not api_key:
|
|
33
32
|
raise ValueError("You must provide the PADDLE_SECRET_API_KEY in your environment variables")
|
|
34
33
|
|
|
35
34
|
# Determine the environment, defaulting to sandbox
|
|
36
|
-
environment
|
|
37
|
-
paddle_environment = getattr(Environment, environment) # E.g. Environment.sandbox
|
|
35
|
+
environment = Environment(getenv("PADDLE_ENVIRONMENT", "sandbox"))
|
|
38
36
|
|
|
39
37
|
# Initialize the Paddle client
|
|
40
|
-
paddle = Client(api_key, options=Options(
|
|
38
|
+
paddle = Client(api_key, options=Options(environment), logger=log)
|
|
41
39
|
|
|
42
40
|
|
|
43
41
|
# ┌───
|
|
44
42
|
# │ Create Product │
|
|
45
43
|
# └────────────────┘
|
|
46
44
|
try:
|
|
47
|
-
product = paddle.products.create(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
product = paddle.products.create(
|
|
46
|
+
CreateProduct(
|
|
47
|
+
name="Kitten Service",
|
|
48
|
+
tax_category=TaxCategory.Standard,
|
|
49
|
+
description="Simply an awesome product",
|
|
50
|
+
image_url="https://placekitten.com/200/300",
|
|
51
|
+
custom_data=CustomData({"foo": "bar"}),
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
except ApiError as error:
|
|
55
55
|
print(error)
|
|
56
56
|
exit(1)
|
|
57
57
|
|
|
@@ -62,12 +62,15 @@ print(f"Created product '{product.id}': {product.description}")
|
|
|
62
62
|
# │ Update Product │
|
|
63
63
|
# └────────────────┘
|
|
64
64
|
try:
|
|
65
|
-
product = paddle.products.update(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
product = paddle.products.update(
|
|
66
|
+
product.id,
|
|
67
|
+
UpdateProduct(
|
|
68
|
+
name="Bear Service",
|
|
69
|
+
image_url="https://placebear.com/200/300",
|
|
70
|
+
custom_data=CustomData({"beep": "boop"}),
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
except ApiError as error:
|
|
71
74
|
print(error)
|
|
72
75
|
exit(1)
|
|
73
76
|
|
|
@@ -78,23 +81,24 @@ print(f"Updated product '{product.id}': {product.description}")
|
|
|
78
81
|
# │ Create Price │
|
|
79
82
|
# └──────────────┘
|
|
80
83
|
try:
|
|
81
|
-
price = paddle.prices.create(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
84
|
+
price = paddle.prices.create(
|
|
85
|
+
CreatePrice(
|
|
86
|
+
description="Bear Hug",
|
|
87
|
+
product_id=product.id,
|
|
88
|
+
unit_price=Money("1000", CurrencyCode.GBP),
|
|
89
|
+
trial_period=Duration(Interval.Week, 1),
|
|
90
|
+
billing_cycle=Duration(Interval.Year, 1),
|
|
91
|
+
quantity=PriceQuantity(1, 1),
|
|
92
|
+
custom_data=CustomData({"foo": "bar"}),
|
|
93
|
+
unit_price_overrides=[
|
|
94
|
+
UnitPriceOverride(
|
|
95
|
+
[CountryCode.CA, CountryCode.US],
|
|
96
|
+
Money("5000", CurrencyCode.USD),
|
|
97
|
+
),
|
|
98
|
+
],
|
|
99
|
+
)
|
|
100
|
+
)
|
|
101
|
+
except ApiError as error:
|
|
98
102
|
print(error)
|
|
99
103
|
exit(1)
|
|
100
104
|
|
|
@@ -105,12 +109,15 @@ print(f"Created price '{price.id}': {price.description}")
|
|
|
105
109
|
# │ Update Price │
|
|
106
110
|
# └──────────────┘
|
|
107
111
|
try:
|
|
108
|
-
price = paddle.prices.update(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
price = paddle.prices.update(
|
|
113
|
+
price.id,
|
|
114
|
+
UpdatePrice(
|
|
115
|
+
description="One-off Bear Hug",
|
|
116
|
+
unit_price=Money("500", CurrencyCode.GBP),
|
|
117
|
+
custom_data=CustomData({"beep": "boop"}),
|
|
118
|
+
),
|
|
119
|
+
)
|
|
120
|
+
except ApiError as error:
|
|
114
121
|
print(error)
|
|
115
122
|
exit(1)
|
|
116
123
|
|
|
@@ -122,12 +129,12 @@ print(f"Updated price '{price.id}': {price.description}")
|
|
|
122
129
|
# └─────────────────────────┘
|
|
123
130
|
try:
|
|
124
131
|
product = paddle.products.get(product.id, [ProductIncludes.Prices])
|
|
125
|
-
except
|
|
132
|
+
except ApiError as error:
|
|
126
133
|
print(error)
|
|
127
134
|
exit(1)
|
|
128
135
|
|
|
129
136
|
print(f"product.prices={product.prices}")
|
|
130
|
-
print(f"Read product '{product.id}' with prices " +
|
|
137
|
+
print(f"Read product '{product.id}' with prices " + ", ".join([str(price.id) for price in product.prices]))
|
|
131
138
|
|
|
132
139
|
|
|
133
140
|
# ┌───
|
|
@@ -135,7 +142,7 @@ print(f"Read product '{product.id}' with prices " + ', '.join([str(price.id) for
|
|
|
135
142
|
# └────────────────────────┘
|
|
136
143
|
try:
|
|
137
144
|
price = paddle.prices.get(price.id, [PriceIncludes.Product])
|
|
138
|
-
except
|
|
145
|
+
except ApiError as error:
|
|
139
146
|
print(error)
|
|
140
147
|
exit(1)
|
|
141
148
|
|
|
@@ -146,11 +153,13 @@ print(f"Read price '{price.id}' with product {price.product.id if price.product
|
|
|
146
153
|
# │ Get Products │
|
|
147
154
|
# └──────────────┘
|
|
148
155
|
try:
|
|
149
|
-
products = paddle.products.list(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
products = paddle.products.list(
|
|
157
|
+
ListProducts(
|
|
158
|
+
includes=[ProductIncludes.Prices],
|
|
159
|
+
statuses=[Status.Active],
|
|
160
|
+
)
|
|
161
|
+
)
|
|
162
|
+
except ApiError as error:
|
|
154
163
|
print(error)
|
|
155
164
|
exit(1)
|
|
156
165
|
|
|
@@ -160,7 +169,7 @@ except (ApiError, MalformedResponse) as error:
|
|
|
160
169
|
# └─────────────────────────────┘
|
|
161
170
|
for product in products:
|
|
162
171
|
print(f"Product: {product.name}")
|
|
163
|
-
print(
|
|
172
|
+
print("-" * len(product.name))
|
|
164
173
|
for price in product.prices:
|
|
165
174
|
print(f"Price: {price.name} - {price.description}")
|
|
166
175
|
print()
|
examples/event_polling.py
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
from logging import getLogger
|
|
2
|
-
from os
|
|
3
|
-
from sys
|
|
2
|
+
from os import getenv
|
|
3
|
+
from sys import exit # You should use classes/functions that returns instead of exits
|
|
4
4
|
|
|
5
5
|
from paddle_billing import Client, Environment, Options
|
|
6
6
|
|
|
7
|
-
from paddle_billing.Exceptions.ApiError
|
|
8
|
-
from paddle_billing.Exceptions.SdkExceptions.MalformedResponse import MalformedResponse
|
|
7
|
+
from paddle_billing.Exceptions.ApiError import ApiError
|
|
9
8
|
|
|
10
9
|
from paddle_billing.Resources.Events.Operations import ListEvents
|
|
11
10
|
from paddle_billing.Resources.Shared.Operations import Pager
|
|
12
11
|
|
|
13
|
-
log = getLogger(
|
|
12
|
+
log = getLogger("my_app")
|
|
14
13
|
|
|
15
14
|
# Verify your Paddle API key was provided by a PADDLE_SECRET_API_KEY environment variable
|
|
16
15
|
# It is strongly advised that you do not include secrets in your source code
|
|
17
16
|
# Use environment variables, and/or secrets management like Vault to obtain your secrets
|
|
18
|
-
api_key: str = getenv(
|
|
17
|
+
api_key: str = getenv("PADDLE_SECRET_API_KEY", None)
|
|
19
18
|
if not api_key:
|
|
20
19
|
raise ValueError("You must provide the PADDLE_SECRET_API_KEY in your environment variables")
|
|
21
20
|
|
|
22
21
|
# Determine the environment, defaulting to sandbox
|
|
23
|
-
environment
|
|
24
|
-
paddle_environment = getattr(Environment, environment) # E.g. Environment.sandbox
|
|
22
|
+
environment = Environment(getenv("PADDLE_ENVIRONMENT", "sandbox"))
|
|
25
23
|
|
|
26
24
|
# Initialize the Paddle client
|
|
27
|
-
paddle = Client(api_key, options=Options(
|
|
25
|
+
paddle = Client(api_key, options=Options(environment), logger=log)
|
|
28
26
|
|
|
29
27
|
# Placeholder for the last processed event ID
|
|
30
|
-
last_processed_event_id =
|
|
28
|
+
last_processed_event_id = "evt_01hfxx8t6ek9h399srcrp36jt3"
|
|
31
29
|
|
|
32
30
|
events = None
|
|
33
31
|
try:
|
|
34
32
|
# List events starting after the last processed event ID
|
|
35
33
|
events = paddle.events.list(ListEvents(Pager(after=last_processed_event_id)))
|
|
36
|
-
except
|
|
34
|
+
except ApiError as error:
|
|
37
35
|
log.error(error)
|
|
38
36
|
# Your additional logic that can handle Paddle's hints about what went wrong
|
|
39
37
|
except Exception as error:
|
|
@@ -49,7 +47,7 @@ if not len(events.items):
|
|
|
49
47
|
|
|
50
48
|
for event in events:
|
|
51
49
|
last_processed_event_id = event.event_id # Update the last processed event ID
|
|
52
|
-
print(f"event: {event.event_id}\t\t Type: {event.event_type.value:28}\t\t Occurred At: {event.occurred_at
|
|
50
|
+
print(f"event: {event.event_id}\t\t Type: {event.event_type.value:28}\t\t Occurred At: {event.occurred_at}")
|
|
53
51
|
# Your additional logic for using each event
|
|
54
52
|
|
|
55
53
|
# Now you're up-to-date, you should keep a record of the last processed event...
|
examples/get_products.py
CHANGED
|
@@ -1,34 +1,37 @@
|
|
|
1
1
|
from logging import getLogger
|
|
2
|
-
from os
|
|
3
|
-
from sys
|
|
2
|
+
from os import getenv
|
|
3
|
+
from sys import exit # You should use classes/functions that returns instead of exits
|
|
4
4
|
|
|
5
5
|
from paddle_billing import Client, Environment, Options
|
|
6
6
|
|
|
7
|
-
from paddle_billing.Exceptions.ApiError
|
|
8
|
-
from paddle_billing.Exceptions.SdkExceptions.MalformedResponse import MalformedResponse
|
|
7
|
+
from paddle_billing.Exceptions.ApiError import ApiError
|
|
9
8
|
|
|
10
|
-
log = getLogger(
|
|
9
|
+
log = getLogger("my_app")
|
|
11
10
|
|
|
12
11
|
# Verify your Paddle API key was provided by a PADDLE_SECRET_API_KEY environment variable
|
|
13
12
|
# It is strongly advised that you do not include secrets in your source code
|
|
14
13
|
# Use environment variables, and/or secrets management like Vault to obtain your secrets
|
|
15
|
-
api_key = getenv(
|
|
14
|
+
api_key = getenv("PADDLE_SECRET_API_KEY", None)
|
|
16
15
|
if not api_key:
|
|
17
16
|
raise ValueError("You must provide the PADDLE_SECRET_API_KEY in your environment variables")
|
|
18
17
|
|
|
19
18
|
# Determine the environment, defaulting to sandbox
|
|
20
|
-
environment
|
|
21
|
-
paddle_environment = getattr(Environment, environment) # E.g. Environment.sandbox
|
|
19
|
+
environment = Environment(getenv("PADDLE_ENVIRONMENT", "sandbox"))
|
|
22
20
|
|
|
23
21
|
# Initialize the Paddle client
|
|
24
|
-
paddle = Client(api_key, options=Options(
|
|
22
|
+
paddle = Client(api_key, options=Options(environment), logger=log)
|
|
25
23
|
|
|
26
24
|
products = None
|
|
27
25
|
try:
|
|
28
26
|
products = paddle.products.list()
|
|
29
|
-
except
|
|
27
|
+
except ApiError as error:
|
|
30
28
|
log.error(error)
|
|
31
|
-
# Your additional logic that can handle Paddle's hints about what went wrong
|
|
29
|
+
# Your additional logic that can handle Paddle's hints about what went wrong.
|
|
30
|
+
print(f"error_type: {error.error_type}")
|
|
31
|
+
print(f"error_code: {error.error_code}")
|
|
32
|
+
print(f"detail: {error.detail}")
|
|
33
|
+
print(f"field_errors: {error.field_errors}")
|
|
34
|
+
print(f"response.status_code: {error.response.status_code}")
|
|
32
35
|
except Exception as error:
|
|
33
36
|
log.error(f"We received an error listing products: {error}")
|
|
34
37
|
|
examples/logger.py
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from os
|
|
3
|
+
from os import getenv
|
|
4
4
|
from paddle_billing import Client, Environment, Options
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
# Verify your Paddle API key was provided by a PADDLE_SECRET_API_KEY environment variable
|
|
8
8
|
# It is strongly advised that you do not include secrets in your source code
|
|
9
9
|
# Use environment variables, and/or secrets management like Vault to obtain your secrets
|
|
10
|
-
api_key = getenv(
|
|
10
|
+
api_key = getenv("PADDLE_SECRET_API_KEY", None)
|
|
11
11
|
if not api_key:
|
|
12
12
|
raise ValueError("You must provide the PADDLE_SECRET_API_KEY in your environment variables")
|
|
13
13
|
|
|
14
14
|
# Determine the environment, defaulting to sandbox
|
|
15
|
-
environment
|
|
16
|
-
paddle_environment = getattr(Environment, environment) # E.g. Environment.sandbox
|
|
15
|
+
environment = Environment(getenv("PADDLE_ENVIRONMENT", "sandbox"))
|
|
17
16
|
|
|
18
17
|
# Initialize the Paddle client
|
|
19
18
|
paddle = Client(
|
|
20
19
|
api_key,
|
|
21
|
-
options
|
|
22
|
-
logger
|
|
20
|
+
options=Options(environment),
|
|
21
|
+
logger=logging.getLogger("my_app"),
|
|
23
22
|
)
|
|
24
23
|
|
|
25
24
|
# Set up logging to standard output
|
|
@@ -28,4 +27,7 @@ stdout_handler.setLevel(logging.INFO)
|
|
|
28
27
|
paddle.log.addHandler(stdout_handler)
|
|
29
28
|
|
|
30
29
|
# List products
|
|
31
|
-
paddle.products.list()
|
|
30
|
+
products = paddle.products.list()
|
|
31
|
+
|
|
32
|
+
for product in products:
|
|
33
|
+
print(f"Product's id: {product.id}")
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from paddle_billing.Entities.Notifications import NotificationEvent
|
|
2
|
+
from paddle_billing.Notifications import Secret, Verifier
|
|
3
|
+
from examples.Utils.Requests.Request import Request
|
|
4
|
+
|
|
5
|
+
# This example requires environment variable TEST_MODE=1 to disable time drift checks, e.g.
|
|
6
|
+
# TEST_MODE=1 python webhook_verification.py
|
|
7
|
+
|
|
8
|
+
secret = "pdl_ntfset_01hs0t3tw21j988db1pam5xg8m_GrOWLNef+vmtjJYq4mSnHNzvc8uWoJ1I"
|
|
9
|
+
|
|
10
|
+
request = Request.create_from_fixture(
|
|
11
|
+
"webhook_payload.json",
|
|
12
|
+
{
|
|
13
|
+
"Paddle-Signature": "ts=1710498758;h1=558bf93944dbeb4790c7a8af6cb2ea435c8ca9c8396aafc1a4e37424ac132744",
|
|
14
|
+
},
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
integrity_check = Verifier().verify(request, Secret(secret))
|
|
18
|
+
|
|
19
|
+
if integrity_check is True:
|
|
20
|
+
print("Webhook is verified")
|
|
21
|
+
|
|
22
|
+
notification = NotificationEvent.from_request(request)
|
|
23
|
+
print(f"Notification ID: {notification.notification_id}")
|
|
24
|
+
print(f"Event ID: {notification.event_id}")
|
|
25
|
+
print(f"Event Type: {notification.event_type}")
|
|
26
|
+
print(f"Occurred At: {notification.occurred_at}")
|
|
27
|
+
|
|
28
|
+
customer = notification.data
|
|
29
|
+
print(f"Customer ID: {customer.id}")
|
|
30
|
+
print(f"Customer Name: {customer.name}")
|
|
31
|
+
print(f"Customer Email: {customer.email}")
|
|
32
|
+
else:
|
|
33
|
+
print("Webhook is not verified")
|