Example #1
0
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
Example #4
0
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))
Example #5
0
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