Source code for yandex_market_language.models.currency
from typing import Optional
from .abstract import AbstractModel, XMLElement
from yandex_market_language.exceptions import ValidationError
CURRENCY_CHOICES = ("RUR", "RUB", "UAH", "BYN", "KZT", "USD", "EUR")
RATE_CHOICES = ("CBRF", "NBU", "NBK", "CB")
[docs]class Currency(AbstractModel):
"""
Currency model.
Used to create a list of shop currency rates.
Docs:
https://yandex.ru/support/partnermarket/elements/currencies.html
"""
__slots__ = [
'_currency',
'_rate',
'_plus'
]
def __init__(self, currency, rate, plus=None):
self.currency = currency
self.rate = rate
self.plus = plus
@property
def currency(self) -> str:
return self._currency
@currency.setter
def currency(self, value):
if value not in CURRENCY_CHOICES:
raise ValidationError(
"Price data is accepted only in: (formatted_choices)".format(
formatted_choices=", ".join(CURRENCY_CHOICES)
)
)
self._currency = value
@property
def rate(self) -> str:
return self._rate
@rate.setter
def rate(self, value):
if value not in RATE_CHOICES:
try:
float(value)
except (TypeError, ValueError):
raise ValidationError(
(
"The rate parameter can have the following values: "
"number (int or float), (rate_choices)".format(
rate_choices=', '.join(RATE_CHOICES)
)
)
)
self._rate = str(value)
@property
def plus(self) -> Optional[str]:
return self._plus
@plus.setter
def plus(self, value):
self._plus = self._is_valid_int(value, "plus", True)
[docs] def create_dict(self, **kwargs) -> dict:
return dict(id=self.currency, rate=self.rate, plus=self.plus)
[docs] def create_xml(self, **kwargs) -> XMLElement:
el = XMLElement("currency", self.clean_dict)
return el
[docs] @staticmethod
def from_xml(el: XMLElement) -> "Currency":
el.attrib["currency"] = el.attrib.pop("id")
return Currency(**el.attrib)