Passed
Push — main ( 4dce73...0d6f99 )
by Jochen
04:31
created

DateTimeRange.__contains__()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.125

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 2
dl 0
loc 5
ccs 1
cts 2
cp 0.5
crap 1.125
rs 10
c 0
b 0
f 0
1
"""
2
byceps.util.datetime.range
3
~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2021 Jochen Kupperschmidt
6
:License: Revised BSD (see `LICENSE` file for details)
7
"""
8
9 1
from collections import namedtuple
10 1
from datetime import datetime
11 1
from typing import Iterable, Iterator
12
13 1
from ..iterables import pairwise
14
15
16 1
class DateTimeRange(namedtuple('DateTimeRange', ['start', 'end'])):
17
    """A date/time range with an inclusive start and an exclusive end."""
18
19 1
    __slots__ = ()
20
21 1
    def contains(self, dt: datetime) -> bool:
22 1
        return self.start <= dt < self.end
23
24 1
    def __contains__(self, dt: datetime) -> bool:
25
        """Return `True` if the date/time is contained in the range
26
        represented by this object.
27
        """
28
        return self.contains(dt)
29
30 1
    def __repr__(self) -> str:
31 1
        return f'[{self.start}..{self.end})'
32
33
34 1
def create_adjacent_ranges(dts: Iterable[datetime]) -> Iterator[DateTimeRange]:
35
    """Yield adjacent ranges from successive date/time values."""
36 1
    for pair in pairwise(dts):
37
        yield DateTimeRange._make(pair)
38