Skip to main content

A typed class generator for Avro Schemata

Project description

pyavro-gen

Standard Avro implementation for Python is typeless and operates on dicts. While this is convenient for small projects, larger ones, often with hundreds of schemas, certainly benefit from the ability to enforce schemas during record construction.

This library allows Python Avro users to employ Specific Records.

Usage:

pip install pyavro-gen
pyavrogen.py -v \
    -i my_schemas_dir \
    -o jaumoavro \
    -ie 'avsc' \
    -b com.jaumo.schema \
    -r com.jaumo.schema.rpc \
    -t com.jaumo.schema.type

Now you can import your classes like

from jaumoavro.com.jaumo.schema.domain.user import Updated

u = Updated(...)

Generation and test programmatically

from avro_preprocessor.avro_paths import AvroPaths
from pyavro_gen.generator import AvroGenerator

generator = AvroGenerator(
    AvroPaths(
        input_path='myschemas/',
        output_path='avroclasses/',
        input_schema_file_extension='avsc',
        base_namespace='com.jaumo.schema',
        rpc_namespace='com.jaumo.schema.rpc',
        types_namespace='com.jaumo.schema.type',
    )
)
generator.process()

Generation using custom classes:

from pyavro_gen.generation_classes import GENERATION_CLASSES, GenerationClassesType
from pyavro_gen.codewriters.base import Decorator, ClassWriter, Extension
from typing import Optional

# First define two custom ClassWriters

class RpcWriter(ClassWriter):
    def __init__(self,
                 fully_qualified_name: str,
                 doc: Optional[str] = None,
                 prefix: Optional[str] = None):
        super().__init__(fully_qualified_name, doc, prefix)

        self.extensions = [
            Extension('abc.ABC')
        ]


class UndictifiableClassWriter(ClassWriter):
    def __init__(self,
                 fully_qualified_name: str,
                 doc: Optional[str] = None,
                 prefix: Optional[str] = None):
        super().__init__(fully_qualified_name, doc, prefix)

        self.decorators = [
            Decorator('@type_checked_constructor()',
                      ClassWriter('undictify.type_checked_constructor')),
            Decorator('@dataclass', ClassWriter('dataclasses.dataclass'))
        ]


# Then, register them in the GENERATION_CLASSES variable

GENERATION_CLASSES[GenerationClassesType.RECORD_CLASS] = UndictifiableClassWriter
GENERATION_CLASSES[GenerationClassesType.RPC_CLASS] = RpcWriter

# Then, generate classes in module `avroclasses` as shown above.

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

pyavro-gen-0.3.3.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

pyavro_gen-0.3.3-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file pyavro-gen-0.3.3.tar.gz.

File metadata

  • Download URL: pyavro-gen-0.3.3.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for pyavro-gen-0.3.3.tar.gz
Algorithm Hash digest
SHA256 0e2b71c7c3c147326f555ecffcb6b2d5af4f1760b42a85f53a4fe85879f30a69
MD5 4c6ae48a068e505b94fa82ee5f23376d
BLAKE2b-256 07c75161c574866392324b5f2393e0a469e4cb1f75c0814c6cad4e8973b89b19

See more details on using hashes here.

File details

Details for the file pyavro_gen-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: pyavro_gen-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for pyavro_gen-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 452f6acb178bf7d7d9eb3c78d1978bfeecefdb3fa2937a4baf3542ae28b6dc49
MD5 6ac1a644d06b2b58af77775038c0c2d8
BLAKE2b-256 dcdbaee5984748a78d43f8a49054fb2a84e9618e8e55cdc6868dd3ca4949a498

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page