Source code for yandex_market_language.yml
from xml.dom import minidom
from xml.etree import ElementTree as ET
from yandex_market_language.models import Feed
[docs]class YML:
"""
Main class for feed parse and conversion.
"""
def __init__(self, file_or_path):
self._file_or_path = file_or_path
[docs] @staticmethod
def prettify_el(el: "ET.Element") -> "ET.Element":
"""
Return a pretty-printed XML string for the Element.
"""
raw = ET.tostring(el, "utf-8")
parsed = minidom.parseString(raw)
prettified = parsed.toprettyxml(indent="\t")
return ET.fromstring(prettified)
[docs] def parse(self) -> "Feed":
"""
Parses an XML feed file to the Feed model.
"""
tree = ET.parse(self._file_or_path)
root = tree.getroot()
return Feed.from_xml(root)
[docs] def convert(self, feed: "Feed", pretty: bool = True):
"""
Converts Feed model to XML file.
"""
feed_el = feed.to_xml()
if pretty:
feed_el = self.prettify_el(feed_el)
tree = ET.ElementTree(feed_el)
tree.write(self._file_or_path, encoding="utf-8")
[docs]def parse(file_or_path):
return YML(file_or_path).parse()
[docs]def convert(file_or_path, feed: "Feed", pretty: bool = True):
YML(file_or_path).convert(feed, pretty)