@@ -31,24 +31,29 @@ def ignore_xlrd_time_clock_warning():
31
31
yield
32
32
33
33
34
+ @pytest .fixture (params = [
35
+ # Add any engines to test here
36
+ pytest .param ('xlrd' , marks = td .skip_if_no ('xlrd' )),
37
+ pytest .param ('openpyxl' , marks = td .skip_if_no ('openpyxl' )),
38
+ pytest .param (None , marks = td .skip_if_no ('xlrd' )),
39
+ ])
40
+ def engine (request ):
41
+ """
42
+ A fixture for Excel reader engines.
43
+ """
44
+ return request .param
45
+
46
+
34
47
class TestReaders :
35
48
36
- @pytest .fixture (autouse = True , params = [
37
- # Add any engines to test here
38
- pytest .param ('xlrd' , marks = pytest .mark .skipif (
39
- not td .safe_import ("xlrd" ), reason = "no xlrd" )),
40
- pytest .param ('openpyxl' , marks = pytest .mark .skipif (
41
- not td .safe_import ("openpyxl" ), reason = "no openpyxl" )),
42
- pytest .param (None , marks = pytest .mark .skipif (
43
- not td .safe_import ("xlrd" ), reason = "no xlrd" )),
44
- ])
45
- def cd_and_set_engine (self , request , datapath , monkeypatch , read_ext ):
49
+ @pytest .fixture (autouse = True )
50
+ def cd_and_set_engine (self , engine , datapath , monkeypatch , read_ext ):
46
51
"""
47
52
Change directory and set engine for read_excel calls.
48
53
"""
49
- if request . param == 'openpyxl' and read_ext == '.xls' :
54
+ if engine == 'openpyxl' and read_ext == '.xls' :
50
55
pytest .skip ()
51
- func = partial (pd .read_excel , engine = request . param )
56
+ func = partial (pd .read_excel , engine = engine )
52
57
monkeypatch .chdir (datapath ("io" , "data" ))
53
58
monkeypatch .setattr (pd , 'read_excel' , func )
54
59
@@ -726,23 +731,15 @@ def test_read_excel_squeeze(self, read_ext):
726
731
727
732
class TestExcelFileRead :
728
733
729
- @pytest .fixture (autouse = True , params = [
730
- # Add any engines to test here
731
- pytest .param ('xlrd' , marks = pytest .mark .skipif (
732
- not td .safe_import ("xlrd" ), reason = "no xlrd" )),
733
- pytest .param ('openpyxl' , marks = pytest .mark .skipif (
734
- not td .safe_import ("openpyxl" ), reason = "no openpyxl" )),
735
- pytest .param (None , marks = pytest .mark .skipif (
736
- not td .safe_import ("xlrd" ), reason = "no xlrd" )),
737
- ])
738
- def cd_and_set_engine (self , request , datapath , monkeypatch , read_ext ):
734
+ @pytest .fixture (autouse = True )
735
+ def cd_and_set_engine (self , engine , datapath , monkeypatch , read_ext ):
739
736
"""
740
737
Change directory and set engine for ExcelFile objects.
741
738
"""
742
- if request . param == 'openpyxl' and read_ext == '.xls' :
739
+ if engine == 'openpyxl' and read_ext == '.xls' :
743
740
pytest .skip ()
744
741
745
- func = partial (pd .ExcelFile , engine = request . param )
742
+ func = partial (pd .ExcelFile , engine = engine )
746
743
monkeypatch .chdir (datapath ("io" , "data" ))
747
744
monkeypatch .setattr (pd , 'ExcelFile' , func )
748
745
@@ -830,20 +827,18 @@ def test_sheet_name(self, read_ext, df_ref):
830
827
tm .assert_frame_equal (df1_parse , df_ref , check_names = False )
831
828
tm .assert_frame_equal (df2_parse , df_ref , check_names = False )
832
829
833
- def test_excel_read_buffer (self , read_ext ):
830
+ def test_excel_read_buffer (self , engine , read_ext ):
834
831
pth = 'test1' + read_ext
835
- engine = pd .ExcelFile .keywords ['engine' ] # TODO: fixturize
836
832
expected = pd .read_excel (pth , 'Sheet1' , index_col = 0 , engine = engine )
837
833
838
834
with open (pth , 'rb' ) as f :
839
835
with pd .ExcelFile (f ) as xls :
840
836
actual = pd .read_excel (xls , 'Sheet1' , index_col = 0 )
841
837
842
- tm .assert_frame_equal (expected , actual )
838
+ tm .assert_frame_equal (expected , actual )
843
839
844
- def test_reader_closes_file (self , read_ext ):
840
+ def test_reader_closes_file (self , engine , read_ext ):
845
841
f = open ('test1' + read_ext , 'rb' )
846
- engine = pd .ExcelFile .keywords ['engine' ] # TODO: fixturize
847
842
with pd .ExcelFile (f ) as xlsx :
848
843
# parses okay
849
844
pd .read_excel (xlsx , 'Sheet1' , index_col = 0 , engine = engine )
0 commit comments