for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
"""
byceps.services.orga_presence.models
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Copyright: 2014-2023 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
from enum import Enum
from uuid import UUID
from ..party.models import Party
from ..user.models.user import User
from ...util.datetime.range import DateTimeRange
TimeSlotType = Enum('TimeSlotType', ['party', 'presence', 'task'])
@dataclass(frozen=True)
class TimeSlot:
type: TimeSlotType
starts_at: datetime
ends_at: datetime
@property
def range(self) -> DateTimeRange:
return DateTimeRange(self.starts_at, self.ends_at)
class PartyTimeSlot(TimeSlot):
party: Party
@classmethod
def from_party(cls, party: Party) -> PartyTimeSlot:
return cls(
type=TimeSlotType.party,
starts_at=party.starts_at,
ends_at=party.ends_at,
party=party,
)
class PresenceTimeSlot(TimeSlot):
id: UUID
orga: User
def from_(
cls,
time_slot_id: UUID,
orga: User,
starts_at: datetime,
ends_at: datetime,
) -> PresenceTimeSlot:
id=time_slot_id,
type=TimeSlotType.presence,
starts_at=starts_at,
ends_at=ends_at,
orga=orga,
class TaskTimeSlot(TimeSlot):
title: str
title: str,
) -> TaskTimeSlot:
type=TimeSlotType.task,
title=title,