Pydantic v2 Integration¶
pyxsdata natively supports Pydantic v2 as a first-class
citizen! You can generate Pydantic models directly from XML schemas, WSDLs, and JSON
schemas, and serialize/deserialize them seamlessly.
Installation¶
To enable Pydantic support, install pyxsdata with the pydantic extra:
Code Generation¶
To generate Pydantic models instead of standard standard library dataclasses, specify
--output pydantic in the CLI:
Or configure it in .pyxsdata.xml:
<Config xmlns="http://pypi.org/project/pyxsdata">
<Output format="pydantic">
<Package>myapp.models</Package>
</Output>
</Config>
Generated Model Features¶
- Models inherit from
pydantic.BaseModel. - Fields use
pydantic.Fieldwith validation constraints (e.g.ge,le,pattern,max_length). - XML metadata is mapped into field metadata.
Data Binding¶
All pyxsdata parsers and serializers support Pydantic models. You can either use the
pre-configured shortcuts from pyxsdata.pydantic.bindings or specify
class_type="pydantic" in XmlContext.
Convenient Binding Shortcuts¶
pyxsdata.pydantic.bindings provides drop-in subclasses with the Pydantic context
automatically configured:
from pyxsdata.pydantic.bindings import (
CoreXmlParser,
DictDecoder,
DictEncoder,
JsonParser,
JsonSerializer,
PycodeSerializer,
TreeParser,
UserXmlParser,
XmlContext,
XmlParser,
XmlSerializer,
)
# Parse XML directly into Pydantic models
parser = XmlParser()
order = parser.from_string(xml_content, PurchaseOrder)
# Validate and manipulate with Pydantic
assert isinstance(order, PurchaseOrder)
print(order.model_dump())
# Serialize back to XML
serializer = XmlSerializer()
output_xml = serializer.render(order)
High-Performance Native Rust Parsing (CoreXmlParser)¶
When maximum parsing throughput is required, install pyxsdata[core] to leverage
pyxsdata-core written in Rust. CoreXmlParser natively creates Pydantic v2 model
instances at over 310,000 objects/sec (over 7.6x faster than standard Python
parsing):
from pyxsdata.pydantic import CoreXmlParser
parser = CoreXmlParser()
order = parser.from_string(xml_content, PurchaseOrder)
Manual Context Configuration¶
If you prefer using the standard pyxsdata.formats.dataclass classes, configure
XmlContext with class_type="pydantic":
from pyxsdata.formats.dataclass.context import XmlContext
from pyxsdata.formats.dataclass.parsers import XmlParser
from pyxsdata.formats.dataclass.serializers import XmlSerializer
context = XmlContext(class_type="pydantic")
parser = XmlParser(context=context)
serializer = XmlSerializer(context=context)