Skip to main content

Apache Avro serialization/deserialization with Confluent Schema Registry framing and Apicurio integration

Project description

AvroCurio

Apache Avro serialization/deserialization with Confluent Schema Registry framing using Apicurio Schema Registry.

Installation

Using uv, poetry, or pip:

uv add avrocurio
poetry add avrocurio
pip install avrocurio

Quick Start

1. Define your schema using dataclasses-avroschema

from dataclasses import dataclass
from dataclasses_avroschema import AvroModel

@dataclass
class User(AvroModel):
    name: str
    age: int
    email: str

2. Serialize and deserialize data

import asyncio
from avrocurio import AvroSerializer, ApicurioClient, ApicurioConfig

async def main():
    # Configure connection to Apicurio Registry
    config = ApicurioConfig(base_url="http://localhost:8080")

    # Create client and serializer
    async with ApicurioClient(config) as client:
        serializer = AvroSerializer(client)

        # Create a user instance
        user = User(name="John Doe", age=30, email="john@example.com")

        # Serialize the user to an Avro binary with Confluent registry framing.
        # Under the hood this will perform a lookup against Apicurio to get the
        # artifact ID for the schema, which is then prepended to the Avro binary
        # (along with a magic byte).
        serialized = await serializer.serialize(user)

        # Deserialize the binary back to a User instance.
        deserialized_user = await serializer.deserialize(serialized, User)

asyncio.run(main())

Confluent Schema Registry Wire Format

AvroCurio implements the Confluent Schema Registry wire format:

+----------------+------------------+------------------+
| Magic Byte     | Schema ID        | Avro Payload     |
| (1 byte = 0x0) | (4 bytes, BE)    | (remaining)      |
+----------------+------------------+------------------+
  • Magic Byte: Always 0x0 to identify Confluent wire format
  • Schema ID: 4-byte big-endian integer referencing the schema in the registry
  • Avro Payload: Standard Avro binary-encoded data

Schema Caching

Schema caching is handled automatically by the ApicurioClient for performance.

Development

Requirements

Integration tests require a running Apicurio Registry. Running it through Docker or Podman using Compose is easiest:

docker compose up

Port 8080 is assumed by default, but you can set APICURIO_URL to point to a different instance.

Running Tests

# Run all tests
uv run pytest

# Run specific test file
uv run pytest tests/test_serializer.py

# Run with verbose output
uv run pytest -v

# Skip integration tests
uv run pytest -m "not integration"

License

AvroCurio is open-source software released under the BSD-2-Clause Plus Patent License. This license is designed to provide: a) a simple permissive license; b) that is compatible with the GNU General Public License (GPL), version 2; and c) which also has an express patent grant included.

Please review the LICENSE file for the full text of the license.

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

avrocurio-1.0.0.tar.gz (81.8 kB view details)

Uploaded Source

Built Distribution

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

avrocurio-1.0.0-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for avrocurio-1.0.0.tar.gz
Algorithm Hash digest
SHA256 5b9a21d06612a2382f5aff4106eadd34856c605b1de48d11dd8e6a919ed2ce2e
MD5 bd7479ff701a8c8f7c858d864d4ace2f
BLAKE2b-256 74c9c2d667653c75f96331ee538249e6b96798bd86b30ee5476c1f5234d7e70a

See more details on using hashes here.

Provenance

The following attestation bundles were made for avrocurio-1.0.0.tar.gz:

Publisher: release.yml on castoredc/avrocurio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file avrocurio-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: avrocurio-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for avrocurio-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44a9a335c4fabfc601ee089f9bd36ebb0c63409e315326e1e95c79ac874cd3dc
MD5 af376618c98dfc0516c6e32ae8129b7f
BLAKE2b-256 fe9f07d911b90930c0fbd98282cfe10e5b815e4c36329108027d66a85aa2920d

See more details on using hashes here.

Provenance

The following attestation bundles were made for avrocurio-1.0.0-py3-none-any.whl:

Publisher: release.yml on castoredc/avrocurio

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