-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Split test_excel into submodule #26755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import pytest | ||
|
||
import pandas.util.testing as tm | ||
|
||
from pandas.io.parsers import read_csv | ||
|
||
|
||
@pytest.fixture | ||
def frame(float_frame): | ||
return float_frame[:10] | ||
|
||
|
||
@pytest.fixture | ||
def tsframe(): | ||
return tm.makeTimeDataFrame()[:5] | ||
|
||
|
||
@pytest.fixture(params=[True, False]) | ||
def merge_cells(request): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also only used in writers |
||
return request.param | ||
|
||
|
||
@pytest.fixture | ||
def df_ref(): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Similar comment as above but this would only be used in the reader tests |
||
""" | ||
Obtain the reference data from read_csv with the Python engine. | ||
""" | ||
df_ref = read_csv('test1.csv', index_col=0, | ||
parse_dates=True, engine='python') | ||
return df_ref | ||
|
||
|
||
@pytest.fixture(params=['.xls', '.xlsx', '.xlsm']) | ||
def read_ext(request): | ||
""" | ||
Valid extensions for reading Excel files. | ||
""" | ||
return request.param |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
import pytest | ||
|
||
import pandas.util._test_decorators as td | ||
|
||
from pandas import DataFrame | ||
from pandas.util.testing import ensure_clean | ||
|
||
from pandas.io.excel import ExcelWriter, _OpenpyxlWriter | ||
|
||
|
||
@td.skip_if_no('openpyxl') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. use a pytest.importorskip also I would not use classes unless you have separate discrete cases |
||
@pytest.mark.parametrize("ext", ['.xlsx']) | ||
class TestOpenpyxlTests: | ||
|
||
def test_to_excel_styleconverter(self, ext): | ||
from openpyxl import styles | ||
|
||
hstyle = { | ||
"font": { | ||
"color": '00FF0000', | ||
"bold": True, | ||
}, | ||
"borders": { | ||
"top": "thin", | ||
"right": "thin", | ||
"bottom": "thin", | ||
"left": "thin", | ||
}, | ||
"alignment": { | ||
"horizontal": "center", | ||
"vertical": "top", | ||
}, | ||
"fill": { | ||
"patternType": 'solid', | ||
'fgColor': { | ||
'rgb': '006666FF', | ||
'tint': 0.3, | ||
}, | ||
}, | ||
"number_format": { | ||
"format_code": "0.00" | ||
}, | ||
"protection": { | ||
"locked": True, | ||
"hidden": False, | ||
}, | ||
} | ||
|
||
font_color = styles.Color('00FF0000') | ||
font = styles.Font(bold=True, color=font_color) | ||
side = styles.Side(style=styles.borders.BORDER_THIN) | ||
border = styles.Border(top=side, right=side, bottom=side, left=side) | ||
alignment = styles.Alignment(horizontal='center', vertical='top') | ||
fill_color = styles.Color(rgb='006666FF', tint=0.3) | ||
fill = styles.PatternFill(patternType='solid', fgColor=fill_color) | ||
|
||
number_format = '0.00' | ||
|
||
protection = styles.Protection(locked=True, hidden=False) | ||
|
||
kw = _OpenpyxlWriter._convert_to_style_kwargs(hstyle) | ||
assert kw['font'] == font | ||
assert kw['border'] == border | ||
assert kw['alignment'] == alignment | ||
assert kw['fill'] == fill | ||
assert kw['number_format'] == number_format | ||
assert kw['protection'] == protection | ||
|
||
def test_write_cells_merge_styled(self, ext): | ||
from pandas.io.formats.excel import ExcelCell | ||
|
||
sheet_name = 'merge_styled' | ||
|
||
sty_b1 = {'font': {'color': '00FF0000'}} | ||
sty_a2 = {'font': {'color': '0000FF00'}} | ||
|
||
initial_cells = [ | ||
ExcelCell(col=1, row=0, val=42, style=sty_b1), | ||
ExcelCell(col=0, row=1, val=99, style=sty_a2), | ||
] | ||
|
||
sty_merged = {'font': {'color': '000000FF', 'bold': True}} | ||
sty_kwargs = _OpenpyxlWriter._convert_to_style_kwargs(sty_merged) | ||
openpyxl_sty_merged = sty_kwargs['font'] | ||
merge_cells = [ | ||
ExcelCell(col=0, row=0, val='pandas', | ||
mergestart=1, mergeend=1, style=sty_merged), | ||
] | ||
|
||
with ensure_clean(ext) as path: | ||
writer = _OpenpyxlWriter(path) | ||
writer.write_cells(initial_cells, sheet_name=sheet_name) | ||
writer.write_cells(merge_cells, sheet_name=sheet_name) | ||
|
||
wks = writer.sheets[sheet_name] | ||
xcell_b1 = wks['B1'] | ||
xcell_a2 = wks['A2'] | ||
assert xcell_b1.font == openpyxl_sty_merged | ||
assert xcell_a2.font == openpyxl_sty_merged | ||
|
||
@pytest.mark.parametrize("mode,expected", [ | ||
('w', ['baz']), ('a', ['foo', 'bar', 'baz'])]) | ||
def test_write_append_mode(self, ext, mode, expected): | ||
import openpyxl | ||
df = DataFrame([1], columns=['baz']) | ||
|
||
with ensure_clean(ext) as f: | ||
wb = openpyxl.Workbook() | ||
wb.worksheets[0].title = 'foo' | ||
wb.worksheets[0]['A1'].value = 'foo' | ||
wb.create_sheet('bar') | ||
wb.worksheets[1]['A1'].value = 'bar' | ||
wb.save(f) | ||
|
||
writer = ExcelWriter(f, engine='openpyxl', mode=mode) | ||
df.to_excel(writer, sheet_name='baz', index=False) | ||
writer.save() | ||
|
||
wb2 = openpyxl.load_workbook(f) | ||
result = [sheet.title for sheet in wb2.worksheets] | ||
assert result == expected | ||
|
||
for index, cell_value in enumerate(expected): | ||
assert wb2.worksheets[index]['A1'].value == cell_value |
Uh oh!
There was an error while loading. Please reload this page.