Skip to content

Commit

Permalink
[CLN] Excel Module Cleanups (#25275)
Browse files Browse the repository at this point in the history
Closes gh-25153

Authored-By: tdamsma <tdamsma@gmail.com>
  • Loading branch information
tdamsma authored and gfyoung committed Feb 20, 2019
1 parent 2909b83 commit f4568fd
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 25 deletions.
5 changes: 2 additions & 3 deletions pandas/io/excel/_base.py
Expand Up @@ -590,9 +590,8 @@ def __new__(cls, path, engine=None, **kwargs):
if engine == 'auto':
engine = _get_default_writer(ext)
except KeyError:
error = ValueError("No engine for filetype: '{ext}'"
.format(ext=ext))
raise error
raise ValueError("No engine for filetype: '{ext}'"
.format(ext=ext))
cls = get_writer(engine)

return object.__new__(cls)
Expand Down
39 changes: 22 additions & 17 deletions pandas/io/excel/_util.py
Expand Up @@ -5,32 +5,39 @@

from pandas.core.dtypes.common import is_integer, is_list_like

from pandas.core import config

_writer_extensions = ["xlsx", "xls", "xlsm"]


_writers = {}


def register_writer(klass):
"""Adds engine to the excel writer registry. You must use this method to
integrate with ``to_excel``. Also adds config options for any new
``supported_extensions`` defined on the writer."""
"""
Add engine to the excel writer registry.io.excel.
You must use this method to integrate with ``to_excel``.
Parameters
----------
klass : ExcelWriter
"""
if not callable(klass):
raise ValueError("Can only register callables as engines")
engine_name = klass.engine
_writers[engine_name] = klass
for ext in klass.supported_extensions:
if ext.startswith('.'):
ext = ext[1:]
if ext not in _writer_extensions:
config.register_option("io.excel.{ext}.writer".format(ext=ext),
engine_name, validator=str)
_writer_extensions.append(ext)


def _get_default_writer(ext):
"""
Return the default writer for the given extension.
Parameters
----------
ext : str
The excel file extension for which to get the default engine.
Returns
-------
str
The default engine for the extension.
"""
_default_writers = {'xlsx': 'openpyxl', 'xlsm': 'openpyxl', 'xls': 'xlwt'}
try:
import xlsxwriter # noqa
Expand Down Expand Up @@ -230,8 +237,6 @@ def _fill_mi_header(row, control_row):

return _maybe_convert_to_string(row), control_row

# fill blank if index_col not None


def _pop_header_name(row, index_col):
"""
Expand Down
7 changes: 2 additions & 5 deletions pandas/tests/io/test_excel.py
Expand Up @@ -2359,7 +2359,7 @@ def test_register_writer(self):
class DummyClass(ExcelWriter):
called_save = False
called_write_cells = False
supported_extensions = ['test', 'xlsx', 'xls']
supported_extensions = ['xlsx', 'xls']
engine = 'dummy'

def save(self):
Expand All @@ -2377,12 +2377,9 @@ def check_called(func):

with pd.option_context('io.excel.xlsx.writer', 'dummy'):
register_writer(DummyClass)
writer = ExcelWriter('something.test')
writer = ExcelWriter('something.xlsx')
assert isinstance(writer, DummyClass)
df = tm.makeCustomDataframe(1, 1)

func = lambda: df.to_excel('something.test')
check_called(func)
check_called(lambda: df.to_excel('something.xlsx'))
check_called(
lambda: df.to_excel(
Expand Down

0 comments on commit f4568fd

Please sign in to comment.