Skip to main content

A fast DynamoDB ORM for Python with a Rust core

Project description

pydynox 🐍⚙️

Main PyPI version Python versions License Downloads OpenSSF Scorecard OpenSSF Best Practices

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

🎉 v1.0 is here! The API is stable and fully async. Production-ready with a Rust core for speed.

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(partition_key=True)
    sk = StringAttribute(sort_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(partition_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(partition_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(partition_key=True)
    email = StringAttribute()
    
    email_index = GlobalSecondaryIndex(
        index_name="email-index",
        partition_key="email",
    )

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

# Sync
for user in User.email_index.sync_query(partition_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", partition_key="pk", sort_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(partition_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-1.2.0.tar.gz (557.8 kB view details)

Uploaded Source

Built Distributions

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

pydynox-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pydynox-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pydynox-1.2.0-cp314-cp314-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pydynox-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pydynox-1.2.0-cp313-cp313-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pydynox-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pydynox-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pydynox-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pydynox-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pydynox-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pydynox-1.2.0.tar.gz
Algorithm Hash digest
SHA256 0beefc4e2486d8ba64b9cf092b655bf246fc151600bbbb216ba5a7e071795e60
MD5 0c32a38302c9d1357708d70acbf003c8
BLAKE2b-256 01cc948a7375bba719d6f0183d24b0b470f8f0ce598460cde8eb38ca3d8410b3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 40e237867bcf1dad4be52c8eba8a98e3507fd7cf915a0870a860c45e468f0d9c
MD5 6f7a47635fc8f3a7f94b27e79fb49285
BLAKE2b-256 4c568fd3a8d942eabf358af66ff14b8cdf7eec121ef8d852c64d73efac32b1dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3c506164c19e7ac37d179cda577574785fd4e77ef9688671015f8dcb6dae1599
MD5 a5d86415c9104dd286e60cf0419ab931
BLAKE2b-256 fa6f4ca3fb2685a040045da73313f31977b17b36af2540150089ba8bcef1cfec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54c73ddce043c16a7f11d6d7bdc3870703a68a34725c36d2ecc92d35caa57189
MD5 0da3c68b8110475f17ef216d6aa2b1c9
BLAKE2b-256 80644cffbef7030829f713039875caa77b810147dbbcff043824fcdcd6189ee6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b93fbd1afc0a6939fb9e752837cb2e3e03ed543e35a8630d87e84ed185c51bf6
MD5 b451dc46601e94393fa54cb867335f65
BLAKE2b-256 e327599571aea66766186bca74644b5a62aa511c8e2bba245b99e806cc4c9b05

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ffd3f7512c6eec17a85a6d1a1c1da48d0d37efeb6a5c6fc1a74dc1c98d9a115a
MD5 f68db4fce2c832d977624325cc411473
BLAKE2b-256 77b8fbf1d011a4715dc766b953b63915c3d346db9002ab859404717879adf542

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bc46dee1b239ad97f7c45d8789a5dc3c70bedd13f0cab82bb11c8aa77f5cfbfe
MD5 4831f9e7814033b7ec5be1465cdafb66
BLAKE2b-256 5e601744ed3d4f30329f4449d3f1f19d2e6262a75d848c087a55fcb83cb396ce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d73327f3c03469df68c8571d4a01036a8b79d0373fb047e8d68391395ed4928
MD5 7eb2e019910eae6dcd79084deee81aa3
BLAKE2b-256 da97e6d5ab3bddde967dea881e3aef7d83a348a736dbeb600763d90613f149fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7dabab2437a66382ff72c1ded82eb098117be2a778eb7a571fe7385b93ee5c9a
MD5 faecc39686f4426061a945f32b64267f
BLAKE2b-256 52ffeae7b11cbaf8070f50c1519df35003e0db2c5edd64e77047576e523d9ecb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6130321463e5da7224218f0d44ed1f16ebc4ee8b0ec411ed0a92751bd9950567
MD5 042fd7f4197583aff79f4786c30e8846
BLAKE2b-256 1574c70e02aea8d2e0485b7323b1d15f4ed6f84557a8364442b364303eeb96e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bb12ea84864ffd5ebbaac917d228d15aabaeb1791a29f04a5a2ce9c04aa1475b
MD5 150fc375b659b8304b2ef0aa389b2fca
BLAKE2b-256 0402cbda8ef2d8c1efbf417b188984466450087161cc2fd3e6d80bff5a43c40f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f2650c45b000ede618b6585d2e1a79eecb0d24d644312e9c19e3a0cf730dc9c
MD5 d67d09ab9d6b13cf8ad5027eade8e848
BLAKE2b-256 7fecf6efab2b25bc776c7c2b24ff694e278ae12bdd0cf1c2e0d5fe054bd250cc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b0e11f8e697909ddf6e635cbb037846e2d22d44fa4a1d8a9bdc67180f4551b9e
MD5 d9cec803010d34c0fb940020a2dbe6a6
BLAKE2b-256 d2083de5ed52bcb54a2239e52916bd12c7102aabdb761c19153214e3388bdeda

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbacb64b5e265c53c878944f8f7d21d4d011cbf9f88d11cde1970496854123aa
MD5 685befd76bbc04eda3245332711cb883
BLAKE2b-256 cf5498ee0cb7e8946ae7a4d699585f166b370b3abc08f47591883902ffba06d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 228dc81241990c95aa845130041c28e3a397e0601ff804472415877f3faa436b
MD5 1b4878cea0e21994de8640bb1b2212ae
BLAKE2b-256 da4ccef61fb9e21e57d1726b840d5ca66f1f2cce2d9c4399493b6d5c2497e697

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 170d84aa3b99e17cb318e1681251cec99ce8b535de07f705a0ed1082d2e7afa3
MD5 528e93daa0a47700515f250300e61944
BLAKE2b-256 b83f617458a86f24a4168597c620d58a5c332fe04350d234e467ac4e0d51a065

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dd24f2cadddb83ac009771ecbae60c5d11687579df7ec407de59ef406e367c00
MD5 634253b8bcb58f77ed44c211fefd3de5
BLAKE2b-256 a1520af4e93e6f10f8f0345600eda8874a3c6012a21d5031ab0b304f48401a87

See more details on using hashes here.

Provenance

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