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.

Pre-release: The core features are working and tested. We're adding features, polishing the API, receiving ideas, and testing performance and edge cases before v1.0. Feel free to try it out and share feedback!

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.does_not_exist())

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

# Combine conditions with & (AND) and | (OR)
user.save(
    condition=User.pk.does_not_exist() | (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.does_not_exist() - 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.16.0.tar.gz (383.1 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.16.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pydynox-0.16.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-0.16.0-cp314-cp314-macosx_10_12_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-0.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pydynox-0.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

pydynox-0.16.0-cp313-cp313-macosx_10_12_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-0.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pydynox-0.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pydynox-0.16.0-cp312-cp312-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-0.16.0-cp312-cp312-macosx_10_12_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pydynox-0.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pydynox-0.16.0-cp311-cp311-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-0.16.0-cp311-cp311-macosx_10_12_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pydynox-0.16.0.tar.gz
Algorithm Hash digest
SHA256 69f2c67eb2b88c91b4f24b7ee5bebdffe5e3e2341793305015b13b8ca28d4428
MD5 f4870a8c1fc9a3056493c1d0bd03d858
BLAKE2b-256 d082510a2b7c69233b0df3b3f00ca58646100f7f3b6460ba3449e99ac0748a3b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f19a8c49536662a1202d7f2eada3e508463105e4704794f304489afd09d6caa
MD5 e798c2e8895451d4e5dd08bd249622b4
BLAKE2b-256 67c65c67571d120d094bbc7685dc94c39f99fd1feb9e53472bd0c430e87ee776

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 295de573bc3f08f43cda2c933720f51865bf30acd30509ebed454ff28c40a73e
MD5 2108cb2600bd0b0918fe54bd6a8bd819
BLAKE2b-256 e6075063f7b99261e7a75adc78f47239d8d0c890db90665adbc3cedc87050e10

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9eae8a4830790e723dc878456c6b680ee5b273b7deed3a94c250865df23539af
MD5 b1d0b2bbca31685bb8775e661f290e3d
BLAKE2b-256 10643959e1aa52da37c633da79671006780deb34d9cd374767686b85a86b2be6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d8c27e2586aba17ef7874a63cc7ca0b8e4b8142f27125dbceaae6929e905c72d
MD5 aac5eeeffcf51b4a4d92de3632fb3afc
BLAKE2b-256 1a3c980a6397e38d4cca5beeba6eb8ed485614c7e6d181e8a701f3232706fb38

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 307855212d8fa82de75a9294a38bcdc8b20b8f637a52e40017409ac1d87b74c8
MD5 854d24e2668c47e5c104ae2749832fe0
BLAKE2b-256 78732e7b2358d8758c3bf7f6eb1e55c57a3837016ac486b3c682f1273c93b77d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 84ff6fc9898cee5ceb1fca69a116040b9b57f26d74d043d8673202d49c45f11f
MD5 89ece08e24d45edda1bf8cf29c36038f
BLAKE2b-256 b3c2935147826751b3be2a6781f3f5008f0318bc3b32ebc651458ff8e000b805

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2321941122d51bc4b50761ca725130ffdf1aeb323e9e5814db847dfa6097ec28
MD5 3f4adab68e136b15788cf08aa40f2bb3
BLAKE2b-256 70e32d63ad5f54a087fe2b12351f99d376275ea501446bb34d2cfe7a0e24a619

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3f343a1449e9f19215e77052779df13305f33df15c3cd2fe919ae6b8245e9c19
MD5 cdb3f5a0b8efd16cea73446f9a41f640
BLAKE2b-256 b05cb9fb445e34fcdcfded53b5b81f09604710762554b9bda07c1b65aeec9caf

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e4fde08cdce761c4eb8ebe8f3f7c2be399acb8a325bf4f66fe2571465e417764
MD5 3026b78444ee02806833f2cedc938afa
BLAKE2b-256 cbdb8cce47c52b65e31fa40461e45d55edbea5f60d54eb19bd10fea1b03ced52

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6124d71428b093fb8d6f61817040d82f59a70717b25a049d8ea58bf178ee3ad3
MD5 129d8af3a20f4cc48b0cc0ca8d3303a9
BLAKE2b-256 915b1db2cf4220874f7b50df4dc80978c3d74c90f465b5f67773e81feff26faa

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 446cd98fac7dfc7c564b6133f45d2b2503cc2b7f524051ca8f42df6ffd3ed822
MD5 b7cf2df995d013cd0ef78aa429db01e4
BLAKE2b-256 b0b09d9ab4813fe4afb36269519cd0c49a0f3de45f90aaa952cacd673db3e95e

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 99d88b17ee6432546fb9fa970f2c8be649514698ff63088f3f52853b8e8afe4a
MD5 be401faee7a91143b29ea6bb009985fb
BLAKE2b-256 77449abfff5c8341e8535d05fad43e7ec0d87283769f29796af638c0a0397e7c

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1a7de6556d8f070dcf5e0ef698f9a1284d76d1b97a7143833e8c456d802277ea
MD5 07d8cf9b0e865ac75982e6c45cc89537
BLAKE2b-256 df2ea9f47c04ce7a2f8de3b6a1f78648299ee3b14b31a33c420342b0d03477f6

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b6d34f075dacc9db86ccf284f355d1aba31ea3b89ff388dbfa31d3fd1858a69c
MD5 f99d806c1c0b84e7813bf8c64ed815e1
BLAKE2b-256 bb28745c6f746c29fac139d9a1be3ecc288b99eb12e28cd64bb06ba81422a14d

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2fb59314e02c4c945fe0767957b7c2805a5328a2141dfbb22b40d9f20684478c
MD5 9c8829f03eab968ae1704d7e8d75ee7e
BLAKE2b-256 c9b4e23b7333aed28f766d34c3881758d53084b6527bc509409d760988058db1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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.16.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pydynox-0.16.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6a57abf398e94453e22888109917196876c488d480c5aa9eb550492fa55e2d83
MD5 e00466f873b9e514857cdf3e4519f597
BLAKE2b-256 b898238270d191b77a87a68235f59991259cc930ec5731588d7bcb83cdcb35b1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on leandrodamascena/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