from dataclasses import dataclass, field from datetime import datetime from typing import List, Self import app_config as cfg LOG = cfg.LOG @dataclass class POData: city: str = field(repr=False) street: str = field(repr=False) house: int = field(repr=False) po_type: str = field(repr=False) reason: str = field(repr=False) placement_date: str start_date: str stop_date: str start_time: str stop_time: str notified_at: datetime = field(repr=False, default=None) updated_at: datetime = field(repr=False, default=datetime.now()) need_to_send: bool = field(repr=False, default=True) start_ts: float = field(init=False) def __post_init__(self): if self.start_date and self.start_time: self.start_ts = datetime.strptime(f'{self.start_date} {self.start_time}', '%Y.%m.%d %H:%M').timestamp() else: LOG.error(f'wrong start_date or start_time in {self}') def set_sent(self): self.need_to_send = False def set_notified_now(self): self.notified_at = datetime.now() def update_notified_at(self, old_data: Self): self.notified_at = old_data.notified_at @dataclass class GPVData: approved_from: str event_date: str hours_off: List hours_on: List outage_queue: str = field(repr=False) notified_at: datetime = field(repr=False, default=None) updated_at: datetime = field(repr=False, default=datetime.now()) need_to_send: bool = field(repr=False, default=True) start_ts: List[float] = field(default_factory=list, init=False) def __post_init__(self): if self.event_date and self.hours_off and self.hours_on: for index, value in enumerate(self.hours_on): self.start_ts.append(datetime.strptime(f'{self.event_date} {self.hours_on[index]}', '%d.%m.%Y %H:%M').timestamp()) else: LOG.error(f'wrong start_date or start_time in {self}') def set_send(self): self.need_to_send = False self.notified_at = datetime.now() @dataclass class JobData: name: str trigger: str next: str if __name__ == '__main__': pass