示例#1
0
 def test_header_present_regexes_present(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers, header_present=True))
     assert row['name'] == 'Charles the Great'
     assert row['email'] == '*****@*****.**'
示例#2
0
 def test_header_present_guessed(self):
     infile = StringIO(_raw_txt_1)
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers))
     assert row['name'] == 'Nellie Newsock'
     assert row['email'] == '*****@*****.**'
示例#3
0
 def test_header_absent_regexes_present(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers, header_present=False))
     assert row['name'] == 'Nellie Newsock'
     assert row['email'] == '*****@*****.**'
示例#4
0
 def test_list_of_lists_whitespace_before_headers(self):
     src = "\n\n\n\n" + _raw_txt_1
     data = _data(src=src, reader=csv.reader, with_headers=True)
     for row in reheadered(data, ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#5
0
 def test_header_present_guessed(self):
     infile = StringIO(_raw_txt_1)
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers))
     assert row['name'] == 'Nellie Newsock'
     assert row['email'] == '*****@*****.**'
示例#6
0
 def test_header_present_regexes_present(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers, header_present=True))
     assert row['name'] == 'Charles the Great'
     assert row['email'] == '*****@*****.**'
示例#7
0
 def test_list_of_lists_whitespace_before_headers(self):
     src = "\n\n\n\n" + _raw_txt_1
     data = _data(src=src, reader=csv.reader, with_headers=True)
     for row in reheadered(data, ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#8
0
 def test_header_absent_regexes_present(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     row = _next(reheadered(data, headers, header_present=False))
     assert row['name'] == 'Nellie Newsock'
     assert row['email'] == '*****@*****.**'
示例#9
0
 def test_whitespace_safe_in_data(self):
     for row in reheadered(
             _data(_raw_txt_2), ['zipcode', 'Name', 'e-mail'],
             minimum_score=100):
         assert 'zipcode' in row
         assert 'Name' in row
         assert 'e-mail' in row
示例#10
0
 def test_regexes_preferred_to_fuzzy_match(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'columnB': '\d+'}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'columnB' in row
         if row['columnB']:
             assert re.search('\d+', row['columnB'])
示例#11
0
 def test_regexes_preferred_to_fuzzy_match(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'columnB': '\d+'}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'columnB' in row
         if row['columnB']:
             assert re.search('\d+', row['columnB'])
示例#12
0
 def test_mix_regexes_with_column_name_matches(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'zip': None}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'zip' in row
         if row['zip']:
             assert re.search('\d+', row['zip'])
示例#13
0
 def test_optional_in_regex(self):
     headers = {'zip': '\w+@\w+\.\w+', '?:email': '\d+'}
     for row in reheadered(_data(), headers):
         assert 'zip' in row
         assert '@' in row['zip']
         assert 'email' in row
         if row['email']:
             assert re.search('\d+', row['email'])
示例#14
0
 def test_mix_regexes_with_column_name_matches(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'zip': None}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'zip' in row
         if row['zip']:
             assert re.search('\d+', row['zip'])
示例#15
0
 def test_prefer_fuzzy(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'name': '\d+'}
     for row in reheadered(_data(), headers, prefer_fuzzy=True):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'name' in row
         if row['name']:
             assert not re.search('\d+', row['name'])
示例#16
0
 def test_optional_in_regex(self):
     headers = {'zip': '\w+@\w+\.\w+', '?:email': '\d+'}
     for row in reheadered(_data(), headers):
         assert 'zip' in row
         assert '@' in row['zip']
         assert 'email' in row
         if row['email']:
             assert re.search('\d+', row['email'])
示例#17
0
 def test_prefer_fuzzy(self):
     headers = {'columnA': '\w+@\w+\.\w+', 'name': '\d+'}
     for row in reheadered(_data(), headers, prefer_fuzzy=True):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'name' in row
         if row['name']:
             assert not re.search('\d+', row['name'])
示例#18
0
 def test_compiled_regexes(self):
     columnAregex = re.compile(r"""\w+   #  name
                                   @\w+  # email provider
                                   \.\w+ # domain""", re.VERBOSE)
     headers = {'columnA': columnAregex, 'columnB': re.compile(r'\d+')}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'columnB' in row
         if row['columnB']:
             assert re.search(r'\d+', row['columnB'])
示例#19
0
    def test_fuzzy_column_name_match(self):
        headers = ['Name', 'mail', 'zipcode']
        for row in reheadered(_data(), headers):
            assert 'Name' in row
            assert 'name' not in row

            assert 'mail' in row
            assert row['mail']
            assert 'email' not in row

            assert 'zipcode' in row
            assert 'zip' not in row
示例#20
0
    def test_fuzzy_column_name_match(self):
        headers = ['Name', 'mail', 'zipcode']
        for row in reheadered(_data(), headers):
            assert 'Name' in row
            assert 'name' not in row

            assert 'mail' in row
            assert row['mail']
            assert 'email' not in row

            assert 'zipcode' in row
            assert 'zip' not in row
示例#21
0
 def test_compiled_regexes(self):
     columnAregex = re.compile(
         r"""\w+   #  name
                                   @\w+  # email provider
                                   \.\w+ # domain""", re.VERBOSE)
     headers = {'columnA': columnAregex, 'columnB': re.compile(r'\d+')}
     for row in reheadered(_data(), headers):
         assert 'columnA' in row
         assert '@' in row['columnA']
         assert 'columnB' in row
         if row['columnB']:
             assert re.search(r'\d+', row['columnB'])
示例#22
0
    def test_fuzzy_column_name_match_list_of_lists(self):
        data = _data(reader=csv.reader, with_headers=True)
        headers = ['Name', 'mail', 'zipcode']
        for row in reheadered(data, headers):
            assert 'Name' in row
            assert 'name' not in row

            assert 'mail' in row
            assert row['mail']
            assert 'email' not in row

            assert 'zipcode' in row
            assert 'zip' not in row
示例#23
0
    def test_fuzzy_column_name_match_list_of_lists(self):
        data = _data(reader=csv.reader, with_headers=True)
        headers = ['Name', 'mail', 'zipcode']
        for row in reheadered(data, headers):
            assert 'Name' in row
            assert 'name' not in row

            assert 'mail' in row
            assert row['mail']
            assert 'email' not in row

            assert 'zipcode' in row
            assert 'zip' not in row
示例#24
0
 def test_list_of_lists_no_data(self):
     infile = StringIO(_raw_txt_1.splitlines()[0])
     data = csv.reader(infile)
     with pytest.raises(StopIteration):
         _next(reheadered(data, ['name', 'email', 'zip']))
示例#25
0
 def test_perfect_column_name_match(self):
     for row in reheadered(_data(), ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#26
0
 def test_optional_column_marker_tolerated(self):
     headers = ['Name', '?:mail', 'zip']
     for row in reheadered(_data(), headers):
         assert 'mail' in row
         assert '?:mail' not in row
示例#27
0
 def test_custom_optional_marker(self):
     headers = ['Name', 'mail', 'zip', 'OPTIONAL~nationality']
     for row in reheadered(_data(), headers, optional_prefix='OPTIONAL~'):
         assert 'mail' in row
         assert 'nationality' not in row
示例#28
0
 def test_dict_of_headers_accepted(self):
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     data = _data()
     _next(reheadered(data, headers))
示例#29
0
 def test_low_minimum_score(self):
     headers = ['Name', 'mail', 'zip_code']
     for row in reheadered(_data(), headers, minimum_score=50):
         assert 'zip_code' in row
示例#30
0
 def test_perfect_column_name_match(self):
     for row in reheadered(_data(), ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#31
0
 def test_list_of_lists_accepted(self):
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     data = _data(reader=csv.reader, with_headers=True)
     _next(reheadered(data, headers))
示例#32
0
 def test_whitespace_safe_in_expected(self):
     for row in reheadered(_data(), ['       name', 'email', ' zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#33
0
 def test_keep_extra_with_fuzzy_match(self):
     for row in reheadered(_data(), ['Name', 'e-mail'], keep_extra=True):
         assert 'Name' in row
         assert 'e-mail' in row
         assert 'zip' in row
示例#34
0
 def test_low_minimum_score(self):
     headers = ['Name', 'mail', 'zip_code']
     for row in reheadered(_data(), headers, minimum_score=50):
         assert 'zip_code' in row
示例#35
0
 def test_list_of_lists_no_data(self):
     infile = StringIO(_raw_txt_1.splitlines()[0])
     data = csv.reader(infile)
     with pytest.raises(StopIteration):
         _next(reheadered(data, ['name', 'email', 'zip']))
示例#36
0
 def test_perfect_column_name_match_list_of_lists(self):
     data = _data(reader=csv.reader, with_headers=True)
     for row in reheadered(data, ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#37
0
 def test_whitespace_safe_in_expected(self):
     for row in reheadered(_data(), ['       name', 'email', ' zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#38
0
 def test_keep_extra(self):
     for row in reheadered(_data(), ['name', 'email'], keep_extra=True):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#39
0
 def test_high_minimum_score(self):
     headers = ['Name', 'mail', 'zip']
     with pytest.raises(KeyError):
         _next(reheadered(_data(), headers, minimum_score=90))
示例#40
0
 def test_reheadered_accepts_basic_args(self):
     reheadered([{}, ], [])
示例#41
0
 def test_keep_extra_false(self):
     for row in reheadered(_data(), ['name', 'email'], keep_extra=False):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' not in row
         assert '' not in row
示例#42
0
 def test_fuzzy_column_name_match_failure(self):
     headers = ['Name', 'mail', 'thy one true zip code']
     with pytest.raises(KeyError):
         _next(reheadered(_data(), headers))
示例#43
0
 def test_keep_extra_with_fuzzy_match(self):
     for row in reheadered(_data(), ['Name', 'e-mail'], keep_extra=True):
         assert 'Name' in row
         assert 'e-mail' in row
         assert 'zip' in row
示例#44
0
 def test_optional_column_marker_tolerated(self):
     headers = ['Name', '?:mail', 'zip']
     for row in reheadered(_data(), headers):
         assert 'mail' in row
         assert '?:mail' not in row
示例#45
0
 def test_high_minimum_score(self):
     headers = ['Name', 'mail', 'zip']
     with pytest.raises(KeyError):
         _next(reheadered(_data(), headers, minimum_score=90))
示例#46
0
 def test_optional_column_marker_honored(self):
     headers = ['Name', 'mail', 'zip', '?:nationality']
     for row in reheadered(_data(), headers):
         assert 'mail' in row
         assert 'nationality' not in row
示例#47
0
 def test_header_absent_and_no_regexes(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = ['name', 'email', 'zip']
     with pytest.raises(KeyError):
         _next(reheadered(data, headers, header_present=False))
示例#48
0
 def test_custom_optional_marker(self):
     headers = ['Name', 'mail', 'zip', 'OPTIONAL~nationality']
     for row in reheadered(_data(), headers, optional_prefix='OPTIONAL~'):
         assert 'mail' in row
         assert 'nationality' not in row
示例#49
0
 def test_optional_column_marker_honored(self):
     headers = ['Name', 'mail', 'zip', '?:nationality']
     for row in reheadered(_data(), headers):
         assert 'mail' in row
         assert 'nationality' not in row
示例#50
0
 def test_dict_of_headers_accepted(self):
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     data = _data()
     _next(reheadered(data, headers))
示例#51
0
 def test_reheadered_accepts_basic_args(self):
     reheadered([
         {},
     ], [])
示例#52
0
 def test_list_of_lists_accepted(self):
     headers = {'name': r'(\w+\s+)+', 'email': '\w+@\w+\.\w+'}
     data = _data(reader=csv.reader, with_headers=True)
     _next(reheadered(data, headers))
示例#53
0
 def test_perfect_column_name_match_list_of_lists(self):
     data = _data(reader=csv.reader, with_headers=True)
     for row in reheadered(data, ['name', 'email', 'zip']):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#54
0
 def test_keep_extra(self):
     for row in reheadered(_data(), ['name', 'email'], keep_extra=True):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' in row
示例#55
0
 def test_fuzzy_column_name_match_failure(self):
     headers = ['Name', 'mail', 'thy one true zip code']
     with pytest.raises(KeyError):
         _next(reheadered(_data(), headers))
示例#56
0
 def test_keep_extra_false(self):
     for row in reheadered(_data(), ['name', 'email'], keep_extra=False):
         assert 'name' in row
         assert 'email' in row
         assert 'zip' not in row
         assert '' not in row
示例#57
0
 def test_whitespace_safe_in_data(self):
     for row in reheadered(_data(_raw_txt_2), ['zipcode', 'Name', 'e-mail'],
                           minimum_score=100):
         assert 'zipcode' in row
         assert 'Name' in row
         assert 'e-mail' in row
示例#58
0
 def test_header_absent_and_no_regexes(self):
     infile = StringIO('\n'.join(_raw_txt_1.splitlines()[1:]))
     data = csv.reader(infile)
     headers = ['name', 'email', 'zip']
     with pytest.raises(KeyError):
         _next(reheadered(data, headers, header_present=False))