A typed class generator for Avro Schemata
Project description
pyavro-gen
Standard Avro implementation for Python is typeless and operates on dict
s.
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
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e2b71c7c3c147326f555ecffcb6b2d5af4f1760b42a85f53a4fe85879f30a69 |
|
MD5 | 4c6ae48a068e505b94fa82ee5f23376d |
|
BLAKE2b-256 | 07c75161c574866392324b5f2393e0a469e4cb1f75c0814c6cad4e8973b89b19 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 452f6acb178bf7d7d9eb3c78d1978bfeecefdb3fa2937a4baf3542ae28b6dc49 |
|
MD5 | 6ac1a644d06b2b58af77775038c0c2d8 |
|
BLAKE2b-256 | dcdbaee5984748a78d43f8a49054fb2a84e9618e8e55cdc6868dd3ca4949a498 |