Source code for yandex_market_language.models.age
from .abstract import AbstractModel, XMLElement
from yandex_market_language.exceptions import ValidationError
UNIT_CHOICES = ("year", "month")
YEAR_CHOICES = [y for y in range(0, 19, 6)]
MONTH_CHOICES = [m for m in range(0, 13)]
[docs]class Age(AbstractModel):
"""
Age category of the offer.
"""
__slots__ = [
'_unit',
'_value'
]
def __init__(self, unit: str, value):
self.unit = unit
self.value = value
@property
def unit(self) -> str:
return self._unit
@unit.setter
def unit(self, value):
if value and value not in UNIT_CHOICES:
raise ValidationError("unit must be a valid choice: {c}".format(
c=", ".join(UNIT_CHOICES)
))
self._unit = value
@property
def value(self) -> int:
return int(self._value)
@value.setter
def value(self, v):
try:
v = int(v)
# Check valid choices for specified unit
not_valid, choices = False, None
if self.unit == "year":
if v not in YEAR_CHOICES:
not_valid, choices = True, YEAR_CHOICES
else:
if v not in MONTH_CHOICES:
not_valid, choices = True, MONTH_CHOICES
# Raise ValidationError if choice is not valid
if not_valid:
raise ValidationError(
"value for unit 'year' must be a valid choice: "
"{c}".format(c=", ".join(str(c) for c in choices))
)
self._value = str(v)
except (TypeError, ValueError):
raise ValidationError("value must be a valid int")
[docs] def create_dict(self, **kwargs) -> dict:
return dict(unit=self.unit, value=self.value)
[docs] def create_xml(self, **kwargs) -> XMLElement:
attribs = {}
if self._unit:
attribs["unit"] = self._unit
el = XMLElement("age", attribs)
el.text = self._value
return el
[docs] @staticmethod
def from_xml(el: XMLElement) -> "Age":
return Age(unit=el.attrib.get("unit"), value=el.text)