avro模式的类型化类生成器

pyavro-gen的Python项目详细描述


皮亚夫罗发电机

python的标准avro实现是无类型的,在dicts上操作。 虽然这对于小项目、大项目(通常有数百个模式)很方便, 当然可以从记录构建期间强制模式的能力中获益。

这个库允许python avro用户使用特定的记录。

用法:

pip install pyavro-gen

现在,安装这个分支confluent_kafka

pip install -e git+https://github.com/confluentinc/confluent-kafka-python.git@serde#egg=confluent_kafka
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

现在您可以导入您的类,如

fromjaumoavro.com.jaumo.schema.domain.userimportUpdatedu=Updated(...)

对于使用kafka avro serdes和fastavro的完整堆栈测试,运行

pyavrogen_test.py -m jaumoavro -d com.jaumo.schema.domain -n 100 -v

以编程方式生成和测试

fromavro_preprocessor.avro_pathsimportAvroPathsfrompyavro_gen.generatorimportAvroGeneratorfrompyavro_gen.pyavrogen_testimportdo_test_generated_classesgenerator=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()# Optionally, test the classes using fastavro:do_test_generated_classes(module='avroclasses/',domain_namespace='com.jaumo.schema.domain',number_of_cycles=100)

使用自定义类生成:

frompyavro_gen.generation_classesimportGENERATION_CLASSES,GenerationClassesTypefrompyavro_gen.codewriters.baseimportDecorator,ClassWriter,ExtensionfromtypingimportOptional# First define two custom ClassWritersclassRpcWriter(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')]classUndictifiableClassWriter(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 variableGENERATION_CLASSES[GenerationClassesType.RECORD_CLASS]=UndictifiableClassWriterGENERATION_CLASSES[GenerationClassesType.RPC_CLASS]=RpcWriter# Then, generate classes in module `avroclasses` as shown above.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java NetBeans无法找到组织。postgresql。ds。PGSimpleDataSource驱动程序   java如何使用spring data mongodb查询引用无效的文档   jsonpath java。lang.NoSuchFieldError:defaultReader   java MissingResourceException:找不到基本名称资源的捆绑包。控制。控件\u res,区域设置en   使用cordova时出现java_HOME错误   java接口、泛型和重构   安卓 Java最佳实践:嵌套getter?还是代表?   java在应用程序中需要尾部斜杠。xml   java不兼容类型:lambda表达式中的错误返回类型| void不是函数接口   实体中的java空数据,但在发送时不为空。怎么可能呢?   java equal运算符如何处理基元和对象类型数据   java在postgresql(spring)中设置默认模式   java在TreeMap、HashMap或LinkedHashMap中使用重复键存储值   如何让springboot@Async与Java 8协同工作   java向JPanel添加内容   javascript扫描三维模型外表面并使用Autodesk forge API创建模型副本