Mobilizon-Reshare-condividi.../mobilizon_reshare/event/event.py

53 lines
1.5 KiB
Python
Raw Normal View History

2021-05-03 17:26:34 +02:00
from dataclasses import dataclass, asdict
from enum import IntEnum
from typing import Optional
from uuid import UUID
2021-05-05 14:29:13 +02:00
import arrow
from jinja2 import Template
2021-05-03 17:26:34 +02:00
from mobilizon_reshare.config.config import get_settings
2021-05-04 22:58:00 +02:00
class EventPublicationStatus(IntEnum):
WAITING = 1
FAILED = 2
COMPLETED = 3
PARTIAL = 4
2021-05-03 17:26:34 +02:00
@dataclass
class MobilizonEvent:
"""Class representing an event retrieved from Mobilizon."""
name: str
description: Optional[str]
begin_datetime: arrow.Arrow
end_datetime: arrow.Arrow
2021-05-03 17:26:34 +02:00
mobilizon_link: str
mobilizon_id: UUID
last_update_time: arrow.Arrow
2021-05-03 17:26:34 +02:00
thumbnail_link: Optional[str] = None
location: Optional[str] = None
publication_time: Optional[dict[str, arrow.Arrow]] = None
status: EventPublicationStatus = EventPublicationStatus.WAITING
2021-05-03 17:26:34 +02:00
2021-05-04 22:58:00 +02:00
def __post_init__(self):
2021-05-31 01:11:50 +02:00
assert self.begin_datetime.tzinfo == self.end_datetime.tzinfo
2021-05-04 22:58:00 +02:00
assert self.begin_datetime < self.end_datetime
if self.publication_time is None:
self.publication_time = {}
2021-05-04 22:58:00 +02:00
if self.publication_time:
assert self.status in [
EventPublicationStatus.COMPLETED,
EventPublicationStatus.PARTIAL,
EventPublicationStatus.FAILED,
2021-05-04 22:58:00 +02:00
]
2021-05-04 12:07:59 +02:00
2021-05-04 11:48:54 +02:00
def _fill_template(self, pattern: Template) -> str:
config = get_settings()
return pattern.render(locale=config["locale"], **asdict(self))
2021-05-03 17:26:34 +02:00
2021-05-04 11:48:54 +02:00
def format(self, pattern: Template) -> str:
2021-05-03 17:26:34 +02:00
return self._fill_template(pattern)