Source code for ascetic_ddd.seedwork.domain.values.time_range

import datetime
from abc import ABCMeta, abstractmethod

from psycopg.types.range import TimestamptzRange

__all__ = (
    "TimeRange",
    "ITimeRangeExporter",
)


# TODO: Fix interface
[docs] class TimeRange(TimestamptzRange): def __init__( self, lower: datetime.datetime | None = None, upper: datetime.datetime | None = None, ): if lower and not isinstance(lower, datetime.datetime): raise ValueError( "Type of Timeslot.lower should be datetime.datetime, not %r", (lower,) ) if upper and not isinstance(upper, datetime.datetime): raise ValueError( "Type of Timeslot.upper should be datetime.datetime, not %r", (upper,) ) if lower and upper and lower > upper: raise ValueError( "Range lower %s bound must be less than or equal to range upper %s bound", (lower, upper), ) super().__init__(lower, upper)
[docs] def export(self, exporter: "ITimeRangeExporter") -> None: exporter.set_lower(self.lower) exporter.set_upper(self.upper)
[docs] class ITimeRangeExporter(metaclass=ABCMeta):
[docs] @abstractmethod def set_lower(self, value: datetime.datetime) -> None: raise NotImplementedError
[docs] @abstractmethod def set_upper(self, value: datetime.datetime) -> None: raise NotImplementedError