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 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)

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.

Features

  • Simple class-based API like PynamoDB
  • Fast serialization with Rust
  • Batch operations with auto-splitting
  • Transactions
  • Global Secondary Indexes
  • Async support
  • Pydantic integration
  • TTL (auto-expiring items)
  • Lifecycle hooks
  • Auto-generate IDs and timestamps
  • Optimistic locking
  • Rate limiting
  • Field encryption (KMS)
  • Compression (zstd, lz4, gzip)
  • S3 attribute for large files
  • PartiQL support
  • Observability (logging, metrics, OpenTelemetry tracing)

Installation

pip install pydynox

For Pydantic support:

pip install pydynox[pydantic]

For OpenTelemetry tracing:

pip install pydynox[opentelemetry]

Quick Start

Define a Model

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

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

CRUD Operations

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

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

# Update - full save
user.name = "John Doe"
user.save()

# Update - partial
user.update(name="John Doe", age=31)

# Delete
user.delete()

Query

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

# With range key condition
for user in User.query(
    hash_key="USER#123",
    range_key_condition=User.sk.begins_with("ORDER#")
):
    print(user.sk)

# With filter
for user in User.query(
    hash_key="USER#123",
    filter_condition=User.age > 18
):
    print(user.name)

# Get first result
first = User.query(hash_key="USER#123").first()

# Collect all
users = list(User.query(hash_key="USER#123"))

Conditions

Conditions use attribute operators directly:

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

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

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

Available condition methods:

  • User.field == value - equals
  • User.field != value - not equals
  • User.field > value - greater than
  • User.field >= value - greater than or equal
  • User.field < value - less than
  • User.field <= value - less than or equal
  • User.field.exists() - attribute exists
  • User.field.not_exists() - attribute does not exist
  • User.field.begins_with(prefix) - string starts with
  • User.field.contains(value) - string or list contains
  • User.field.between(low, high) - value in range
  • User.field.is_in(val1, val2, ...) - value in list

Atomic Updates

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

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

# Remove from list
user.update(atomic=[User.tags.remove([0])])  # Remove first element

# Set if not exists
user.update(atomic=[User.views.if_not_exists(0)])

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

# With condition
user.update(
    atomic=[User.age.add(1)],
    condition=User.status == "active"
)

Batch Operations

from pydynox import BatchWriter, DynamoDBClient

client = DynamoDBClient()

# Batch write - items are sent in groups of 25
with BatchWriter(client, "users") as batch:
    for i in range(100):
        batch.put({"pk": f"USER#{i}", "sk": "PROFILE", "name": f"User {i}"})

# Mix puts and deletes
with BatchWriter(client, "users") as batch:
    batch.put({"pk": "USER#1", "sk": "PROFILE", "name": "John"})
    batch.delete({"pk": "USER#2", "sk": "PROFILE"})

Global Secondary Index

from pydynox import Model, ModelConfig
from pydynox.attributes import StringAttribute
from pydynox.indexes import GlobalSecondaryIndex

class User(Model):
    model_config = ModelConfig(table="users")
    
    pk = StringAttribute(hash_key=True)
    sk = StringAttribute(range_key=True)
    email = StringAttribute()
    status = StringAttribute()
    
    # GSI with hash key only
    email_index = GlobalSecondaryIndex(
        index_name="email-index",
        hash_key="email",
    )
    
    # GSI with hash and range key
    status_index = GlobalSecondaryIndex(
        index_name="status-index",
        hash_key="status",
        range_key="pk",
    )

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

Transactions

from pydynox import DynamoDBClient, Transaction

client = DynamoDBClient()

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"})
    tx.delete("temp", {"pk": "TEMP#1"})

Async Support

# All methods have async versions with async_ prefix
user = await User.async_get(pk="USER#123", sk="PROFILE")
await user.async_save()
await user.async_update(name="Jane")
await user.async_delete()

# Async iteration
async for user in User.async_query(hash_key="USER#123"):
    print(user.name)

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
    age: int = 0

# Pydantic validation works
user = User(pk="USER#123", sk="PROFILE", name="John", email="john@test.com")
user.save()

# Get
user = User.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. Upload on save, download on demand, delete when the item is deleted.

from pydynox import Model, ModelConfig
from pydynox.attributes import StringAttribute, S3Attribute
from pydynox._internal._s3 import 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")
doc.save()

# Download
doc = Document.get(pk="DOC#1")
data = doc.content.get_bytes()           # Load to memory
doc.content.save_to("/path/to/file.pdf") # Stream to file
url = doc.content.presigned_url(3600)    # Share via URL

# Metadata (no S3 call)
print(doc.content.size)
print(doc.content.content_type)

# Delete - removes from both DynamoDB and S3
doc.delete()

Table Management

from pydynox import DynamoDBClient

client = DynamoDBClient()

# Create table
client.create_table(
    "users",
    hash_key=("pk", "S"),
    range_key=("sk", "S"),
    wait=True,
)

# Create with on-demand billing (default)
client.create_table(
    "users",
    hash_key=("pk", "S"),
    billing_mode="PAY_PER_REQUEST",
)

# Create with provisioned capacity
client.create_table(
    "users",
    hash_key=("pk", "S"),
    billing_mode="PROVISIONED",
    read_capacity=10,
    write_capacity=5,
)

# Check if table exists
if not client.table_exists("users"):
    client.create_table("users", hash_key=("pk", "S"))

# Delete table
client.delete_table("users")

Documentation

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

License

MIT License

Inspirations

This project was inspired by:

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

Building from Source

Requirements

  • Python 3.11+
  • Rust 1.70+
  • maturin

Setup

# Clone the repo
git clone https://github.com/leandrodamascena/pydynox.git
cd pydynox

# Install maturin
pip install maturin

# Build and install locally
maturin develop

# Or with uv
uv run maturin develop

Running Tests

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
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.18.0.tar.gz (432.7 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.18.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pydynox-0.18.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.18.0-cp314-cp314-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-0.18.0-cp314-cp314-macosx_10_12_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-0.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pydynox-0.18.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.18.0-cp313-cp313-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pydynox-0.18.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.18.0-cp312-cp312-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pydynox-0.18.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.18.0-cp311-cp311-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pydynox-0.18.0.tar.gz
Algorithm Hash digest
SHA256 6db85d1afcd43b4685c6decf1a35abf8a71403bea593b969382374c38fc5b981
MD5 b18eac678260ceda08572b7f5f7453e3
BLAKE2b-256 d6dbe22b96f9d835c7156ea8926321587392f18f44e20270534831613938965c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2e3de6b95b273ca6236cae678757fbb7ea16872b593f856afe7263790000ae4
MD5 ad0179337b1a1e60ba16e84925845eb6
BLAKE2b-256 398b86f3a3257ebd3e8f38a720addb965bdcb4ec261e05b279418dedfbaf74e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 66674d94970d23771fc5d8f2d93105e8922b331474a81334e713aad122cf049b
MD5 2f5cb2418f49611981144a8edc45ef00
BLAKE2b-256 88c7374fd749e58e6ddba42f0d4d344188b8a7b1083018382a2e801d6d57667e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47e91b6f0b660855d7d2f0823c0a76e4b01039e456dc124bbeecc952f7ff21b1
MD5 6fa58ec60d358f092f0cf944b7d9ff4b
BLAKE2b-256 2d6fa938a905516dfd5df17635a07b568800885907022a14b464c2adf768d37b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 31407818b22c135224da749c70af30fdb714783961607deac93409775309dc38
MD5 79c98554d96702f6978565c4c2bcac29
BLAKE2b-256 1f099016c407e812e9eeed5bc3751302e383e811a4cad713b09492dce40d1182

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a714fe10ac4e9aac6d6e1af2759e45dd804cf020c1377a68dec93a8d26746529
MD5 5108d6f7214c7a0946b6a29e35c40bb5
BLAKE2b-256 c865851323e02bbd216915c6f1cfafb3b0465cbad17bfb6c17acc1d90ed4e4c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 41b697ce54f7d131363cdfb3620e74a29e597c065947833047b3916cbaf54456
MD5 35787e414f28214a00b435a94f8794c9
BLAKE2b-256 01619122abd12eaa27724618cf976736835b8f2fad41a862c6bc735a75efabf8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c68775dca4e8fbd24b0b93835b5cafac1dbc40d2aa56bf2ea8bf9af9d561e0e
MD5 eb04ee670f228e8b084bcce301b90569
BLAKE2b-256 91bfa86f107d20eedd0bca0caed089067ef312626f8597dd34738c962f83f87e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4a78cbb37dc896eb2a660d960f9c45d504609b6eb39d9ed68fc21f9896631668
MD5 2678b8dbb46d264de9380fdf73594b1f
BLAKE2b-256 d4fc65ed190834c01fd0f8f17d979484eb1b4ab13f972ab4e301183e65d0b9db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62159ed1fd5921511b80d1f5007dfc27a1b2b68ee29fca4ed98f1cee6c3e95e9
MD5 086ad8e55c72e945ef2f238cd06b2e3f
BLAKE2b-256 054a8d1543ab211237829bbcb54811dccbc4db150a2bd0912c727937c57ac2c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a095ddb74b96164391b1e76538ecf798ea0cefbf38145082705546f0d2904d34
MD5 7060401a2ec576aa683e99452775523e
BLAKE2b-256 2d1d06f02d14156626bbadc04050f7fa51c2ae553e763113a945994e5dc1508e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9928357f2306af306b4bf5990d126cfa1964f081ce4b76609b63420a720a3c79
MD5 5e82637cf9036494e61bcea7077afe0d
BLAKE2b-256 f057c02280bb4322e14ee048873a203a4cd2339d501207f77cca860b675d2dfe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 338ecf5f2e42b975f0d5c1709d75bb2debd73c5c7b48d7257bed4d6edb5d15c2
MD5 87d5671a9fd5a546af445ea37fbdf631
BLAKE2b-256 f390c993f38c161773d634a67f7710a59af6ba79f629ca26ce2d6481726bf2a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 872625bc8828f218e25941edf84c09bdcc8c51f64e35e4277dd54f5fef43eba9
MD5 a1c83d80c947d32f518ff2f34d8bc8c0
BLAKE2b-256 c19e00fa660f79ef4e804b47e57de15c9256bb58ab8c8254c43b0f7561dff001

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 60fc9a2e7c13ed62ecc52cdf0a42c6c5b7ef8d8e8b2838f0a5e71e12612f7716
MD5 24d6f3a55cea02ccee3a9778643ddbd1
BLAKE2b-256 58b42d9fc7249d492f0d20d1cc3819e5baa8b9d51f64848d8f6960a3fa968a60

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d76fde071b3115cde01af9fca572de810055bbaf4d9f3f05923466a30783fb1
MD5 f9f46ecb59a2898cee8deaf308eaa94c
BLAKE2b-256 7acbf5d834bed808430ebf10881be540971376ed9f398b272706d569773924f8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f0ca769f90f50fdec0e2ac93a4d9c3f179cdd6b3ea58e6dbdc4ad0f9952244cf
MD5 2222a5952c079ea5fa588469ad96cc8b
BLAKE2b-256 23a857c073e94fd0aff9b49203bca6e3df99559082bef89ffda17d972b5389ef

See more details on using hashes here.

Provenance

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