Usage

To use Yandex Market Language (YML) for Python in a project:

from yandex_market_language import parse, convert

Models

You can create models manually:

>>> from yandex_market_language import models
>>> category = models.Category(category_id="1", name="Shoes")

And then transform them into a dictionary:

>>> d = category.to_dict()
>>> d
{'id': '1', 'name': 'Shoes', 'parent_id': None}

Or XML element:

>>> el = category.to_xml()
>>> el
<Element 'category' at 0x10ecda900>
>>> from xml.etree import ElementTree as ET
>>> ET.tostring(el)
b'<category id="1">Shoes</category>'

Parser / Converter

You can parse XML files into ready-to-use Feed model instance with parser:

>>> from yandex_market_language import parse, convert
>>> feed = parse("tests/fixtures/valid_feed.xml")
>>> feed
<yandex_market_language.models.feed.Feed object at 0x10d99fdf0>
>>> feed.to_dict()
{
    'shop': {
        'name': 'ZS',
        'company': 'ZoneSmart',
        'url': 'https://zonesmart.ru',
        ...
        'offers': [
            'type': None,
            'vendor': 'Brother',
            'vendor_code': 'ABC1234'
            ...
        ]
        ...
    }
}

And convert Feed model instances into XML files:

>>> convert("converted_from_feed_model.xml", feed)
>>> feed = parse("converted_from_feed_model.xml")
>>> feed
<yandex_market_language.models.feed.Feed object at 0x10d8bdee0>
>>> feed.to_xml()
<Element 'yml_catalog' at 0x000002121B634E00>
>>> from xml.etree import ElementTree as ET
>>> ET.tostring(feed.to_xml())
b'<yml_catalog date="2019-11-01 17:22">
    <shop>
        <name>ZS</name>
        <company>ZoneSmart</company>
        <url>https://zonesmart.ru</url>
        ...
        <offers>
            <offer>
                <name>...</name>
                <vendor>...</name>
                <vendorCode>...</vendorCode>
            </offer>
            ...
        </offers>
        ...
    </shop>
</yml_catalog>