No project description provided
Project description
xml-to-pydantic
xml-to-pydantic is a library for Python to convert XML to pydantic models.
(Please note that this project is not affiliated in any way with the great team at pydantic.)
pydantic is a Python library for data validation, applying type hints / annotations. It enables the creation of easy or complex data validation rules for processing external data. That data usually comes in JSON format or from a Python dictionary.
But to process and validate XML into pydantic models would then require two steps: convert the XML to a Python dictionary, then convert to the pydantic model. This libary provides a convenient way to combine those steps.
Note: if you are using this library to parse external, uncontrolled XML, you should be aware of possible attack vectors through XML: [https://github.com/tiran/defusedxml]. This library uses lxml under the hood.
Installation
Use pip, or your favorite Python package manager (pipenv, poetry, pdm, ...):
pip install xml-to-pydantic
Usage
The XML is extracted using XPath defined on the fields:
from xml_to_pydantic import XmlBaseModel, XmlField
xml_bytes = b"""<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>4.53</element>
<a href="https://example.com">Link</a>
</root>
"""
class MyModel(XmlBaseModel):
number: float = XmlField(xpath="./element/text()")
href: str = XmlField(xpath="./a/@href")
model = MyModel.model_validate_xml(xml_bytes)
print(model)
# > number=4.53 href='https://example.com'
The parsing can also deal with nested models and lists:
from xml_to_pydantic import XmlBaseModel, XmlField
xml_bytes = b"""<?xml version="1.0" encoding="UTF-8"?>
<root>
<level1>
<level2>value1</level2>
<level2>value2</level2>
<level2>value3</level2>
</level1>
<level11>value11</level11>
</root>
"""
class NextLevel(XmlBaseModel):
level2: list[str] = XmlField(xpath="./level2/text()")
class MyModel(XmlBaseModel):
next_level: NextLevel = XmlField(xpath="./level1")
level_11: list[str] = XmlField(xpath="./level11/text()")
model = MyModel.model_validate_xml(xml_bytes)
print(model)
# > next_level=NextLevel(level2=['value1', 'value2', 'value3']) level_11=['value11']
Development
Prerequisites:
- Any Python 3.8 through 3.12
- poetry for dependency management
- git
- make (to use the helper scripts in the Makefile)
Autoformatting can be applied by running
make lintable
Before commiting, remember to run
make lint
make test
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
Built Distribution
Hashes for xml_to_pydantic-0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06534b4a0541fc4db184bd70fbb6b53f42b868dd785fe5c936b1fd3fe6ef7f98 |
|
MD5 | 3d5a428b0f4415e65721704f92525ec2 |
|
BLAKE2b-256 | 0a83d0bd20c5dca85723bec12573907954868ff4364b7395e6f00179be1381f0 |