Skip to content

How to extend pyxsdata

There are two main entrypoints that developers can leverage to add support a new generator output or/and a new class type for data bindings.

pyxsdata.plugins.cli

This entrypoint allows developers to register a new [pyxsdata.formats.mixins.AbstractGenerator][].

from pyxsdata.codegen.writer import CodeWriter
from pyxsdata.formats.mixins import AbstractGenerator

class AwesomeGenerator(AbstractGenerator):
    ...

CodeWriter.register_generator("awesome", AwesomeGenerator)

Which can be used during code generation.

$ pyxsdata generate --output awesome

pyxsdata.plugins.class_types

This entrypoint can be used to register a new [pyxsdata.formats.dataclass.compat.ClassType][] for binding operations.

from pyxsdata.formats.dataclass.compat import class_types
from pyxsdata.formats.dataclass.compat import ClassType

class AwesomeType(ClassType):
    ...

class_types.register("awesome", AwesomeType())

Which then can be used like this:

from pyxsdata.formats.dataclass.context import XmlContext
from pyxsdata.formats.dataclass.parsers import XmlParser

context = XmlContext(class_type="awesome")
parser = XmlParser(context=context)