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 :cvar time_format: time format to use :ivar _name: name of the item :ivar _time: time of the item """ time_format: str = "%Y%m%dT%H%M%S.%fZ" def __init__(self, name: str, time: datetime): self._name: str = "" self._time: datetime = datetime(1970, 1, 1) self.name = name self.time = time
[docs] @classmethod def from_json(cls, data: dict) -> LinkItem: """ Constructor from json dict. :param data: json data as dict :return: the 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: if not isinstance(other, self.__class__): return False return self._name == other._name and self._time == other._time def __ne__(self, other: object) -> bool: return not self.__eq__(other) def __repr__(self) -> str: return self.__str__() def __str__(self) -> str: return f"{self._name}, {self._time}" @property def name(self) -> str: """ Plain getter. """ return self._name @name.setter def name(self, name: str): """ :raises ValueError: name cannot be empty or None """ if name is None or 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): """ :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)}