import datetime
from ..base import Property
from .base import Type
[docs]class TimeRange(Type):
"""TimeRange type
An object representing a time range between two timestamps.
Can be used to check if timestamp is within via `in` operator
Example
-------
>>> t0 = datetime.datetime(2018, 1, 1, 14, 00)
>>> t1 = datetime.datetime(2018, 1, 1, 15, 00)
>>> time_range = TimeRange(t0, t1)
>>> test_time = datetime.datetime(2018, 1, 1, 14, 30)
>>> print(test_time in time_range)
True
"""
start_timestamp: datetime.datetime = Property(doc="Start of the time range")
end_timestamp: datetime.datetime = Property(doc="End of the time range")
def __init__(self, start_timestamp, end_timestamp, *args, **kwargs):
if end_timestamp < start_timestamp:
raise ValueError("start_timestamp must be before end_timestamp")
super().__init__(start_timestamp, end_timestamp, *args, **kwargs)
@property
def duration(self):
"""Duration of the time range"""
return self.end_timestamp - self.start_timestamp
def __contains__(self, timestamp):
"""Checks if timestamp is within range
Parameters
----------
timestamp : datetime.datetime
Time stamp to check if within range
Returns
-------
bool
`True` if timestamp within :attr:`start_timestamp` and
:attr:`end_timestamp` (inclusive)
"""
return self.start_timestamp <= timestamp <= self.end_timestamp