- Paddle Classic is the original Paddle API, which is still in use by many merchants. More info can be found here
- If you are looking for the Paddle Classic API wrapper, please see
paddle-client
- If you are looking for the Paddle Classic API wrapper, please see
- Paddle Billing is the new API, which is just launched at 2023, August. Paddle Billing is a complete rewrite of the Paddle Classic API, and is designed to be more flexible and easier to use. More info can be found here
- For Paddle Classic, there is a Django integration available at
dj-paddle
anddjango-paddle
- For Paddle Billing, there is a Work In Progress Django integration available at
django-paddle-billing
- Pydantic models for all API requests and responses
- Tests with
pytest
andVCR.py
for mocking HTTP requests Website stalker
Github Action to monitor any API changes- Pagination support with generator to process pages one by one
- Helper function for signature validation for webhooks
- Products
- Prices
- Discounts
- Customers
- Customer Credit balances
- Addresses
- Businesses
- Transactions
- Subscriptions (except activate)
- Subscription Resume
- Subscription Activate Trialing
- Adjustments
- Pricing Previews
- Reports
- Event types
- Events
- Notification Settings
- Notifications
- Notification logs
pip install -U paddle-billing-client
or install with Poetry
poetry add paddle-billing-client
from paddle_billing_client.client import PaddleApiClient
from apiclient import HeaderAuthentication
client = PaddleApiClient(
base_url="https://sandbox-api.paddle.com",
authentication_method=HeaderAuthentication(token="your-paddle-token")
)
# Create a product
product = client.create_product(
ProductRequest(
name="Test Product New",
tax_category="standard",
description="Test Product Description",
image_url="https://example.com/image.png",
custom_data=dict(foo="bar"),
)
)
# Get all products
products = client.list_products()
# Get all prices
plans = client.list_prices()
# Pagination
from paddle_billing_client.pagination import paginate
from paddle_billing_client.models.notification import NotificationQueryParams
for notification in paginate(client.list_notifications, query_params=NotificationQueryParams(
status="delivered",
after='ntf_01hb1n6nw8yx1wwts2cyh632s9',
per_page=10
)):
# Process notifications page by page
print("Notification:")
print(len(notification.data))
print(notification.data[-1].id)
To print the raw exception response, you can use the VerboseErrorHandler
:
from paddle_billing_client.client import PaddleApiClient
from apiclient import HeaderAuthentication
from paddle_billing_client.errors import VerboseErrorHandler
client = PaddleApiClient(
base_url="https://sandbox-api.paddle.com",
authentication_method=HeaderAuthentication(token="your-paddle-token"),
error_handler=VerboseErrorHandler
)
- Sandbox API url:
https://sandbox-api.paddle.com/
- Live API url:
https://api.paddle.com/
More usage examples can be found in tests.
from paddle_billing_client.helpers import validate_webhook_signature
# Validate webhook signature
is_valid = validate_webhook_signature(
signature_header=request.headers.get("HTTP_PADDLE_SIGNATURE"),
raw_body=request.data,
secret_key="your-paddle-secret-key",
)
Makefile
contains a lot of functions for faster development.
1. Download and remove Poetry
To download and install Poetry run:
make poetry-download
To uninstall
make poetry-remove
2. Install all dependencies and pre-commit hooks
Install requirements:
make install
Pre-commit hooks coulb be installed after git init
via
make pre-commit-install
3. Codestyle
Automatic formatting uses pyupgrade
, isort
and black
.
make codestyle
# or use synonym
make formatting
Codestyle checks only, without rewriting files:
make check-codestyle
Note:
check-codestyle
usesisort
,black
anddarglint
library
Update all dev libraries to the latest version using one comand
make update-dev-deps
4. Code security
make check-safety
This command launches Poetry
integrity checks as well as identifies security issues with Safety
and Bandit
.
make check-safety
5. Type checks
Run mypy
static type checker
make mypy
6. Tests with coverage badges
Run pytest
make test
7. All linters
Of course there is a command to rule run all linters in one:
make lint
the same as:
make test && make check-codestyle && make mypy && make check-safety
8. Docker
make docker-build
which is equivalent to:
make docker-build VERSION=latest
Remove docker image with
make docker-remove
More information about docker.
9. Cleanup
Delete pycache files
make pycache-remove
Remove package build
make build-remove
Delete .DS_STORE files
make dsstore-remove
Remove .mypycache
make mypycache-remove
Or to remove all above run:
make cleanup
You can see the list of available releases on the GitHub Releases page.
We follow Semantic Versions specification.
We use Release Drafter
. As pull requests are merged, a draft release is kept up-to-date listing the changes, ready to publish when youβre ready. With the categories option, you can categorize pull requests in release notes using labels.
Label | Title in Releases |
---|---|
enhancement , feature |
π Features |
bug , refactoring , bugfix , fix |
π§ Fixes & Refactoring |
build , ci , testing |
π¦ Build System & CI/CD |
breaking |
π₯ Breaking Changes |
documentation |
π Documentation |
dependencies |
β¬οΈ Dependencies updates |
You can update it in release-drafter.yml
.
GitHub creates the bug
, enhancement
, and documentation
labels for you. Dependabot creates the dependencies
label. Create the remaining labels on the Issues tab of your GitHub repository, when you need them.
Building a new version of the application contains steps:
- Bump the version of your package
poetry version <version>
. You can pass the new version explicitly, or a rule such asmajor
,minor
, orpatch
. For more details, refer to the Semantic Versions standard. - Make a commit to
GitHub
. - Create a
GitHub release
. - And... publish π
poetry publish --build
- Supports for
Python 3.7
and higher. Poetry
as the dependencies manager. See configuration inpyproject.toml
andsetup.cfg
.- Automatic codestyle with
black
,isort
andpyupgrade
. - Ready-to-use
pre-commit
hooks with code-formatting. - Type checks with
mypy
; docstring checks withdarglint
; security checks withsafety
andbandit
- Testing with
pytest
. - Ready-to-use
.editorconfig
,.dockerignore
, and.gitignore
. You don't have to worry about those things.
GitHub
integration: issue and pr templates.Github Actions
with predefined build workflow as the default CI/CD.- Everything is already set up for security checks, codestyle checks, code formatting, testing, linting, docker builds, etc with
Makefile
. More details in makefile-usage. - Dockerfile for your package.
- Always up-to-date dependencies with
@dependabot
. You will only enable it. - Automatic drafts of new releases with
Release Drafter
. You may see the list of labels inrelease-drafter.yml
. Works perfectly with Semantic Versions specification.
- Ready-to-use Pull Requests templates and several Issue templates.
- Files such as:
LICENSE
,CONTRIBUTING.md
,CODE_OF_CONDUCT.md
, andSECURITY.md
are generated automatically. Stale bot
that closes abandoned issues after a period of inactivity. (You will only need to setup free plan). Configuration is here.- Semantic Versions specification with
Release Drafter
.
This project is licensed under the terms of the MIT
license. See LICENSE for more details.
@misc{paddle-billing-client,
author = {Benjamin Gervan},
title = {Python wrapper around the new Paddle Billing API},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/websideproject/paddle-billing-client}}
}
This project was generated with python-package-template