def test_parse_date_string_find_replace(date_string, expected_parse_arg, expected_captures, expected_date): dt = dtfinder.DateFinder() with mock.patch.object(parser, 'parse', wraps=parser.parse) as spy: actual_datetime = dt.parse_date_string(date_string, expected_captures) spy.assert_called_with(expected_parse_arg, default=None) logger.debug("actual={} expected={}".format(actual_datetime, expected_date)) assert actual_datetime == expected_date
def test_find_and_replace(date_string, expected_replaced_string, captures, expected_tz_string): dt = dtfinder.DateFinder() expected_replacements = copy.copy(REPLACEMENTS) actual_date_string, actual_tz_string = dt._find_and_replace( date_string, captures) # assert that dt._find_and_replace did not mutate dt.REPLACEMENTS assert REPLACEMENTS == expected_replacements # assert the return values of dt._find_and_replace assert actual_date_string == expected_replaced_string assert actual_tz_string == expected_tz_string
def test_extract_date_strings(date_string, expected_match_date_string): """ make sure that `strict` mode works for the dates we care about and doesn't work for others :param date_string: :param expected_match_date_string: :return: """ dt = dtfinder.DateFinder() for actual_date_string, indexes, captures in dt.extract_date_strings(date_string,strict=True): logger.debug("acutal={} expected={}".format(actual_date_string, expected_match_date_string)) assert actual_date_string == expected_match_date_string
def test_tz_gettz_for_all_patterns(): """ determine which pattern matching tz_strings dateutil.tz.gettz will not handle :warning: currently tz.gettz only matches 14 of regex timezones of our ~400 [ GOOD MATCHES ]: ['PST', 'EST', 'MST', 'CET', 'EET', 'EST', 'GMT', 'HST', 'MET', 'MST', 'PDT', 'PST', 'UTC', 'WET'] """ bad_tz_strings = [] good_tz_strings = [] finder = dtfinder.DateFinder() test_tz_strings = NA_TIMEZONES_PATTERN.split( '|') + TIMEZONES_PATTERN.split('|\s') for tz_string in test_tz_strings: if tz_string in TIMEZONE_REPLACEMENTS.keys(): tz_string = TIMEZONE_REPLACEMENTS[tz_string] tz_object = tz.gettz(tz_string.replace('\s', '')) if tz_object is None: bad_tz_strings.append(tz_string) else: good_tz_strings.append(tz_string) logger.debug("[ BAD TZINFO ]: {}".format(bad_tz_strings)) logger.debug("[ GOOD TZINFO ]: {}".format(good_tz_strings))
def test_add_tzinfo(naive_datetime_obj, timezone_string): expected_datetime = naive_datetime_obj.replace( tzinfo=tz.gettz(timezone_string)) finder = dtfinder.DateFinder() actual_datetime = finder._add_tzinfo(naive_datetime_obj, timezone_string) assert actual_datetime == expected_datetime
def test_extract_date_strings(date_string, expected_match_date_string): dt = dtfinder.DateFinder() for actual_date_string, indexes, captures in dt.extract_date_strings(date_string): logger.debug("acutal={} expected={}".format(actual_date_string, expected_match_date_string)) assert actual_date_string == expected_match_date_string assert len(captures.get('timezones',[])) > 0