74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
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
|