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

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.0.0.tar.gz (538.9 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.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pydynox-1.0.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.0.0-cp314-cp314-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-1.0.0-cp314-cp314-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pydynox-1.0.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.0.0-cp313-cp313-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pydynox-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pydynox-1.0.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.0.0-cp312-cp312-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-1.0.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.0.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.0.0-cp311-cp311-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pydynox-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f9da48a5b347c35228e1fc54dde4bb5ba204378f05a305a35a57061e3ed857cf
MD5 05da3d87565e9fcbf5bc83976f794e40
BLAKE2b-256 630ebe43b99ca725438ce026b92a999b00c338bfa07abee48214718c0b266893

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 49bcfe4d82c75d5fc75cb00bbb6a4a423c18b94f9139f3d4480940fb06798262
MD5 4cad4b1cdae3a0c4357c2bd8a55e616b
BLAKE2b-256 12203aa7eb4881851aa5635a245ad4a9e09dfcf2e6cd398d187cc45a2e918864

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1e796230802a91a9f4d5f8b905b786cf5b89e9b3e85b12b69d5f219159497405
MD5 bcae4275bd072433548a035825b0616a
BLAKE2b-256 981845f7ae84c2dc49de2a0a8d4d762792dac9d10c3f235b37aad614f1863690

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a4dcd90f7ce85499cf2927c32ccc76d11e87768a3bdc4ce47b6c57cecc4a366
MD5 8698c1678e37abed8c992c57c85e49dd
BLAKE2b-256 61a7afdbd2cd7c75cfa817c0d80d7a64036142df573208c5b139201c22289c4a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 59867fafa63d7e8ec9ab816e7b54d576dfd575211c614c68195f7ba4ac7ba29b
MD5 6c82adaf31bb4df80e2fa9d6ac9f4858
BLAKE2b-256 915fb907b6d19871524da3504d0037b76043218b9ebf2142a6b426155a7b2830

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 519cb64a3b201aedf61369f238108e0552e94ba1a3a3e1dec464098e65e94d5d
MD5 b4fd5afe0a12df16a07b4060b17bc788
BLAKE2b-256 e3ff4f0a5361af052fc8aefe26faea7847eddcdf74ab630f6439edabc3f00770

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0d4e27f075fb8b2e49ccc0bcee22d837ab7421a3460916995a392585d679194d
MD5 d6d95440ba320e3f2bbac30666903c18
BLAKE2b-256 d533a771a0a0fb2817c7e957e9cc0d10921d451a91c3fe90c550c58efb5b245a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87401c75f573023e57e417e1eb529af28e2709a10ec32dbf2167a593aa57fb26
MD5 a7c8a66c14e703cb8ca1874985cc842c
BLAKE2b-256 1b344886a3cd4b99939761a3b1d17fdbb9a0699b66cc4724eb26e814bdd2d55b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1c8e9b756f2206c66be7feb73fd5d97b6276fec0430ef312a3fd4832ce126754
MD5 1ea84b37f4ac9f6e78dfe0872842ce6b
BLAKE2b-256 389fdc76ca285dc9453c7981438d7c4b24bbd442c485233a686c57f82b2e1568

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fc16d2d1b6f97c50a9ac6c5d96e23b30497bbd446adf92d6c0ec13a886595572
MD5 468630ab8abbc4f01f657f3adc9d55e1
BLAKE2b-256 f35da726cee0865fca50162c512308401e25c3260e82afc889feb9010f77e1e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 04019ecdc53fc0db969b1a368cf69423acbfddbeb1cba4579e3dd8d9b215bd8b
MD5 723d8306562658aaa927d27dfca9d88a
BLAKE2b-256 bf985ac7085f4899fb5de95db5d4b4f7674b9bdefd25df53bf5b0480ee30b9e6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd37ef6cde57843f1c110aad50e84b675b36f021f5febf02800302b2cf78030e
MD5 f25a425b1dcb331d564845d463be6777
BLAKE2b-256 bb0750877272e8e0b14505e21f8ebec0b6b94d10b41c640e284b60eee1f9942c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e1030b06012f2cdeeeeed276ce8afebd3e3ecde0a5cf86f371dbfaa795a12d6a
MD5 60be3597dcfc13b39f5c0f5037e11a83
BLAKE2b-256 a7497db1375fdb24075f39bda1bd43e1b0372102726780e7db0ee07c44931e52

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a9d471390a9e469a6ab376e4eef8307400dc3f8e0b61be437db8227f34fb045
MD5 dac13332428593aa0113d31bdba814ce
BLAKE2b-256 bb67406bce8f2a4467ebd28474cd84633cb95f15e3b3d4ebc3f2591ede635892

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9c8075597307e80437da303a65c45190e596a2904781e66113a83e5384ce46d3
MD5 ae6b97dca5752e86ec40d474769275bc
BLAKE2b-256 6389d069b21d25905bc426b95f197aa43b097786f18b7ac0163327dab6bdc063

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 725b9d547a17dcbe1fdf427fe21a0137b44271fbb135eb8c9b6f394397257b68
MD5 488bf171f6d8960a9336349e5c697e75
BLAKE2b-256 8a085af0eb15d20aab2e623d8a64bc141559c2797751e109ee46e2c95adbe020

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 01f7b5a08f8cd7c5f8bfc41fba78c96f898310635eaf2a6c91029884135bc43b
MD5 cb4e98cb28dbcf975be20d555bd77983
BLAKE2b-256 95e0d8358ce428eb4017f818c84945db9dc1049ad025f59fd8be090d614230d4

See more details on using hashes here.

Provenance

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