Skip to main content

A fast DynamoDB ORM for Python with a Rust core

Project description

pydynox 🐍⚙️

CI PyPI version Python versions License Downloads OpenSSF Scorecard

A fast, async-first DynamoDB ORM for Python with a Rust core.

📢 Stable Release: March 2-6, 2026 - We're in the final stretch! The API is stabilizing, performance is being polished, and we're building the remaining features. We might release earlier if everything goes well. Stay tuned!

Why pydynox?

Py(thon) + Dyn(amoDB) + Ox(ide/Rust)

Key features

  • Async-first - Async by default, sync with sync_ prefix. True non-blocking I/O with Rust's tokio
  • Fast - Rust core for serialization, compression, and encryption. Zero Python runtime dependencies
  • Simple API - Class-based models like PynamoDB. Define once, use everywhere
  • Type-safe - Full type hints for IDE autocomplete and type checkers
  • Pydantic support - Use your existing Pydantic models with DynamoDB
  • Batteries included - TTL, hooks, auto-generate, optimistic locking, rate limiting, encryption, compression, S3 attributes, PartiQL, observability

Installation

pip install pydynox

Optional extras:

pip install pydynox[pydantic]       # Pydantic integration
pip install pydynox[opentelemetry]  # OpenTelemetry tracing

Quick start

Define a model

from pydynox import Model, ModelConfig
from pydynox.attributes import StringAttribute, NumberAttribute

class User(Model):
    model_config = ModelConfig(table="users")
    
    pk = StringAttribute(hash_key=True)
    sk = StringAttribute(range_key=True)
    name = StringAttribute()
    age = NumberAttribute(default=0)

Async operations (default)

Async methods have no prefix. This is the default.

import asyncio

async def main():
    # Create
    user = User(pk="USER#123", sk="PROFILE", name="John")
    await user.save()

    # Read
    user = await User.get(pk="USER#123", sk="PROFILE")

    # Update
    await user.update(name="Jane", age=30)

    # Query
    async for user in User.query(hash_key="USER#123"):
        print(user.name)

    # Delete
    await user.delete()

asyncio.run(main())

Sync operations (use sync_ prefix)

For scripts, CLI tools, or code that doesn't need async.

# Create
user = User(pk="USER#123", sk="PROFILE", name="John")
user.sync_save()

# Read
user = User.sync_get(pk="USER#123", sk="PROFILE")

# Update
user.sync_update(name="Jane", age=30)

# Query
for user in User.sync_query(hash_key="USER#123"):
    print(user.name)

# Delete
user.sync_delete()

Async-first API

pydynox is async-first. Methods without prefix are async, methods with sync_ prefix are sync.

Async (default) Sync
await model.save() model.sync_save()
await model.delete() model.sync_delete()
await model.update() model.sync_update()
await Model.get() Model.sync_get()
async for x in Model.query() for x in Model.sync_query()
async for x in Model.scan() for x in Model.sync_scan()
await Model.batch_get() Model.sync_batch_get()
async with BatchWriter() with SyncBatchWriter()

Why async? Python's GIL blocks threads during I/O. With async, your app can handle other work while waiting for DynamoDB. pydynox releases the GIL during network calls, so async operations are truly non-blocking.

Conditions

# Save only if item doesn't exist
await user.save(condition=User.pk.not_exists())

# Delete with condition
await user.delete(condition=User.version == 5)

# Combine with & (AND) and | (OR)
await user.save(condition=User.pk.not_exists() | (User.version == 1))

Atomic updates

# Increment
await user.update(atomic=[User.age.add(1)])

# Append to list
await user.update(atomic=[User.tags.append(["verified"])])

# Multiple operations
await user.update(atomic=[
    User.age.add(1),
    User.tags.append(["premium"]),
])

Batch operations

from pydynox import BatchWriter, SyncBatchWriter, DynamoDBClient

client = DynamoDBClient()

# Async (default)
async with BatchWriter(client, "users") as batch:
    for i in range(100):
        batch.put({"pk": f"USER#{i}", "sk": "PROFILE", "name": f"User {i}"})

# Sync
with SyncBatchWriter(client, "users") as batch:
    batch.put({"pk": "USER#1", "sk": "PROFILE", "name": "John"})

Global Secondary Index

from pydynox.indexes import GlobalSecondaryIndex

class User(Model):
    model_config = ModelConfig(table="users")
    
    pk = StringAttribute(hash_key=True)
    email = StringAttribute()
    
    email_index = GlobalSecondaryIndex(
        index_name="email-index",
        hash_key="email",
    )

# Async
async for user in User.email_index.query(hash_key="john@test.com"):
    print(user.name)

# Sync
for user in User.email_index.sync_query(hash_key="john@test.com"):
    print(user.name)

Transactions

from pydynox import DynamoDBClient, Transaction

client = DynamoDBClient()

async with Transaction(client) as tx:
    tx.put("users", {"pk": "USER#1", "sk": "PROFILE", "name": "John"})
    tx.put("orders", {"pk": "ORDER#1", "sk": "DETAILS", "user": "USER#1"})

Pydantic integration

from pydantic import BaseModel, EmailStr
from pydynox import DynamoDBClient
from pydynox.integrations.pydantic import dynamodb_model

client = DynamoDBClient()

@dynamodb_model(table="users", hash_key="pk", range_key="sk", client=client)
class User(BaseModel):
    pk: str
    sk: str
    name: str
    email: EmailStr

# Async (default)
user = User(pk="USER#123", sk="PROFILE", name="John", email="john@test.com")
await user.save()
user = await User.get(pk="USER#123", sk="PROFILE")

# Sync
user.sync_save()
user = User.sync_get(pk="USER#123", sk="PROFILE")

S3 attribute (large files)

DynamoDB has a 400KB item limit. S3Attribute stores files in S3 and keeps metadata in DynamoDB.

from pydynox.attributes import S3Attribute, S3File

class Document(Model):
    model_config = ModelConfig(table="documents")
    
    pk = StringAttribute(hash_key=True)
    content = S3Attribute(bucket="my-bucket", prefix="docs/")

# Upload
doc = Document(pk="DOC#1")
doc.content = S3File(b"...", name="report.pdf", content_type="application/pdf")
await doc.save()

# Download (async)
data = await doc.content.get_bytes()
await doc.content.save_to("/path/to/file.pdf")
url = await doc.content.presigned_url(3600)

# Download (sync)
data = doc.content.sync_get_bytes()
doc.content.sync_save_to("/path/to/file.pdf")

Table management

# Async (default)
await User.create_table(wait=True)
if await User.table_exists():
    print("Table exists")

# Sync
User.sync_create_table(wait=True)
if User.sync_table_exists():
    print("Table exists")

GenAI contributions 🤖

I believe GenAI is transforming how we build software. It's a powerful tool that accelerates development when used by developers who understand what they're doing.

To support both humans and AI agents, I created:

  • .ai/ folder - Guidelines for agentic IDEs (Cursor, Windsurf, Kiro, etc.)
  • ADR/ folder - Architecture Decision Records for humans to understand the "why" behind decisions

If you're contributing with AI help:

  • Understand what the AI generated before submitting
  • Make sure the code follows the project patterns
  • Test your changes

I reserve the right to reject low-quality PRs where project patterns are not followed and it's clear that GenAI was driving instead of the developer.

Documentation

Full documentation: https://ferrumio.github.io/pydynox

License

Apache 2.0 License

Inspirations

  • PynamoDB - The ORM-style API and model design
  • Pydantic - Data validation patterns
  • dynarust - Rust DynamoDB client patterns
  • dyntastic - Pydantic + DynamoDB integration ideas

Building from source

# Clone
git clone https://github.com/ferrumio/pydynox.git
cd pydynox

# Build (requires Python 3.11+, Rust 1.70+)
pip install maturin
maturin develop

# Test
pip install -e ".[dev]"
pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydynox-0.23.0.tar.gz (503.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pydynox-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pydynox-0.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pydynox-0.23.0-cp314-cp314-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-0.23.0-cp314-cp314-macosx_10_12_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pydynox-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pydynox-0.23.0-cp313-cp313-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pydynox-0.23.0-cp313-cp313-macosx_10_12_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pydynox-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pydynox-0.23.0-cp312-cp312-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-0.23.0-cp312-cp312-macosx_10_12_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pydynox-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pydynox-0.23.0-cp311-cp311-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file pydynox-0.23.0.tar.gz.

File metadata

  • Download URL: pydynox-0.23.0.tar.gz
  • Upload date:
  • Size: 503.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pydynox-0.23.0.tar.gz
Algorithm Hash digest
SHA256 3a372c3c0da9693103b5980f82a229809bb6a205e4b6011a9704b1d5268d8933
MD5 703dab5c0a0c67c5a47c61967d377895
BLAKE2b-256 0322ac31f2a7e5257b52f4ae1e3d0eec958a4ea88e81d09c99d8fd3b6b0d0fb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0.tar.gz:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 25681e16dbc863ec1c984caeb99fa9746834183874f16adfff8a2e627eae5d7c
MD5 f041bd2896e278f16fd67c315467250d
BLAKE2b-256 b29343547666ce8d56d41efa21cca68c0eab2acedb96730df7c72dc3bb7791cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b81d6492fe66be81db12515c9cd1ed4415fad349ca8365862d82cf382a0812cd
MD5 3645cd8c045f3112b62456d061d8b4fa
BLAKE2b-256 37f6520acb9aa3011738be9bebc4d640234bf531aea8e6e33593d79fda6aea25

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b799385d0b9c0cb65bc12c3815dd7d0df5354baca38fa5f121871116edc3a5a3
MD5 774cd2a53b97a372ab2107bedb2e29b8
BLAKE2b-256 ba2ad1a3ffa770d7deae7cbd50ead7a0fac6dca270862905989ba9cb3ae6f6e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3a867d703a739a60d4b6aacde4da332a927fd2d8b7742be85eeb485a835a6a6b
MD5 536a473f3952bf761e0c85b7cc7e4e3b
BLAKE2b-256 418ea8cfb1fb0ab31eed87b6ec88259c3f6bab79721a934198469ca55fe456f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a3a10cc261eda0bb1cd25d7909b4ae6163831180e5056a71e55ffa169f790831
MD5 ba4db3261f5fade0e13a3b0e3c931417
BLAKE2b-256 e78c1f3aaa85a78c6f3889e2d823373aa011eda431c49cb8c730c13d087e756a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 afec7af99e29e298ba9d8eb5a075f2f7c20ef9e4788a20ff63475136d48ee69f
MD5 91accf01afb3e3e23d000298729cf52e
BLAKE2b-256 a1c8121ec79c58d602c51185974ac2809143bfd949834cb9e7450e42699e9592

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e28787c3212e26da1fe10bbb3ded991f09958b2b6a19c11c8bf0cf4e01e3d4b
MD5 996d9a96191a983f3df8e305f4426172
BLAKE2b-256 f64a6e589e9fcc645efc3242dce1463979c8a7d7aa3a7127998a476eaa1fb919

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2741e916dfcf44784aa454969537421f34adc41271234b386292350407f4c3cc
MD5 d85cf2523f1d05053b2a92aa8cbb3dd2
BLAKE2b-256 b9aa32cd760460b1ace8f46893e916c0b2c9cac19ae4548f71ac701f36f0cdab

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8708f4297066a8e1f318c678331ac7c7e3cea68c6b9a64e2d0fa8171abf8c355
MD5 393515f4ceae662edbbbbaee56a431d9
BLAKE2b-256 4e1e603403f7ace26ef8d865183c65e9b3fb38b207a4c03a7f49528d5a04d83c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fba7fde9eb53a1ce530e154c56eff1fb79d3094eea933722361c9aa2ce593e6c
MD5 05402c2379eb4c8833944305697dc209
BLAKE2b-256 03f390b9dbb5a3d5350ca0533d1e17dd662fbd2c91a40ceb57c171bb7c5add8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87cd20fe5a0206da0dc2818d1f663155e9367bad48d557975af98431d3764799
MD5 0c6776cd8fd87db09df12cd25c9afb2d
BLAKE2b-256 fb3f6a30ebf2430c6cd533fcb59703da18ce784b301949cf302f105214efd996

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d49a361541366d1c570fb07e212b3106f0e1b947f7843262e780cacb8f058cb3
MD5 c4b4f55d022a817f332954c40c8e6155
BLAKE2b-256 711f084bb7fe932eb97c54d8777ea9fe8c1a2b9e4c2b76c8b87048fe4162e409

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d9c9aa032f60f5ba63b355a0832a721fda49de88d66ef94858099a82b0db5c9
MD5 a903ec6eb4b0af1a594527eb1eb174e6
BLAKE2b-256 2519f42fbc36973388a484776acaab4c23ee70acb2a6155ca25101cdfb841b6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1dccaf4c83a255cdd2ca81d83e1a634e9890b5477f1413c34b8a196a74d4cbe6
MD5 7e64e22501202ea4b068bea7cc0353fb
BLAKE2b-256 2441eb427cbbd1d5d5c8a7d82e5b5d703bc338d8ce36e133dd73c77558fdb521

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5f7440e21de657c62131291945a8a315fe05eac325a4867f9bd861c05b0c541
MD5 4f12fa9e5ab2a334487de751ec79f2fd
BLAKE2b-256 9f4696e12229a2f5c08db23a782843cbc954128bdded69192c2b95cfa3f159b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydynox-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 72513d79dab4e660c6de81df5a818601224f98491ac74c16c0341fd9b9b65f73
MD5 e01143769cde964d639c8dea7265cbcb
BLAKE2b-256 8709957c99b6c599164d819a1bc5443fb58b96b4ece26482d9bd2452110021a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yml on ferrumio/pydynox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page