2024-06-13 10:09:54 +02:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TimeSlot():
|
|
|
|
|
|
|
|
|
|
def __init__(self, name: str, start: datetime = datetime.now(), end: datetime = None):
|
|
|
|
|
self.name = name
|
|
|
|
|
self.start = start
|
|
|
|
|
if end:
|
|
|
|
|
self.end = end
|
|
|
|
|
self._creation_time = datetime.now().timestamp()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def name(self):
|
|
|
|
|
return self._name
|
|
|
|
|
|
|
|
|
|
@name.setter
|
|
|
|
|
def name(self, n: str):
|
|
|
|
|
self._name = n
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def start(self):
|
|
|
|
|
return datetime.fromtimestamp(self._start)
|
|
|
|
|
|
|
|
|
|
@start.setter
|
|
|
|
|
def start(self, d: datetime):
|
2024-06-13 11:59:46 +02:00
|
|
|
_d = d.replace(second=0, microsecond=0)
|
|
|
|
|
self._start = _d.timestamp()
|
2024-06-13 10:09:54 +02:00
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def end(self):
|
2024-06-13 10:38:43 +02:00
|
|
|
if "_end" in self.__dict__:
|
|
|
|
|
return datetime.fromtimestamp(self._end)
|
|
|
|
|
return None
|
2024-06-13 10:09:54 +02:00
|
|
|
|
|
|
|
|
@end.setter
|
|
|
|
|
def end(self, d: datetime):
|
2024-06-13 11:59:46 +02:00
|
|
|
_d = d.replace(second=0, microsecond=0)
|
|
|
|
|
if _d < self.start:
|
2024-06-13 10:09:54 +02:00
|
|
|
raise ValueError("End date must be after the start date.")
|
2024-06-13 11:59:46 +02:00
|
|
|
self._end = _d.timestamp()
|
2024-06-13 11:15:48 +02:00
|
|
|
|
|
|
|
|
def end_now(self):
|
|
|
|
|
self.end = datetime.now()
|
2025-11-13 19:04:55 +01:00
|
|
|
|
|
|
|
|
def duration(self) -> datetime.timedelta:
|
|
|
|
|
end = self.end
|
|
|
|
|
if not end: end = datetime.now()
|
2025-11-26 16:00:08 +01:00
|
|
|
return end - self.start
|