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.22.0.tar.gz (492.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.22.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.22.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.22.0-cp314-cp314-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-0.22.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.22.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.22.0-cp313-cp313-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-0.22.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.22.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.22.0-cp312-cp312-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-0.22.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.22.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.22.0-cp311-cp311-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-0.22.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.22.0.tar.gz.

File metadata

  • Download URL: pydynox-0.22.0.tar.gz
  • Upload date:
  • Size: 492.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.22.0.tar.gz
Algorithm Hash digest
SHA256 0ea4f12c98ad56b79190b40b8cfa2b2d143ae85eab8fc660f2b5edc39c4db49a
MD5 35ae9ff07192818b9fdd98a934c05e35
BLAKE2b-256 f7a632ff8251439f2f6aad8bdd17b486839048cac15150086f2ce420cc5766c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a219ece54ba9cb8fa3049365673d2048a0781537c7bb1bb9e53e18c6a4230fe5
MD5 0a3ff2686e944afe75565ffe8e36d45f
BLAKE2b-256 bc66407588a6f920c3293320b96eb6d0bff1f17810f512f0030e9425c7aec80d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c779a3a32cb85733bf50873a795bc351518d381720111057f4609b06534f5096
MD5 51bcaab9288a59e798ecd866c4cdc495
BLAKE2b-256 ccc863f58c6ae37337952d9f2b81caf41378a79b3121fda2cadbda5099090744

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e10d28ee830291209eb7dd4c1abef92a9b07b89b1dd8742601b0e4c2b5335e4
MD5 2a12e91ad27a9f86c9c78363b7d99377
BLAKE2b-256 aac37606fef83439981f31d5f2e0466ca508ee76ad26929cfa7e3d3d37b0854c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3b79a55fd461beb8b50a69e118755d723643c754ec331eada779c76e05751fcc
MD5 02c4068f910afcb36e532317dc402bf0
BLAKE2b-256 1a9521fc5130feee41c8b4858815c132edf8658b7d8e61010175dc1b5daedd21

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e28cdd03afd1bb6ef9c90cad77953db3f2ce9724b7fe4fd007a84d3fea2c4bb6
MD5 35b9a7ac6bd89e8f14a99ce89fa1c3d6
BLAKE2b-256 4d651aed7f6849515e7e94257cbda34d5dba3b98f2b41ea5805ce25118b9d692

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8370112069db95b18fa11e472594ffaffbfd6ea4f191f2eb58dbcb5c638c7a6b
MD5 b2c5ec0c3fd8ee0601dc8ce6ea38bbb6
BLAKE2b-256 c22d19fc5c63b06baf8fa6c2f186bbf22f9b577bcdd1d85e24afde700eafd8ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3df93b5acd35f7332d1a36598b1818825fb438926d6e856c2de40dbffea6c563
MD5 87da3e50d7d202b6a359bd282baebe0b
BLAKE2b-256 adf34734289e30c29f958d638aa9c93b47a03a24f05e33c32ee296fe19b98f59

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bbad59336ed359e473b4ca002879ee1c52f5c0af1f231a13d45ca6da70276ec3
MD5 ad0b74cce68c44675736266173b9b383
BLAKE2b-256 57f7ec01a1d4f15651421b340f700561cfb0c19c01270e6d28e928fb8b01466c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 01db2a6d9fe44c50842f54a66c3d765e38c920ca6c57b795d4d7d020e2d9bc19
MD5 7a0c5ef796cd8622846720a9214530ed
BLAKE2b-256 5c76a780ba238808e047f452f37754da35bbc6104a02e2b6643efc2ce9bf9744

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 18b7a2bb13cfaad24704e4b5ba9d4d1912abe9e62ab8457cadac5b2f803c009d
MD5 8de5047529ff0456ab4f057352b1efb4
BLAKE2b-256 a1831b5436e86feedb3419ed164cadd1cb9de7b8594c5e66a148813ac820e4c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcde213dc328e657e1398fa5fe9474a4216c7757dc3e8f3f9e51b6e902c9d42a
MD5 d0a1f5d0b7f29c02f5717b453b51b32b
BLAKE2b-256 ff978e74ec74d64e09c3873879e9436c5c099f08b62d25a41a9d1b8b087c1efc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5bf14883f89fc119c8c1467705dcb4652efea086557be6860bd436cdbf91d742
MD5 1125ee66828ead544c42bcbba7123fed
BLAKE2b-256 fa8896f6c38c841b350db990a2d63acda3512079135081c75aecb1d71198b33c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60986e6fd709d8f0aa74562dff9e60f55c52ea247308f464547065b4874dfd84
MD5 1383ad8fff9e028cdd6f42f21302bbcc
BLAKE2b-256 7b8382af6c9152ee1182f26555efda9bc69c602b075ca9135da6d1188b5ccc82

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f3933d0035f075cd364cfb8589ebcbed01790e83bd85828aafded0f958ece763
MD5 483135b2303f6e9e69a6f6235b96f6eb
BLAKE2b-256 9c0964edf8ff6b0baf963bfeb37de1773e759c841e7cfe8ba5f2c85568eb0e12

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 554bea7aac7f30f7c5c1d83e28e286c3eb8741aafbb9464dee26ada55d154430
MD5 91564fb3c45010681fcb0ba18cf69b8c
BLAKE2b-256 913cb3e5c1fc7112b3b19178f3eda4452cc399dd2796f5d894a1714ef7db4a3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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.22.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.22.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a3731238536b4e735e8b5f3ad5798894907b0899b1b75844edbcce723b709dbe
MD5 f21776b440d03ac68e353c46fc1b7857
BLAKE2b-256 968b2eb573e38a85d921d4d98b83383e0dc8669c74c761ea8d43a60d45fba80e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydynox-0.22.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