70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# -----------------------------------------------------------------------------
|
|
# Copyright (c) 2009- Spyder Kernels Contributors
|
|
#
|
|
# Licensed under the terms of the MIT License
|
|
# (see spyder_kernels/__init__.py for details)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
"""
|
|
Lazy modules.
|
|
|
|
They are useful to not import big modules until it's really necessary.
|
|
"""
|
|
|
|
from spyder_kernels.utils.misc import is_module_installed
|
|
|
|
|
|
# =============================================================================
|
|
# Auxiliary classes
|
|
# =============================================================================
|
|
class FakeObject(object):
|
|
"""Fake class used in replacement of missing objects"""
|
|
pass
|
|
|
|
|
|
class LazyModule(object):
|
|
"""Lazy module loader class."""
|
|
|
|
def __init__(self, modname, second_level_attrs=None):
|
|
"""
|
|
Lazy module loader class.
|
|
|
|
Parameters
|
|
----------
|
|
modname: str
|
|
Module name to lazy load.
|
|
second_level_attrs: list (optional)
|
|
List of second level attributes to add to the FakeObject
|
|
that stands for the module in case it's not found.
|
|
"""
|
|
self.__spy_modname__ = modname
|
|
self.__spy_mod__ = FakeObject
|
|
|
|
# Set required second level attributes
|
|
if second_level_attrs is not None:
|
|
for attr in second_level_attrs:
|
|
setattr(self.__spy_mod__, attr, FakeObject)
|
|
|
|
def __getattr__(self, name):
|
|
if is_module_installed(self.__spy_modname__):
|
|
self.__spy_mod__ = __import__(self.__spy_modname__)
|
|
else:
|
|
return self.__spy_mod__
|
|
|
|
return getattr(self.__spy_mod__, name)
|
|
|
|
|
|
# =============================================================================
|
|
# Lazy modules
|
|
# =============================================================================
|
|
numpy = LazyModule('numpy', ['MaskedArray'])
|
|
|
|
pandas = LazyModule('pandas')
|
|
|
|
PIL = LazyModule('PIL.Image', ['Image'])
|
|
|
|
bs4 = LazyModule('bs4', ['NavigableString'])
|
|
|
|
scipy = LazyModule('scipy.io')
|