23
23
pytestmark = pytest .mark .parametrize ("ext" , [".xlsx" ])
24
24
25
25
26
+ def has_min_lxml_and_openpyxl ():
27
+ openpyxl = import_optional_dependency ("openpyxl" , errors = "ignore" )
28
+ lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
29
+ return (
30
+ openpyxl is not None
31
+ and openpyxl .__version__ == VERSIONS ["openpyxl" ]
32
+ and lxml is not None
33
+ and lxml .__version__ == VERSIONS ["lxml.etree" ]
34
+ )
35
+
36
+
37
+ def openpyxl_installed_and_xlsx_xlsm (path ):
38
+ return ("xlsm" in path or "xlsx" in path ) and has_min_lxml_and_openpyxl ()
39
+
40
+
26
41
def test_to_excel_styleconverter (ext ):
27
42
from openpyxl import styles
28
43
@@ -57,17 +72,11 @@ def test_to_excel_styleconverter(ext):
57
72
58
73
59
74
def test_write_cells_merge_styled (request , ext ):
60
- import openpyxl
61
-
62
75
from pandas .io .formats .excel import ExcelCell
63
76
64
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
65
77
request .node .add_marker (
66
78
pytest .mark .xfail (
67
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
68
- and ext == ".xlsx"
69
- and lxml is not None
70
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
79
+ openpyxl_installed_and_xlsx_xlsm (ext ),
71
80
reason = "Fails on the min version build" ,
72
81
raises = TypeError ,
73
82
)
@@ -106,15 +115,9 @@ def test_write_cells_merge_styled(request, ext):
106
115
@pytest .mark .parametrize ("iso_dates" , [True , False ])
107
116
def test_kwargs (request , ext , iso_dates ):
108
117
# GH 42286 GH 43445
109
- import openpyxl
110
-
111
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
112
118
request .node .add_marker (
113
119
pytest .mark .xfail (
114
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
115
- and ext == ".xlsx"
116
- and lxml is not None
117
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
120
+ openpyxl_installed_and_xlsx_xlsm (ext ),
118
121
reason = "Fails on the min version build" ,
119
122
raises = TypeError ,
120
123
)
@@ -132,15 +135,9 @@ def test_kwargs(request, ext, iso_dates):
132
135
@pytest .mark .parametrize ("iso_dates" , [True , False ])
133
136
def test_engine_kwargs_write (request , ext , iso_dates ):
134
137
# GH 42286 GH 43445
135
- import openpyxl
136
-
137
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
138
138
request .node .add_marker (
139
139
pytest .mark .xfail (
140
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
141
- and ext == ".xlsx"
142
- and lxml is not None
143
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
140
+ openpyxl_installed_and_xlsx_xlsm (ext ),
144
141
reason = "Fails on the min version build" ,
145
142
raises = TypeError ,
146
143
)
@@ -176,15 +173,9 @@ def test_engine_kwargs_append_data_only(request, ext, data_only, expected):
176
173
# GH 43445
177
174
# tests whether the data_only engine_kwarg actually works well for
178
175
# openpyxl's load_workbook
179
- import openpyxl
180
-
181
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
182
176
request .node .add_marker (
183
177
pytest .mark .xfail (
184
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
185
- and ext == ".xlsx"
186
- and lxml is not None
187
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
178
+ openpyxl_installed_and_xlsx_xlsm (ext ),
188
179
reason = "Fails on the min version build" ,
189
180
raises = TypeError ,
190
181
)
@@ -203,15 +194,9 @@ def test_engine_kwargs_append_data_only(request, ext, data_only, expected):
203
194
"mode,expected" , [("w" , ["baz" ]), ("a" , ["foo" , "bar" , "baz" ])]
204
195
)
205
196
def test_write_append_mode (request , ext , mode , expected ):
206
- import openpyxl
207
-
208
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
209
197
request .node .add_marker (
210
198
pytest .mark .xfail (
211
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
212
- and ext == ".xlsx"
213
- and lxml is not None
214
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
199
+ openpyxl_installed_and_xlsx_xlsm (ext ),
215
200
reason = "Fails on the min version build" ,
216
201
raises = TypeError ,
217
202
)
@@ -249,15 +234,9 @@ def test_if_sheet_exists_append_modes(
249
234
request , ext , if_sheet_exists , num_sheets , expected
250
235
):
251
236
# GH 40230
252
- import openpyxl
253
-
254
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
255
237
request .node .add_marker (
256
238
pytest .mark .xfail (
257
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
258
- and ext == ".xlsx"
259
- and lxml is not None
260
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
239
+ openpyxl_installed_and_xlsx_xlsm (ext ),
261
240
reason = "Fails on the min version build" ,
262
241
raises = TypeError ,
263
242
)
@@ -295,15 +274,9 @@ def test_if_sheet_exists_append_modes(
295
274
def test_append_overlay_startrow_startcol (
296
275
request , ext , startrow , startcol , greeting , goodbye
297
276
):
298
- import openpyxl
299
-
300
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
301
277
request .node .add_marker (
302
278
pytest .mark .xfail (
303
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
304
- and ext == ".xlsx"
305
- and lxml is not None
306
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
279
+ openpyxl_installed_and_xlsx_xlsm (ext ),
307
280
reason = "Fails on the min version build" ,
308
281
raises = TypeError ,
309
282
)
@@ -351,15 +324,9 @@ def test_append_overlay_startrow_startcol(
351
324
)
352
325
def test_if_sheet_exists_raises (request , ext , if_sheet_exists , msg ):
353
326
# GH 40230
354
- import openpyxl
355
-
356
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
357
327
request .node .add_marker (
358
328
pytest .mark .xfail (
359
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
360
- and ext == ".xlsx"
361
- and lxml is not None
362
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
329
+ openpyxl_installed_and_xlsx_xlsm (ext ),
363
330
reason = "Fails on the min version build" ,
364
331
raises = TypeError ,
365
332
)
@@ -376,15 +343,9 @@ def test_if_sheet_exists_raises(request, ext, if_sheet_exists, msg):
376
343
377
344
def test_to_excel_with_openpyxl_engine (request , ext ):
378
345
# GH 29854
379
- import openpyxl
380
-
381
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
382
346
request .node .add_marker (
383
347
pytest .mark .xfail (
384
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
385
- and ext == ".xlsx"
386
- and lxml is not None
387
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
348
+ openpyxl_installed_and_xlsx_xlsm (ext ),
388
349
reason = "Fails on the min version build" ,
389
350
raises = TypeError ,
390
351
)
@@ -448,15 +409,9 @@ def test_read_with_bad_dimension(
448
409
449
410
def test_append_mode_file (request , ext ):
450
411
# GH 39576
451
- import openpyxl
452
-
453
- lxml = import_optional_dependency ("lxml.etree" , errors = "ignore" )
454
412
request .node .add_marker (
455
413
pytest .mark .xfail (
456
- openpyxl .__version__ == VERSIONS ["openpyxl" ]
457
- and ext == ".xlsx"
458
- and lxml is not None
459
- and lxml .__version__ == VERSIONS ["lxml.etree" ],
414
+ openpyxl_installed_and_xlsx_xlsm (ext ),
460
415
reason = "Fails on the min version build" ,
461
416
raises = TypeError ,
462
417
)
0 commit comments