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.17.0.tar.gz (424.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-0.17.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.17.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.17.0-cp314-cp314-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pydynox-0.17.0-cp314-cp314-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

pydynox-0.17.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.17.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.17.0-cp313-cp313-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pydynox-0.17.0-cp313-cp313-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

pydynox-0.17.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.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pydynox-0.17.0-cp312-cp312-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pydynox-0.17.0-cp312-cp312-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

pydynox-0.17.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.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pydynox-0.17.0-cp311-cp311-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pydynox-0.17.0-cp311-cp311-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pydynox-0.17.0.tar.gz
Algorithm Hash digest
SHA256 c59c25494afcb324a718c065e3cc53f6a4ae4e6e747a76636eebcc2bfe2b6b3f
MD5 612537923ecf7207a5ed12a6605175bd
BLAKE2b-256 5865bf11fe3cae95bce550d0c45b335ef558aca4aa02221244f45d1b6452e429

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3de797cc5f82d57ff368a91147fae1513f865199500e22ae359be002090b7fed
MD5 842a782541376f4cbcaedf97b673ecfb
BLAKE2b-256 1b81861d25db01402c6fc76e1ccada91a116a4afe7b220a513387bc3600b09f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 046bfacbde68ada4f2e59c315a40b39184f16924ecf531e8d2a7ced9ef76c413
MD5 27db6cf37c74e23cf9ea53f52deda975
BLAKE2b-256 251cc7a1a05c5c319a966e1fe3cf0fabd30ba51a777c901d577a9b94bf51e8e0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63501ebdd5dd2c91e007d609713c9f0caf56cee1051dfe4d3e585a8b4710650d
MD5 32127861d63e59ab9a657ac1be762b9d
BLAKE2b-256 bb244f831e7709b1136a2d1c2c3545596309f1e10af61c8240d6a5cb0abd3252

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 044162f1a26709bab8a4b14069e4e0269e24c55fd643a2de1fa1c88e0d7f7137
MD5 384be88328479ca7db12270f7349d497
BLAKE2b-256 790ec8e98118a84e28e83024bf06d346822d627ace1bf1a89d6288b049f148d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3ae5a8f1c3cb09b569025b9a597b0c2df168bf026d72a501782eb4c04ca136e
MD5 552299f4c866881828ab5d6d38925b27
BLAKE2b-256 9e17a6cfddd7acf98fd6c3d8675b2c4a90949f65976f2a32ce6439f6bf227009

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 66c6ab3ba6d9a2d2344f04d5a9a78d35c7bed84365a98c7717d34693dec81eab
MD5 1eb25a83c3ae85c3ec7aa3d145d6476f
BLAKE2b-256 ffe4bf5edc26ddf49fc75418b6b1a8bedb8dac06a5209db0235698c6764b7c91

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15aa39a2f92b33211fffd100fe3d8c4032dd639eacc13e5b49d0da8a37815656
MD5 b5d7769c1b8f77228ae9685f6707ec0e
BLAKE2b-256 580523fad6985ceb5179e75d9ebae388841245c9592fcce78e48d2c278cb78fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 43f1f1ad87866c1a929e6d0edfb4dda8c29839dd546ff9b7c4231427626facb7
MD5 72e9529f62440a99654c4ac31b58959d
BLAKE2b-256 7e59bd3c8eaeb7154d770d4049e4f8ed073b68deb0c7a22deaeb58bcc42c8b96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7b23c9892c3234bcb5f452a1e84f70ba3a3e9106a5dbb0dff2a442b77cf4bbc1
MD5 cd4a5228d379325d7e5d6946a2a1d3d2
BLAKE2b-256 8aa08b57eac8aba6efd9ab486a1e33b4a4560804bfc7811af61d180820bdd279

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f59a0affa759a6a54d61fe46c82f4c38ca23145f66c2857fd60a05fef6539397
MD5 91d1aecbbd6639699f170ecba5b36dc3
BLAKE2b-256 fbe8e6bfadb5a2ebb0276e4fc49a6d225e3622fe3fb8b9cb80f3ce10fe151b69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2bc2365b67ff2d3eed8b81ac86810e5593f5f8bd9f03903cabadc99758599be5
MD5 5f58baad87a2b30b5b48cc52da5d11e9
BLAKE2b-256 d535312236845d613e0e9247595b8ef7218a9924b695aa32d1c734fa827e10fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e5aca69df9d45511cc46c1befca757209bdc08e401c39a202eaf06e58c0a4493
MD5 030f623e5eaf5b830e253906a651f59e
BLAKE2b-256 67c8418c57d2ebda543195275b21a784cfe7d0b66de082097cc6e99edf4db012

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 215f7d4506f568f35f999d3faf58e76ba6c11416f1d3fcd17cc31d40c4d236ad
MD5 86dcb79b91b3c70dba1b2e07551c149f
BLAKE2b-256 218803747bd996cd102779a56a0484a5e154dc52c90d2c6ddc7700604e7fcf8e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7d3e663adc0a4d2526e11695ebdd5f3f914ea952d42b357a0977d91e7f600d38
MD5 175b5782416fa5783340107a43d4ea0b
BLAKE2b-256 2a60c7910ece53cf000f21a04cf5113ecc8bee720187b351dce2ed8162f7cfc9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1a44fac3e317ae1b71a7b49cfbea2f216461dda837a09cf17a5c700b573a8d8
MD5 fd5179edbd11f86f9c7e6c8d58ce4466
BLAKE2b-256 86c04a2f3360b691298ff95faeec1f399aa405355803b4b9ae0b9b5a58677da2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pydynox-0.17.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a700ef455dbaa9cf907fdbbedb6888754ccf8fe9dec8e0b8df8c5016eb77df38
MD5 e7e2b73b97f1f2ccff5b31b534ba851a
BLAKE2b-256 dd57096b8cdf0a687c7e702d1947e775ad3cd4172f13a7617aee77aa41ae2855

See more details on using hashes here.

Provenance

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