bunnynet
A Python client for the bunny.net APIs.
Installation
pip install bunnynet
Usage
Create a client with your bunny.net account API token:
import bunnynet
client = bunnynet.BunnyClient("your-api-token")
Every request uses a default timeout of 10 seconds. Override it for all
requests by passing timeout (in seconds):
client = bunnynet.BunnyClient("your-api-token", timeout=30)
Storage zones
# Iterate over every storage zone
for zone in client.storage_zones.get_all():
print(zone.name)
# Look one up by id or name (returns None if it doesn't exist)
zone = client.storage_zones.get_by_name("my-zone")
# Upload, read and delete files
client.storage_zones.upload_text_file(
storage_zone=zone,
contents="Hello World",
path="some/path",
file_name="hello.txt",
)
text = client.storage_zones.get_text_file(storage_zone=zone, path="some/path", file_name="hello.txt")
client.storage_zones.delete_file(storage_zone=zone, path="some/path", file_name="hello.txt")
Pull zones
for zone in client.pull_zones.get_all():
print(zone.name)
Provisioning a pull zone
The pull zone client can also create and configure zones:
pull_zones = client.get_pull_zone_client()
zone = pull_zones.get_by_name("my-zone") or pull_zones.create(
name="my-zone",
origin_url="https://origin.example.com",
)
# Apply settings using bunny.net's PascalCase field names. -1 on
# CacheControlMaxAgeOverride tells bunny.net to respect the origin's
# Cache-Control headers.
pull_zones.update(zone.identifier, {
"IgnoreQueryStrings": False,
"EnableQueryStringOrdering": True,
"CacheControlMaxAgeOverride": -1,
})
# Attach a custom hostname, issue a free Let's Encrypt certificate and force
# HTTPS. The hostname's CNAME must resolve to <zone>.b-cdn.net before the
# certificate can be issued.
pull_zones.add_hostname(zone.identifier, "cdn.example.com")
pull_zones.load_free_certificate("cdn.example.com")
pull_zones.set_force_ssl(zone.identifier, "cdn.example.com", force=True)
Signed URLs
import datetime
signed = client.sign_url(
"https://example.b-cdn.net/foo/bar/file.png",
key="your-token-authentication-key",
expiration=datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1),
)
Purging the cache
client.purge_url("https://example.b-cdn.net/foo/bar/file.png")
Development
Install dependencies and run the tests with Poetry:
poetry install
poetry run pytest
The integration tests in tests/test_bunnynet.py require a BUNNY_TOKEN
environment variable and are skipped when it is not set. The offline unit tests
in tests/test_unit.py always run.
License
MIT
Metadata
Release files for bunnynet 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| bunnynet-0.5.0.tar.gz | 15.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bunnynet-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.5 kB
Release files / bunnynet-0.5.0.tar.gz
| Download URL | bunnynet-0.5.0.tar.gz |
|---|---|
| Size | 15.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
822f275dad2e6eb353a3de034add50dce1bbf920f25a178533800a8b041c655e
|
|
BLAKE2b-256 checksum How to use checksums |
5c8c17ae7d00353d82e04d7af5d30b43ffa389057f70f28934a872b7bf01af23
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.2 CPython/3.13.14 Windows/11
|
Release files / bunnynet-0.5.0-py3-none-any.whl
| Download URL | bunnynet-0.5.0-py3-none-any.whl |
|---|---|
| Size | 22.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
55c92c86466b692aeca78413059590cfc56b8bb3376727457abdfa0427201058
|
|
BLAKE2b-256 checksum How to use checksums |
11290b6adf9c41107ddb2fd5baad15d8529169a6aa05747b4e27cb14056f687b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.2 CPython/3.13.14 Windows/11
|
Security for bunnynet 0.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.