Source code for yandex_market_language.models.promo

import typing as t
from yandex_market_language import models
from yandex_market_language.models.abstract import XMLElement, XMLSubElement


[docs]class Promo(models.AbstractModel): """ Docs: https://yandex.ru/support/partnermarket/elements/promo-gift.html """ MAPPING = { "start-date": "start_date", "end-date": "end_date", "description": "description", "url": "url", } __slots__ = [ 'promo_id', 'promo_type', 'purchase', 'promo_gifts', 'start_date', 'end_date', 'description', 'url' ] def __init__( self, promo_id: str, promo_type: str, purchase: "Purchase", promo_gifts: t.List["PromoGift"], start_date=None, end_date=None, description=None, url=None, ): self.promo_id = promo_id self.promo_type = promo_type self.start_date = start_date self.end_date = end_date self.description = description self.url = url self.purchase = purchase self.promo_gifts = promo_gifts
[docs] def create_dict(self, **kwargs) -> dict: return dict( promo_id=self.promo_id, promo_type=self.promo_type, start_date=self.start_date, end_date=self.end_date, description=self.description, url=self.url, purchase=self.purchase.to_dict(), promo_gifts=[pg.to_dict() for pg in self.promo_gifts], )
[docs] def create_xml(self, **kwargs) -> XMLElement: attribs = {"id": self.promo_id, "type": self.promo_type} promo_el = XMLElement("promo", attribs) for tag, attr in self.MAPPING.items(): v = getattr(self, attr) if v: el = XMLSubElement(promo_el, tag) el.text = v # Add purchase el self.purchase.to_xml(promo_el) # Add promo gifts promo_gifts_el = XMLSubElement(promo_el, "promo-gifts") for pg in self.promo_gifts: pg.to_xml(promo_gifts_el) return promo_el
[docs] @classmethod def from_xml(cls, promo_el: XMLElement) -> "Promo": kwargs = dict( promo_id=promo_el.attrib.get("id"), promo_type=promo_el.attrib.get("type"), promo_gifts=[] ) for el in promo_el: if el.tag in cls.MAPPING: kwargs[cls.MAPPING[el.tag]] = el.text elif el.tag == "purchase": kwargs["purchase"] = Purchase.from_xml(el) elif el.tag == "promo-gifts": for pg_el in el: kwargs["promo_gifts"].append(PromoGift.from_xml(pg_el)) return Promo(**kwargs)
[docs]class Purchase(models.AbstractModel): """ Docs: https://yandex.ru/support/partnermarket/elements/promo-gift.html """ __slots__ = [ 'products', 'required_quantity' ] def __init__(self, products: t.List["Product"], required_quantity="1"): self.required_quantity = required_quantity self.products = products
[docs] def create_dict(self, **kwargs) -> dict: return dict( required_quantity=self.required_quantity, products=[p.to_dict() for p in self.products] )
[docs] def create_xml(self, **kwargs) -> XMLElement: purchase_el = XMLElement("purchase") # Add required quantity el required_quantity_el = XMLSubElement(purchase_el, "required-quantity") required_quantity_el.text = self.required_quantity # Add products el for p in self.products: p.to_xml(purchase_el) return purchase_el
[docs] @staticmethod def from_xml(purchase_el: XMLElement) -> "Purchase": kwargs = {"products": []} for el in purchase_el: if el.tag == "required-quantity": kwargs["required_quantity"] = el.text elif el.tag == "product": kwargs["products"].append(Product.from_xml(el)) return Purchase(**kwargs)
[docs]class Product(models.AbstractModel): """ Docs: https://yandex.ru/support/partnermarket/elements/promo-gift.html """ __slots__ = [ 'offer_id', 'category_id' ] def __init__(self, offer_id: str = None, category_id: str = None): self.offer_id = offer_id self.category_id = category_id
[docs] def create_dict(self, **kwargs) -> dict: return dict( offer_id=self.offer_id, category_id=self.category_id, )
[docs] def create_xml(self, **kwargs) -> XMLElement: attribs = {} if self.offer_id: attribs["offer-id"] = self.offer_id if self.category_id: attribs["category-id"] = self.category_id return XMLElement("product", attribs)
[docs] @staticmethod def from_xml(product_el: XMLElement) -> "Product": return Product( offer_id=product_el.attrib.get("offer-id"), category_id=product_el.attrib.get("category-id") )
[docs]class PromoGift(models.AbstractModel): """ Docs: https://yandex.ru/support/partnermarket/elements/promo-gift.html """ __slots__ = [ 'offer_id', 'gift_id' ] def __init__(self, offer_id: str = None, gift_id: str = None): self.offer_id = offer_id self.gift_id = gift_id
[docs] def create_dict(self, **kwargs) -> dict: return dict(offer_id=self.offer_id, gift_id=self.gift_id)
[docs] def create_xml(self, **kwargs) -> XMLElement: attribs = {} if self.offer_id: attribs["offer-id"] = self.offer_id elif self.gift_id: attribs["gift-id"] = self.gift_id return XMLElement("promo-gift", attribs)
[docs] @staticmethod def from_xml(el: XMLElement) -> "PromoGift": return PromoGift( offer_id=el.attrib.get("offer-id"), gift_id=el.attrib.get("gift-id") )