Ejemplo n.º 1
0
    def test_parse_pattern_segment_as_text(self):
        # yapf: disable
        table = [
            ('some -text_[x]', 'some -text_[x]'),
            ('?', None),
            ('*a?b*', None),
            ('%d', None),
            ('%-d', None),
            ('%m', None),
            ('%-m', None),
            ('%y', None),
            ('%Y', None),
            ('%H', None),
            ('%-H', None),
            ('%M', None),
            ('%-M', None),
            ('%S', None),
            ('%-S', None),
            ('%f', None),
            ('%%', '%'),
            ('%y%y', None),
            ('some text *%%*x%Y-%m-%dT%H-%M-%SZ.jpg', None)
        ]
        # yapf: enable

        for pattern_segment, expected_text in table:
            patseg = datetime_glob.parse_pattern_segment(
                pattern_segment=pattern_segment)

            if expected_text is not None:
                self.assertEqual(patseg.text, expected_text)
                self.assertIsNone(patseg.regex)
            else:
                self.assertIsNone(patseg.text)
                self.assertIsNotNone(patseg.regex)
Ejemplo n.º 2
0
    def test_match_segment_for_arbitrary_patterns(self) -> None:
        patseg = datetime_glob.parse_pattern_segment(
            pattern_segment='%-d/%-m/%Y,%H:%M:%S*')
        mtch = datetime_glob.match_segment(
            segment='9/4/2013,00:00:00,7.8,7.4,9.53', pattern_segment=patseg)

        self.assertIsNotNone(mtch)
        assert mtch is not None  # needed for mypy
        self.assertEqual(mtch.as_datetime(), datetime.datetime(2013, 4, 9))
Ejemplo n.º 3
0
    def test_parse_pattern_segment(self) -> None:
        # yapf: disable
        table = [
            ('some -text_[x]', None, {}),
            ('*', '^.*$', {}),
            ('?', '^.$', {}),
            ('*a?b*', '^.*a.b.*$', {}),
            ('%d', '^(0[1-9]|1[0-9]|2[0-9]|3[0-1])$', {1: '%d'}),
            ('%-d', '^(1[0-9]|2[0-9]|3[0-1]|[1-9])$', {1: '%-d'}),
            ('%m', '^(0[1-9]|1[0-2])$', {1: '%m'}),
            ('%-m', '^(1[0-2]|[1-9])$', {1: '%-m'}),
            ('%y', '^([0-9]{2})$', {1: '%y'}),
            ('%Y', '^([0-9]{4})$', {1: '%Y'}),
            ('%H', '^(0[0-9]|1[0-9]|2[0-3])$', {1: '%H'}),
            ('%-H', '^(1[0-9]|2[0-3]|[0-9])$', {1: '%-H'}),
            ('%M', '^([0-5][0-9])$', {1: '%M'}),
            ('%-M', '^([1-5][0-9]|[0-9])$', {1: '%-M'}),
            ('%S', '^([0-5][0-9])$', {1: '%S'}),
            ('%-S', '^([1-5][0-9]|[0-9])$', {1: '%-S'}),
            ('%f', '^([0-9]{6})$', {1: '%f'}),
            ('%%', None, {}),
            ('%y%y', '^([0-9]{2})([0-9]{2})$', {1: '%y', 2: '%y'}),
            ('some text *%%*x%Y-%m-%dT%H-%M-%SZ.jpg',
             '^some\\ text\\ .*%.*x'
             '([0-9]{4})\\-'
             '(0[1-9]|1[0-2])\\-'
             '(0[1-9]|1[0-9]|2[0-9]|3[0-1])'
             'T'
             '(0[0-9]|1[0-9]|2[0-3])\\-'
             '([0-5][0-9])\\-'
             '([0-5][0-9])Z\\.jpg$',
             {1: '%Y', 2: '%m', 3: '%d', 4: '%H', 5: '%M', 6: '%S'})
        ]
        # yapf: enable

        for pattern_segment, expected_regex, expected_group_map in table:
            patseg = datetime_glob.parse_pattern_segment(
                pattern_segment=pattern_segment)

            if expected_regex is None:
                self.assertIsNotNone(patseg.text)
            else:
                self.assertIsNotNone(patseg.regex, pattern_segment)
                assert patseg.regex is not None  # needed for mypy

                self.assertEqual(patseg.regex.pattern, expected_regex,
                                 pattern_segment)
                self.assertDictEqual(patseg.group_map, expected_group_map,
                                     pattern_segment)  # type: ignore
Ejemplo n.º 4
0
    def test_match_segment(self):
        # yapf: disable
        table = [
            ('some text *%%*x%Y-%m-%dT%H-%M-%S.%fZ.jpg', 'some text aa%bbx2016-12-02T03-04-05.123456Z.jpg',
             datetime_glob.Match(2016, 12, 2, 3, 4, 5, 123456)),
            ('decimal %Y-%-m-%-dT%-H-%-M-%-SZ.jpg', 'decimal 2016-1-2T3-4-5Z.jpg',
             datetime_glob.Match(2016, 1, 2, 3, 4, 5)),
            ('double year %y %Y', 'double year 18 2018', datetime_glob.Match(year=2018)),
            ('double year %y %Y', 'double year 17 2018', None),
            ('invalid day %Y-%m-%d', 'invalid day 2018-02-31', None)
        ]
        # yapf: enable

        for pattern_segment_str, segment, expected in table:
            patseg = datetime_glob.parse_pattern_segment(
                pattern_segment=pattern_segment_str)
            mtch = datetime_glob.match_segment(segment=segment,
                                               pattern_segment=patseg)

            self.assertTrue(
                match_equal(match=mtch, other=expected),
                "for input: {!r}, got: {}, expected: {}".format(
                    segment, mtch, expected))
Ejemplo n.º 5
0
 def test_parse_pattern_segment_invalid(self):
     with self.assertRaises(ValueError):
         _ = datetime_glob.parse_pattern_segment(
             pattern_segment='some text %1')
Ejemplo n.º 6
0
 def test_match_segment_for_arbitrary_patterns(self):
     patseg = datetime_glob.parse_pattern_segment(
         pattern_segment='%-d/%-m/%Y,%H:%M:%S*')
     match = datetime_glob.match_segment(
         segment='9/4/2013,00:00:00,7.8,7.4,9.53', pattern_segment=patseg)
     self.assertEqual(match.as_datetime(), datetime.datetime(2013, 4, 9))