Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ pyexcel*-info
build
dist
tmp.db
.idea/*
42 changes: 32 additions & 10 deletions pyexcel_io/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,43 @@

exports = fileformat.exports + database.exports

from pkgutil import iter_modules
import pkgutil

black_list = [__name__, 'pyexcel_webio', 'pyexcel_text']

for _, module_name, ispkg in iter_modules():
# load modules to work based with and without pyinstaller
# from: https://github.com/webcomics/dosage/blob/master/dosagelib/loader.py
# see: https://github.com/pyinstaller/pyinstaller/issues/1905
# load modules using iter_modules()
# (should find all plug ins in normal build, but not pyinstaller)

prefix = 'pyexcel_'

module_names = [m[1] for m in pkgutil.iter_modules()
if m[2] and m[1].startswith(prefix)]

# special handling for PyInstaller
toc = set()
for t in (i.toc for i in map(pkgutil.get_importer, __path__)
if hasattr(i, 'toc')):
toc |= t

for elm in toc:
if elm.startswith(prefix) and '.' not in elm:
module_names.append(elm)

# loop through modules and find our plug ins
for module_name in module_names:

if module_name in black_list:
continue

if ispkg and module_name.startswith('pyexcel_'):
try:
plugin = __import__(module_name)
if hasattr(plugin, '__pyexcel_io_plugins__'):
for p in plugin.__pyexcel_io_plugins__:
pre_register(p, module_name)
except ImportError:
continue
try:
plugin = __import__(module_name)
if hasattr(plugin, '__pyexcel_io_plugins__'):
for p in plugin.__pyexcel_io_plugins__:
pre_register(p, module_name)
except ImportError:
continue

register_readers_and_writers(exports)