Exemplo n.º 1
0
    def _intervalize(self, sorted_iter: dicts) -> Iterator['TimeInterval']:
        """Returns a list with of TimeIntervals objects.

        If there is an incomplete interval, y create an empty starting
        or ending interval
        """
        skip_loop = False

        # Compere every item with the next one to find his pair.
        for i, el in enumerate(sorted_iter):
            if skip_loop == True:
                skip_loop = False
                continue
            el1 = sorted_iter[i + 1] if (i + 1) < len(sorted_iter) else None

            # Creates a perfect pair interval if finds a proper initial
            # and final point. Else, an incomplete interval is created,
            # depending on wich limit is missiing, start or end.
            kwargs = {k: v for k, v in el.items() if k in self._args}
            if self._are_pair(el, el1):
                interval = TimeInterval(start=el[self._dt_loc],
                                        end=el1[self._dt_loc],
                                        **kwargs)
                skip_loop = True
            elif self._is_start(el):
                interval = TimeInterval(start=el[self._dt_loc], **kwargs)
                skip_loop = False
            elif self._is_end(el):
                interval = TimeInterval(end=el[self._dt_loc], **kwargs)
                skip_loop = False
            yield interval
Exemplo n.º 2
0
    def setUp(self):

        self.dt_111710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=11,
                                  minute=17,
                                  second=10)
        self.dt_121710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=12,
                                  minute=17,
                                  second=10)
        self.dt_131710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=13,
                                  minute=17,
                                  second=10)
        self.dt_134710 = self.dt_131710 + timedelta(minutes=30)
        self.dt_141710 = self.dt_121710 + timedelta(hours=2)
        self.dt_151710 = self.dt_131710 + timedelta(hours=2)

        self.int_111710_121710 = TimeInterval(start=self.dt_111710,
                                              end=self.dt_121710)
        self.int_121710_131710 = TimeInterval(start=self.dt_121710,
                                              end=self.dt_131710)
        self.int_131710_141710 = TimeInterval(start=self.dt_131710,
                                              end=self.dt_141710)

        self.int_121710_151710 = TimeInterval(start=self.dt_121710,
                                              end=self.dt_151710)
        self.int_131710_141710 = TimeInterval(start=self.dt_131710,
                                              end=self.dt_141710)

        self.int_111710_empty = TimeInterval(start=self.dt_111710, end='')
        self.int_121710_empty = TimeInterval(start=self.dt_121710, end='')

        self.int_empty_111710 = TimeInterval(start='', end=self.dt_111710)
        self.int_empty_121710 = TimeInterval(start='', end=self.dt_121710)

        self.all = []
        self.perfect = []

        # Filling the perfect list, with only complete intervals
        for key, value in self.__dict__.items():
            if key.startswith("int_") and key.find('empty') is -1:
                self.perfect.append(value)

        # Filling the all list, with every interval
        for key, value in self.__dict__.items():
            if key.startswith("int_"):
                self.all.append(value)
Exemplo n.º 3
0
 def test_duration_and_is_perfect_not_end(self):
     # Test duration and is_perfect prop without `end` attributte.
     # Should return an empty str and False.
     interval = TimeInterval(start=self.start_str)
     self.assertEqual(interval.duration,
                      '',
                      msg="interval.duration should be an empty string")
     self.assertEqual(interval.is_perfect, False)
Exemplo n.º 4
0
 def test_empty_end_attr(self):
     # Test that an empty `end` attr creates an empty string as
     # end property
     start = '12/12/2019 12:03:52'
     interval = TimeInterval(start=start)
     self.assertEqual(interval.end,
                      '',
                      msg='end property must be an empty string')
Exemplo n.º 5
0
    def setUp(self):

        self.dt_111710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=11,
                                  minute=17,
                                  second=10)
        self.dt_121710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=12,
                                  minute=17,
                                  second=10)
        self.dt_131710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=13,
                                  minute=17,
                                  second=10)

        self.int_111710_121710_1 = TimeInterval(start=self.dt_111710,
                                                end=self.dt_121710)
        self.int_111710_121710_2 = TimeInterval(start=self.dt_111710,
                                                end=self.dt_121710)

        self.int_111710_empty_1 = TimeInterval(start=self.dt_111710, end='')
        self.int_111710_empty_2 = TimeInterval(start=self.dt_111710, end='')

        self.int_empty_111710_1 = TimeInterval(start='', end=self.dt_111710)
        self.int_empty_111710_2 = TimeInterval(start='', end=self.dt_111710)
        self.int_empty_121710 = TimeInterval(start='', end=self.dt_121710)
Exemplo n.º 6
0
 def test_duration_and_is_perfect_normal_str(self):
     # Test duration and is_perfect with valid str format datetime
     interval = TimeInterval(start=self.start_str, end=self.end_str)
     self.assertEqual(
         interval.duration,
         self.str_duration,
         msg="interval.duration and self.str_duration should have same value"
     )
     self.assertEqual(interval.is_perfect, True)
Exemplo n.º 7
0
 def test_aditional_params_dict(self):
     # Test passing aditional params in a dictionary
     interval = TimeInterval(start=self.strat_dt,
                             end=self.end_dt,
                             **self.aditional)
     self.assertEqual(interval.name, 'Peter')
     self.assertEqual(interval.age, 58)
     self.assertEqual(interval.email, '*****@*****.**')
     self.assertEqual(interval.height, 1.56)
Exemplo n.º 8
0
    def test_duration_and_is_perfect_normal_datetime(self):
        # Test the properties with normal and valid attribbutes

        # That means that `start` and `end` are valid datetime and that
        # `start` < `end`.
        interval = TimeInterval(start=self.strat_dt, end=self.end_dt)
        self.assertEqual(
            interval.duration,
            self.dt_duration,
            msg="interval.duration and self.dt_duration should be the same")
        self.assertEqual(interval.is_perfect, True)
Exemplo n.º 9
0
 def test_string_iso_date(self):
     # Test that a string datetimeISO format objet returns a valid
     # datetime object for the `start` attribute.
     for sep in DATE_SEPARATORS:
         date_str = '2019{s}12{s}01 17:00:59'.format(s=sep)
         formated_date = datetime.strptime(
             date_str, '%Y{s}%m{s}%d %H:%M:%S'.format(s=sep))
         eep_date = TimeInterval(start=date_str).start
         self.assertEqual(
             formated_date,
             eep_date,
             msg="string datetime and `start` property shoud be the same")
Exemplo n.º 10
0
 def test_string_iso_date_non_padded_decimals(self):
     # Test a non string date ISO format is a valid datetime object
     # for the `start` attribute.
     for sep in DATE_SEPARATORS:
         date_str = '2019{s}2{s}1 23:00:00'.format(s=sep)
         formated_date = datetime.strptime(
             date_str, '%Y{s}%m{s}%d %H:%M:%S'.format(s=sep))
         eep_date = TimeInterval(start=date_str).start
         self.assertEqual(
             formated_date,
             eep_date,
             msg="string datetime and `start` property shoud be the same")
Exemplo n.º 11
0
    def test_end_lower_value(self):
        # Test that an `end` param < than an `start` param, both
        # datetime objects raises a ValueError
        start = datetime(year=2019,
                         month=12,
                         day=19,
                         hour=12,
                         minute=17,
                         second=10)
        end = start + timedelta(hours=-1)

        with self.assertRaises(ValueError):
            TimeInterval(start=start, end=end)
Exemplo n.º 12
0
    def test_little_endian_format_date_non_padded_decimals(self):
        # Test a non zedro padded string little endian format is a valid
        # datetime object for the `start` attribute.

        # Little endian format is: dd-mm-yyyy
        for sep in DATE_SEPARATORS:
            date_str = '1{s}2{s}2019 00:15:23'.format(s=sep)
            formated_date = datetime.strptime(
                date_str, '%d{s}%m{s}%Y %H:%M:%S'.format(s=sep))
            eep_date = TimeInterval(start=date_str).start
            self.assertEqual(
                formated_date,
                eep_date,
                msg="string datetime and `start` property shoud be the same")
Exemplo n.º 13
0
 def test_datetime_datetime_object(self):
     # Test that a datetime object returns a valid datetime object
     # for the `start` attribute.
     date_time_ob = datetime(year=2019,
                             month=12,
                             day=19,
                             hour=12,
                             minute=17,
                             second=10)
     eep_date = TimeInterval(start=date_time_ob).start
     self.assertEqual(
         date_time_ob,
         eep_date,
         msg="datetime from datetime and property `start` are different")
Exemplo n.º 14
0
    def test_little_endian_format_date(self):
        # Test that a string datetime with little endian format is a
        # valid datetime object for the `start` attribute.

        # Little endian format is: dd-mm-yyyy
        for sep in DATE_SEPARATORS:
            date_str = '01{s}02{s}2019 12:24:59'.format(s=sep)
            formated_date = datetime.strptime(
                date_str, '%d{s}%m{s}%Y %H:%M:%S'.format(s=sep))
            eep_date = TimeInterval(start=date_str).start
            self.assertEqual(
                formated_date,
                eep_date,
                msg="string datetime and `start` property shoud be the same")
Exemplo n.º 15
0
    def setUp(self):

        self.dt_111710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=11,
                                  minute=17,
                                  second=10)
        self.dt_121710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=12,
                                  minute=17,
                                  second=10)
        self.dt_131710 = datetime(year=2019,
                                  month=12,
                                  day=19,
                                  hour=13,
                                  minute=17,
                                  second=10)
        self.dt_134710 = self.dt_131710 + timedelta(minutes=30)
        self.dt_141710 = self.dt_121710 + timedelta(hours=2)
        self.dt_151710 = self.dt_131710 + timedelta(hours=2)

        self.int_111710_121710 = TimeInterval(start=self.dt_111710,
                                              end=self.dt_121710)
        self.int_121710_131710 = TimeInterval(start=self.dt_121710,
                                              end=self.dt_131710)
        self.int_131710_141710 = TimeInterval(start=self.dt_131710,
                                              end=self.dt_141710)

        self.int_121710_151710 = TimeInterval(start=self.dt_121710,
                                              end=self.dt_151710)
        self.int_131710_141710 = TimeInterval(start=self.dt_131710,
                                              end=self.dt_141710)

        self.int_111710_empty = TimeInterval(start=self.dt_111710, end='')
        self.int_121710_empty = TimeInterval(start=self.dt_121710, end='')

        self.int_empty_111710 = TimeInterval(start='', end=self.dt_111710)
        self.int_empty_121710 = TimeInterval(start='', end=self.dt_121710)
Exemplo n.º 16
0
    def test_complete_datetime_interval(self):
        # Test that an `start` param < than an `end` param, both
        # datetime objects creates valid values for `start and `end`
        # properties
        start = datetime(year=2019,
                         month=12,
                         day=19,
                         hour=12,
                         minute=17,
                         second=10)
        end = start + timedelta(hours=1)
        interval = TimeInterval(start=start, end=end)

        self.assertEqual(interval.start,
                         start,
                         msg="start var and interval.start should be equals")
        self.assertEqual(interval.end,
                         end,
                         msg="end var and interval.end should be equals")
Exemplo n.º 17
0
 def test_aditional_params(self):
     # Test that aditional params are callables.
     # The must return the expected value.
     interval = TimeInterval(start=self.strat_dt,
                             end=self.end_dt,
                             name='Tom',
                             age=45,
                             height=1.78,
                             is_employ=True)
     self.assertEqual(interval.name,
                      'Tom',
                      msg="interva.name should be 'Tom'")
     self.assertEqual(interval.age, 45, msg="interva.age should be 45")
     self.assertEqual(interval.height,
                      1.78,
                      msg="interva.height should be 1.78")
     self.assertEqual(interval.is_employ,
                      True,
                      msg="interva.is_employ should be True")
Exemplo n.º 18
0
 def test_empty_start_attr(self):
     # Test that an empty `start` attribute creates an object with an
     # empty string start attribbute
     self.assertEqual(TimeInterval().start, '')
Exemplo n.º 19
0
 def test_date_object(self):
     # Test that a date object returns a ValueError
     date_ob = date(year=2019, month=12, day=19)
     with self.assertRaises(ValueError):
         TimeInterval(start=date_ob)
Exemplo n.º 20
0
 def test_string_iso_date_error(self):
     # Test an string ISO datetime format with an error
     for sep in DATE_SEPARATORS:
         date_str = '209{s}12{s}01'.format(s=sep)
         with self.assertRaises(ValueError):
             TimeInterval(start=date_str)