Source code for unidown.plugin.link_item

from __future__ import annotations

from datetime import datetime


[docs]class LinkItem: """ Item which represents the data, who need to be downloaded. Has a name and an update time. :param name: name :param time: update time :raises ValueError: name cannot be empty or None :raises ValueError: time cannot be empty or None """ #: Time format to use. TIME_FORMAT: str = "%Y%m%dT%H%M%S.%fZ" # noqa: WPS323 def __init__(self, name: str, time: datetime) -> None: #: Name of the item. self._name: str = "" #: Time of the item. self._time: datetime = datetime(1970, 1, 1) # noqa: WPS432 self.name = name self.time = time
[docs] @classmethod def from_json(cls, data: dict) -> LinkItem: """ Construct from json dict. :param data: Json data as dict. :return: LinkItem. :raises ValueError: Missing parameter. """ if 'name' not in data: raise ValueError("name is missing") if 'time' not in data: raise ValueError("time is missing") return cls(data['name'], datetime.strptime(data['time'], LinkItem.TIME_FORMAT))
def __eq__(self, other: object) -> bool: # noqa: D105 if not isinstance(other, self.__class__): return False return self._name == other._name and self._time == other._time # noqa: WPS437 def __ne__(self, other: object) -> bool: # noqa: D105 return not self.__eq__(other) def __hash__(self) -> int: # noqa: D105 return hash((self._name, self._time)) def __repr__(self) -> str: # noqa: D105 return self.__str__() def __str__(self) -> str: # noqa: D105 return f"{self._name}, {self._time}" @property def name(self) -> str: """ Plain getter. """ return self._name @name.setter def name(self, name: str) -> None: """ Set item name. :raises ValueError: Name cannot be empty or None. """ if name is None or not name: raise ValueError("name cannot be empty or None.") self._name = name @property def time(self) -> datetime: """ Plain getter. """ return self._time @time.setter def time(self, time: datetime) -> None: """ Set the item time. :raises ValueError: Time cannot be None. """ if time is None: raise ValueError("time cannot be None.") self._time = time
[docs] def to_json(self) -> dict: """ Create json data. :return: Json dictionary. """ return {'name': self._name, 'time': self._time.strftime(LinkItem.TIME_FORMAT)}