예제 #1
0
    def range_check_interval(cls, start=None, end=None, duration=None):
        #Handles concise format, range checks any potential durations
        if start is not None and end is not None:
            #<start>/<end>
            #Handle concise format
            if cls._is_interval_end_concise(end) is True:
                end = cls._combine_concise_interval_tuples(start, end)

            return (start, end, duration)

        durationobject = cls._build_object(duration)

        if end is not None:
            #<duration>/<end>
            endobject = cls._build_object(end)

            #Range check
            if type(end) is DateTuple:
                enddatetime = cls.build_datetime(end,
                                                 TupleBuilder.build_time())

                if enddatetime - datetime.datetime.min < durationobject:
                    raise YearOutOfBoundsError(
                        'Interval end less than minimium date.')
            else:
                mindatetime = datetime.datetime.min

                if end.time.tz is not None:
                    mindatetime = mindatetime.replace(tzinfo=endobject.tzinfo)

                if endobject - mindatetime < durationobject:
                    raise YearOutOfBoundsError(
                        'Interval end less than minimium date.')
        else:
            #<start>/<duration>
            startobject = cls._build_object(start)

            #Range check
            if type(start) is DateTuple:
                startdatetime = cls.build_datetime(start,
                                                   TupleBuilder.build_time())

                if datetime.datetime.max - startdatetime < durationobject:
                    raise YearOutOfBoundsError(
                        'Interval end greater than maximum date.')
            else:
                maxdatetime = datetime.datetime.max

                if start.time.tz is not None:
                    maxdatetime = maxdatetime.replace(
                        tzinfo=startobject.tzinfo)

                if maxdatetime - startobject < durationobject:
                    raise YearOutOfBoundsError(
                        'Interval end greater than maximum date.')

        return (start, end, duration)
    def test_build_date(self):
        datetuple = TupleBuilder.build_date()

        self.assertEqual(datetuple, (None, None, None,
                                     None, None, None,
                                     'date'))

        datetuple = TupleBuilder.build_date(YYYY='1', MM='2', DD='3',
                                            Www='4', D='5', DDD='6')

        self.assertEqual(datetuple, ('1', '2', '3',
                                     '4', '5', '6',
                                     'date'))
예제 #3
0
    def test_build_date(self):
        datetuple = TupleBuilder.build_date()

        self.assertEqual(datetuple,
                         (None, None, None, None, None, None, "date"))

        datetuple = TupleBuilder.build_date(YYYY="1",
                                            MM="2",
                                            DD="3",
                                            Www="4",
                                            D="5",
                                            DDD="6")

        self.assertEqual(datetuple, ("1", "2", "3", "4", "5", "6", "date"))
예제 #4
0
    def test_build_datetime(self):
        testtuples = (
            (
                {
                    "date": DateTuple("1", "2", "3", "4", "5", "6"),
                    "time": TimeTuple("7", "8", "9", None),
                },
                DatetimeTuple(
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    TimeTuple("7", "8", "9", None),
                ),
            ),
            (
                {
                    "date":
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    "time":
                    TimeTuple(
                        "7", "8", "9",
                        TimezoneTuple(True, False, "10", "11", "tz name")),
                },
                DatetimeTuple(
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    TimeTuple(
                        "7", "8", "9",
                        TimezoneTuple(True, False, "10", "11", "tz name")),
                ),
            ),
        )

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_datetime(**testtuple[0]),
                             testtuple[1])
예제 #5
0
    def test_build_time(self):
        testtuples = (({}, TimeTuple(None, None, None, None)), ({
            'hh': '1',
            'mm': '2',
            'ss': '3',
            'tz': None
        }, TimeTuple('1', '2', '3',
                     None)), ({
                         'hh':
                         '1',
                         'mm':
                         '2',
                         'ss':
                         '3',
                         'tz':
                         TimezoneTuple(False, False, '4', '5', 'tz name')
                     },
                              TimeTuple(
                                  '1', '2', '3',
                                  TimezoneTuple(False, False, '4', '5',
                                                'tz name'))))

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_time(**testtuple[0]),
                             testtuple[1])
예제 #6
0
    def test_build_time(self):
        testtuples = (
            ({}, (None, None, None, None, "time")),
            (
                {
                    "hh": "1",
                    "mm": "2",
                    "ss": "3",
                    "tz": None
                },
                ("1", "2", "3", None, "time"),
            ),
            (
                {
                    "hh": "1",
                    "mm": "2",
                    "ss": "3",
                    "tz": (False, False, "4", "5", "tz name", "timezone"),
                },
                (
                    "1",
                    "2",
                    "3",
                    (False, False, "4", "5", "tz name", "timezone"),
                    "time",
                ),
            ),
        )

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_time(**testtuple[0]),
                             testtuple[1])
예제 #7
0
    def test_build_timezone(self):
        testtuples = (({}, (None, None, None, None, '', 'timezone')), ({
            'negative':
            False,
            'Z':
            True,
            'name':
            'UTC'
        }, (False, True, None, None, 'UTC', 'timezone')), ({
            'negative': False,
            'Z': False,
            'hh': '1',
            'mm': '2',
            'name': '+01:02'
        }, (False, False, '1', '2', '+01:02', 'timezone')), ({
            'negative': True,
            'Z': False,
            'hh': '1',
            'mm': '2',
            'name': '-01:02'
        }, (True, False, '1', '2', '-01:02', 'timezone')))

        for testtuple in testtuples:
            result = TupleBuilder.build_timezone(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #8
0
    def test_build_datetime(self):
        testtuples = (({
            'date': DateTuple('1', '2', '3', '4', '5', '6'),
            'time': TimeTuple('7', '8', '9', None)
        },
                       DatetimeTuple(DateTuple('1', '2', '3', '4', '5', '6'),
                                     TimeTuple('7', '8', '9', None))),
                      ({
                          'date':
                          DateTuple('1', '2', '3', '4', '5', '6'),
                          'time':
                          TimeTuple(
                              '7', '8', '9',
                              TimezoneTuple(True, False, '10', '11',
                                            'tz name'))
                      },
                       DatetimeTuple(
                           DateTuple('1', '2', '3', '4', '5', '6'),
                           TimeTuple(
                               '7', '8', '9',
                               TimezoneTuple(True, False, '10', '11',
                                             'tz name')))))

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_datetime(**testtuple[0]),
                             testtuple[1])
    def test_build_repeating_interval(self):
        testtuples = (({}, (None, None, None, 'repeatinginterval')),
                      ({'R': True,
                        'interval': (('1', '2', '3', '4', '5', '6', 'date'),
                                     ('7', '8', '9', '10', '11', '12', 'date'),
                                     None, 'interval')},
                       (True, None, (('1', '2', '3', '4', '5', '6', 'date'),
                                     ('7', '8', '9', '10', '11', '12', 'date'),
                                     None, 'interval'),
                        'repeatinginterval')),
                      ({'R': False, 'Rnn': '1',
                        'interval': ((('2', '3', '4', '5', '6', '7',
                                       'date'),
                                      ('8', '9', '10', None, 'time'),
                                      'datetime'),
                                     (('11', '12', '13', '14', '15', '16',
                                       'date'),
                                      ('17', '18', '19', None, 'time'),
                                      'datetime'),
                                     None, 'interval')},
                       (False, '1',
                        ((('2', '3', '4', '5', '6', '7',
                           'date'),
                          ('8', '9', '10', None, 'time'),
                          'datetime'),
                         (('11', '12', '13', '14', '15', '16',
                           'date'),
                          ('17', '18', '19', None, 'time'),
                          'datetime'),
                         None, 'interval'),
                        'repeatinginterval')))

        for testtuple in testtuples:
            result = TupleBuilder.build_repeating_interval(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #10
0
    def build_interval(cls, start=None, end=None, duration=None):
        start, end, duration = cls.range_check_interval(start, end, duration)

        if start is not None and end is not None:
            # <start>/<end>
            startobject = cls._build_object(start)
            endobject = cls._build_object(end)

            return (startobject, endobject)

        durationobject = cls._build_object(duration)

        # Determine if datetime promotion is required
        datetimerequired = (duration.TnH is not None
                            or duration.TnM is not None
                            or duration.TnS is not None
                            or durationobject.seconds != 0
                            or durationobject.microseconds != 0)

        if end is not None:
            # <duration>/<end>
            endobject = cls._build_object(end)

            # Range check
            if type(end) is DateTuple and datetimerequired is True:
                # <end> is a date, and <duration> requires datetime resolution
                return (
                    endobject,
                    cls.build_datetime(end, TupleBuilder.build_time()) -
                    durationobject,
                )

            return (endobject, endobject - durationobject)

        # <start>/<duration>
        startobject = cls._build_object(start)

        # Range check
        if type(start) is DateTuple and datetimerequired is True:
            # <start> is a date, and <duration> requires datetime resolution
            return (
                startobject,
                cls.build_datetime(start, TupleBuilder.build_time()) +
                durationobject,
            )

        return (startobject, startobject + durationobject)
예제 #11
0
파일: python.py 프로젝트: otr0624/StoreApp
    def build_interval(cls, start=None, end=None, duration=None):
        if start is not None and end is not None:
            # <start>/<end>
            startobject = cls._build_object(start)
            endobject = cls._build_object(end)

            return (startobject, endobject)

        durationobject = cls._build_object(duration)

        # Determine if datetime promotion is required
        datetimerequired = (
            duration[4] is not None
            or duration[5] is not None
            or duration[6] is not None
            or durationobject.seconds != 0
            or durationobject.microseconds != 0
        )

        if end is not None:
            # <duration>/<end>
            endobject = cls._build_object(end)
            if end[-1] == "date" and datetimerequired is True:
                # <end> is a date, and <duration> requires datetime resolution
                return (
                    endobject,
                    cls.build_datetime(end, TupleBuilder.build_time()) - durationobject,
                )

            return (endobject, endobject - durationobject)

        # <start>/<duration>
        startobject = cls._build_object(start)

        if start[-1] == "date" and datetimerequired is True:
            # <start> is a date, and <duration> requires datetime resolution
            return (
                startobject,
                cls.build_datetime(start, TupleBuilder.build_time()) + durationobject,
            )

        return (startobject, startobject + durationobject)
    def test_build_duration(self):
        testtuples = (({}, (None, None, None, None, None, None, None,
                            'duration')),
                      ({'PnY': '1', 'PnM': '2', 'PnW': '3', 'PnD': '4',
                        'TnH': '5', 'TnM': '6', 'TnS': '7'},
                       ('1', '2', '3', '4',
                        '5', '6', '7',
                        'duration')))

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_duration(**testtuple[0]),
                             testtuple[1])
예제 #13
0
    def test_build_interval(self):
        testtuples = (({}, (None, None, None, 'interval')), ({
            'start': ('1', '2', '3', '4', '5', '6', 'date'),
            'end': ('7', '8', '9', '10', '11', '12', 'date')
        }, (('1', '2', '3', '4', '5', '6', 'date'),
            ('7', '8', '9', '10', '11', '12', 'date'), None, 'interval')), ({
                'start': ('1', '2', '3', (True, False, '7', '8', 'tz name',
                                          'timezone'), 'time'),
                'end': ('4', '5', '6', (False, False, '9', '10', 'tz name',
                                        'timezone'), 'time')
            }, (('1', '2', '3', (True, False, '7', '8', 'tz name', 'timezone'),
                 'time'), ('4', '5', '6', (False, False, '9', '10', 'tz name',
                                           'timezone'), 'time'), None,
                'interval')), ({
                    'start':
                    (('1', '2', '3', '4', '5', '6', 'date'),
                     ('7', '8', '9', (True, False, '10', '11', 'tz name',
                                      'timezone'), 'time'), 'datetime'),
                    'end':
                    (('12', '13', '14', '15', '16', '17', 'date'),
                     ('18', '19', '20', (False, False, '21', '22', 'tz name',
                                         'timezone'), 'time'), 'datetime')
                }, ((('1', '2', '3', '4', '5', '6', 'date'),
                     ('7', '8', '9', (True, False, '10', '11', 'tz name',
                                      'timezone'), 'time'), 'datetime'),
                    (('12', '13', '14', '15', '16', '17', 'date'),
                     ('18', '19', '20', (False, False, '21', '22', 'tz name',
                                         'timezone'), 'time'), 'datetime'),
                    None, 'interval')), ({
                        'start': ('1', '2', '3', '4', '5', '6', 'date'),
                        'end':
                        None,
                        'duration':
                        ('7', '8', '9', '10', '11', '12', '13', 'duration')
                    }, (('1', '2', '3', '4', '5', '6', 'date'), None,
                        ('7', '8', '9', '10', '11', '12', '13',
                         'duration'), 'interval')), ({
                             'start':
                             None,
                             'end':
                             ('1', '2', '3', (True, False, '4', '5', 'tz name',
                                              'timezone'), 'time'),
                             'duration':
                             ('6', '7', '8', '9', '10', '11', '12', 'duration')
                         }, (None, ('1', '2', '3', (True, False, '4', '5',
                                                    'tz name', 'timezone'),
                                    'time'), ('6', '7', '8', '9', '10', '11',
                                              '12', 'duration'), 'interval')))

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_interval(**testtuple[0]),
                             testtuple[1])
예제 #14
0
    def test_build_repeating_interval(self):
        testtuples = (({}, RepeatingIntervalTuple(
            None, None, None)), ({
                'R':
                True,
                'interval':
                IntervalTuple(DateTuple('1', '2', '3', '4', '5', '6'),
                              DateTuple('7', '8', '9', '10', '11', '12'), None)
            },
                                 RepeatingIntervalTuple(
                                     True, None,
                                     IntervalTuple(
                                         DateTuple('1', '2', '3', '4', '5',
                                                   '6'),
                                         DateTuple('7', '8', '9', '10', '11',
                                                   '12'), None))),
                      ({
                          'R':
                          False,
                          'Rnn':
                          '1',
                          'interval':
                          IntervalTuple(
                              DatetimeTuple(
                                  DateTuple('2', '3', '4', '5', '6', '7'),
                                  TimeTuple('8', '9', '10', None)),
                              DatetimeTuple(
                                  DateTuple('11', '12', '13', '14', '15',
                                            '16'),
                                  TimeTuple('17', '18', '19', None)), None)
                      },
                       RepeatingIntervalTuple(
                           False, '1',
                           IntervalTuple(
                               DatetimeTuple(
                                   DateTuple('2', '3', '4', '5', '6', '7'),
                                   TimeTuple('8', '9', '10', None)),
                               DatetimeTuple(
                                   DateTuple('11', '12', '13', '14', '15',
                                             '16'),
                                   TimeTuple('17', '18', '19', None)), None))))

        for testtuple in testtuples:
            result = TupleBuilder.build_repeating_interval(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #15
0
    def test_build_duration(self):
        testtuples = (
            ({}, (None, None, None, None, None, None, None, "duration")),
            (
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnW": "3",
                    "PnD": "4",
                    "TnH": "5",
                    "TnM": "6",
                    "TnS": "7",
                },
                ("1", "2", "3", "4", "5", "6", "7", "duration"),
            ),
        )

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_duration(**testtuple[0]),
                             testtuple[1])
예제 #16
0
    def test_build_timezone(self):
        testtuples = (
            ({}, (None, None, None, None, "", "timezone")),
            (
                {
                    "negative": False,
                    "Z": True,
                    "name": "UTC"
                },
                (False, True, None, None, "UTC", "timezone"),
            ),
            (
                {
                    "negative": False,
                    "Z": False,
                    "hh": "1",
                    "mm": "2",
                    "name": "+01:02"
                },
                (False, False, "1", "2", "+01:02", "timezone"),
            ),
            (
                {
                    "negative": True,
                    "Z": False,
                    "hh": "1",
                    "mm": "2",
                    "name": "-01:02"
                },
                (True, False, "1", "2", "-01:02", "timezone"),
            ),
        )

        for testtuple in testtuples:
            result = TupleBuilder.build_timezone(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #17
0
    def test_build_interval(self):
        testtuples = (
            ({}, IntervalTuple(None, None, None)),
            (
                {
                    "start": DateTuple("1", "2", "3", "4", "5", "6"),
                    "end": DateTuple("7", "8", "9", "10", "11", "12"),
                },
                IntervalTuple(
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    DateTuple("7", "8", "9", "10", "11", "12"),
                    None,
                ),
            ),
            (
                {
                    "start":
                    TimeTuple("1", "2", "3",
                              TimezoneTuple(True, False, "7", "8", "tz name")),
                    "end":
                    TimeTuple(
                        "4", "5", "6",
                        TimezoneTuple(False, False, "9", "10", "tz name")),
                },
                IntervalTuple(
                    TimeTuple("1", "2", "3",
                              TimezoneTuple(True, False, "7", "8", "tz name")),
                    TimeTuple(
                        "4", "5", "6",
                        TimezoneTuple(False, False, "9", "10", "tz name")),
                    None,
                ),
            ),
            (
                {
                    "start":
                    DatetimeTuple(
                        DateTuple("1", "2", "3", "4", "5", "6"),
                        TimeTuple(
                            "7",
                            "8",
                            "9",
                            TimezoneTuple(True, False, "10", "11", "tz name"),
                        ),
                    ),
                    "end":
                    DatetimeTuple(
                        DateTuple("12", "13", "14", "15", "16", "17"),
                        TimeTuple(
                            "18",
                            "19",
                            "20",
                            TimezoneTuple(False, False, "21", "22", "tz name"),
                        ),
                    ),
                },
                IntervalTuple(
                    DatetimeTuple(
                        DateTuple("1", "2", "3", "4", "5", "6"),
                        TimeTuple(
                            "7",
                            "8",
                            "9",
                            TimezoneTuple(True, False, "10", "11", "tz name"),
                        ),
                    ),
                    DatetimeTuple(
                        DateTuple("12", "13", "14", "15", "16", "17"),
                        TimeTuple(
                            "18",
                            "19",
                            "20",
                            TimezoneTuple(False, False, "21", "22", "tz name"),
                        ),
                    ),
                    None,
                ),
            ),
            (
                {
                    "start":
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    "end":
                    None,
                    "duration":
                    DurationTuple("7", "8", "9", "10", "11", "12", "13"),
                },
                IntervalTuple(
                    DateTuple("1", "2", "3", "4", "5", "6"),
                    None,
                    DurationTuple("7", "8", "9", "10", "11", "12", "13"),
                ),
            ),
            (
                {
                    "start":
                    None,
                    "end":
                    TimeTuple("1", "2", "3",
                              TimezoneTuple(True, False, "4", "5", "tz name")),
                    "duration":
                    DurationTuple("6", "7", "8", "9", "10", "11", "12"),
                },
                IntervalTuple(
                    None,
                    TimeTuple("1", "2", "3",
                              TimezoneTuple(True, False, "4", "5", "tz name")),
                    DurationTuple("6", "7", "8", "9", "10", "11", "12"),
                ),
            ),
        )

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_interval(**testtuple[0]),
                             testtuple[1])
예제 #18
0
    def test_build_repeating_interval(self):
        testtuples = (
            ({}, (None, None, None, "repeatinginterval")),
            (
                {
                    "R":
                    True,
                    "interval": (
                        ("1", "2", "3", "4", "5", "6", "date"),
                        ("7", "8", "9", "10", "11", "12", "date"),
                        None,
                        "interval",
                    ),
                },
                (
                    True,
                    None,
                    (
                        ("1", "2", "3", "4", "5", "6", "date"),
                        ("7", "8", "9", "10", "11", "12", "date"),
                        None,
                        "interval",
                    ),
                    "repeatinginterval",
                ),
            ),
            (
                {
                    "R":
                    False,
                    "Rnn":
                    "1",
                    "interval": (
                        (
                            ("2", "3", "4", "5", "6", "7", "date"),
                            ("8", "9", "10", None, "time"),
                            "datetime",
                        ),
                        (
                            ("11", "12", "13", "14", "15", "16", "date"),
                            ("17", "18", "19", None, "time"),
                            "datetime",
                        ),
                        None,
                        "interval",
                    ),
                },
                (
                    False,
                    "1",
                    (
                        (
                            ("2", "3", "4", "5", "6", "7", "date"),
                            ("8", "9", "10", None, "time"),
                            "datetime",
                        ),
                        (
                            ("11", "12", "13", "14", "15", "16", "date"),
                            ("17", "18", "19", None, "time"),
                            "datetime",
                        ),
                        None,
                        "interval",
                    ),
                    "repeatinginterval",
                ),
            ),
        )

        for testtuple in testtuples:
            result = TupleBuilder.build_repeating_interval(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #19
0
    def test_build_interval(self):
        testtuples = (
            ({}, (None, None, None, "interval")),
            (
                {
                    "start": ("1", "2", "3", "4", "5", "6", "date"),
                    "end": ("7", "8", "9", "10", "11", "12", "date"),
                },
                (
                    ("1", "2", "3", "4", "5", "6", "date"),
                    ("7", "8", "9", "10", "11", "12", "date"),
                    None,
                    "interval",
                ),
            ),
            (
                {
                    "start": (
                        "1",
                        "2",
                        "3",
                        (True, False, "7", "8", "tz name", "timezone"),
                        "time",
                    ),
                    "end": (
                        "4",
                        "5",
                        "6",
                        (False, False, "9", "10", "tz name", "timezone"),
                        "time",
                    ),
                },
                (
                    (
                        "1",
                        "2",
                        "3",
                        (True, False, "7", "8", "tz name", "timezone"),
                        "time",
                    ),
                    (
                        "4",
                        "5",
                        "6",
                        (False, False, "9", "10", "tz name", "timezone"),
                        "time",
                    ),
                    None,
                    "interval",
                ),
            ),
            (
                {
                    "start": (
                        ("1", "2", "3", "4", "5", "6", "date"),
                        (
                            "7",
                            "8",
                            "9",
                            (True, False, "10", "11", "tz name", "timezone"),
                            "time",
                        ),
                        "datetime",
                    ),
                    "end": (
                        ("12", "13", "14", "15", "16", "17", "date"),
                        (
                            "18",
                            "19",
                            "20",
                            (False, False, "21", "22", "tz name", "timezone"),
                            "time",
                        ),
                        "datetime",
                    ),
                },
                (
                    (
                        ("1", "2", "3", "4", "5", "6", "date"),
                        (
                            "7",
                            "8",
                            "9",
                            (True, False, "10", "11", "tz name", "timezone"),
                            "time",
                        ),
                        "datetime",
                    ),
                    (
                        ("12", "13", "14", "15", "16", "17", "date"),
                        (
                            "18",
                            "19",
                            "20",
                            (False, False, "21", "22", "tz name", "timezone"),
                            "time",
                        ),
                        "datetime",
                    ),
                    None,
                    "interval",
                ),
            ),
            (
                {
                    "start": ("1", "2", "3", "4", "5", "6", "date"),
                    "end":
                    None,
                    "duration":
                    ("7", "8", "9", "10", "11", "12", "13", "duration"),
                },
                (
                    ("1", "2", "3", "4", "5", "6", "date"),
                    None,
                    ("7", "8", "9", "10", "11", "12", "13", "duration"),
                    "interval",
                ),
            ),
            (
                {
                    "start":
                    None,
                    "end": (
                        "1",
                        "2",
                        "3",
                        (True, False, "4", "5", "tz name", "timezone"),
                        "time",
                    ),
                    "duration":
                    ("6", "7", "8", "9", "10", "11", "12", "duration"),
                },
                (
                    None,
                    (
                        "1",
                        "2",
                        "3",
                        (True, False, "4", "5", "tz name", "timezone"),
                        "time",
                    ),
                    ("6", "7", "8", "9", "10", "11", "12", "duration"),
                    "interval",
                ),
            ),
        )

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_interval(**testtuple[0]),
                             testtuple[1])
예제 #20
0
    def test_build_repeating_interval(self):
        testtuples = (
            ({}, RepeatingIntervalTuple(None, None, None)),
            (
                {
                    "R":
                    True,
                    "interval":
                    IntervalTuple(
                        DateTuple("1", "2", "3", "4", "5", "6"),
                        DateTuple("7", "8", "9", "10", "11", "12"),
                        None,
                    ),
                },
                RepeatingIntervalTuple(
                    True,
                    None,
                    IntervalTuple(
                        DateTuple("1", "2", "3", "4", "5", "6"),
                        DateTuple("7", "8", "9", "10", "11", "12"),
                        None,
                    ),
                ),
            ),
            (
                {
                    "R":
                    False,
                    "Rnn":
                    "1",
                    "interval":
                    IntervalTuple(
                        DatetimeTuple(
                            DateTuple("2", "3", "4", "5", "6", "7"),
                            TimeTuple("8", "9", "10", None),
                        ),
                        DatetimeTuple(
                            DateTuple("11", "12", "13", "14", "15", "16"),
                            TimeTuple("17", "18", "19", None),
                        ),
                        None,
                    ),
                },
                RepeatingIntervalTuple(
                    False,
                    "1",
                    IntervalTuple(
                        DatetimeTuple(
                            DateTuple("2", "3", "4", "5", "6", "7"),
                            TimeTuple("8", "9", "10", None),
                        ),
                        DatetimeTuple(
                            DateTuple("11", "12", "13", "14", "15", "16"),
                            TimeTuple("17", "18", "19", None),
                        ),
                        None,
                    ),
                ),
            ),
        )

        for testtuple in testtuples:
            result = TupleBuilder.build_repeating_interval(**testtuple[0])
            self.assertEqual(result, testtuple[1])
예제 #21
0
def _parse_interval_end(endstr, starttuple, datetimedelimiter):
    datestr = None
    timestr = None

    monthstr = None
    daystr = None

    concise = False

    if type(starttuple) is DateTuple:
        startdatetuple = starttuple
    else:
        #Start is a datetime
        startdatetuple = starttuple.date

    if datetimedelimiter in endstr:
        datestr, timestr = endstr.split(datetimedelimiter, 1)
    elif ':' in endstr:
        timestr = endstr
    else:
        datestr = endstr

    if timestr is not None:
        endtimetuple = parse_time(timestr, builder=TupleBuilder)

    #End is just a time
    if datestr is None:
        return endtimetuple

    #Handle backwards concise representation
    if datestr.count('-') == 1:
        monthstr, daystr = datestr.split('-')
        concise = True
    elif len(datestr) <= 2:
        daystr = datestr
        concise = True
    elif len(datestr) <= 4:
        monthstr = datestr[0:2]
        daystr = datestr[2:]
        concise = True

    if concise is True:
        concisedatestr = startdatetuple.YYYY

        #Separators required because concise elements may be missing digits
        if monthstr is not None:
            concisedatestr += '-' + monthstr
        elif startdatetuple.MM is not None:
            concisedatestr += '-' + startdatetuple.MM

        concisedatestr += '-' + daystr

        enddatetuple = parse_date(concisedatestr, builder=TupleBuilder)

        #Clear unsupplied components
        if monthstr is None:
            enddatetuple = TupleBuilder.build_date(DD=enddatetuple.DD)
        else:
            #Year not provided
            enddatetuple = TupleBuilder.build_date(MM=enddatetuple.MM,
                                                   DD=enddatetuple.DD)
    else:
        enddatetuple = parse_date(datestr, builder=TupleBuilder)

    if timestr is None:
        return enddatetuple

    return TupleBuilder.build_datetime(enddatetuple, endtimetuple)
예제 #22
0
    def test_build_interval(self):
        testtuples = (({}, IntervalTuple(
            None, None,
            None)), ({
                'start': DateTuple('1', '2', '3', '4', '5', '6'),
                'end': DateTuple('7', '8', '9', '10', '11', '12')
            },
                     IntervalTuple(DateTuple('1', '2', '3', '4', '5', '6'),
                                   DateTuple('7', '8', '9', '10', '11', '12'),
                                   None)),
                      ({
                          'start':
                          TimeTuple(
                              '1',
                              '2',
                              '3',
                              TimezoneTuple(True, False, '7', '8', 'tz name')),
                          'end':
                          TimeTuple(
                              '4',
                              '5',
                              '6',
                              TimezoneTuple(False, False, '9', '10',
                                            'tz name'))
                      },
                       IntervalTuple(
                           TimeTuple(
                               '1', '2', '3',
                               TimezoneTuple(True, False, '7', '8',
                                             'tz name')),
                           TimeTuple(
                               '4', '5', '6',
                               TimezoneTuple(False, False, '9', '10',
                                             'tz name')), None)),
                      ({
                          'start':
                          DatetimeTuple(
                              DateTuple('1', '2', '3', '4', '5',
                                        '6'),
                              TimeTuple(
                                  '7',
                                  '8',
                                  '9',
                                  TimezoneTuple(True, False, '10', '11',
                                                'tz name'))),
                          'end':
                          DatetimeTuple(
                              DateTuple('12', '13', '14', '15', '16', '17'),
                              TimeTuple(
                                  '18', '19', '20',
                                  TimezoneTuple(False, False, '21', '22',
                                                'tz name')))
                      },
                       IntervalTuple(
                           DatetimeTuple(
                               DateTuple('1', '2', '3', '4', '5', '6'),
                               TimeTuple(
                                   '7', '8', '9',
                                   TimezoneTuple(True, False, '10', '11',
                                                 'tz name'))),
                           DatetimeTuple(
                               DateTuple('12', '13', '14', '15', '16', '17'),
                               TimeTuple(
                                   '18', '19', '20',
                                   TimezoneTuple(False, False, '21', '22',
                                                 'tz name'))),
                           None)), ({
                               'start':
                               DateTuple('1', '2', '3', '4', '5', '6'),
                               'end':
                               None,
                               'duration':
                               DurationTuple('7', '8', '9', '10', '11', '12',
                                             '13')
                           },
                                    IntervalTuple(
                                        DateTuple('1', '2', '3', '4', '5',
                                                  '6'), None,
                                        DurationTuple('7', '8', '9', '10',
                                                      '11', '12', '13'))),
                      ({
                          'start':
                          None,
                          'end':
                          TimeTuple(
                              '1', '2', '3',
                              TimezoneTuple(True, False, '4', '5', 'tz name')),
                          'duration':
                          DurationTuple('6', '7', '8', '9', '10', '11', '12')
                      },
                       IntervalTuple(
                           None,
                           TimeTuple(
                               '1', '2', '3',
                               TimezoneTuple(True, False, '4', '5',
                                             'tz name')),
                           DurationTuple('6', '7', '8', '9', '10', '11',
                                         '12'))))

        for testtuple in testtuples:
            self.assertEqual(TupleBuilder.build_interval(**testtuple[0]),
                             testtuple[1])