Files
nand2tetris/asm/venv/lib/python3.11/site-packages/spyder_kernels/utils/lazymodules.py
Sven Riwoldt c7bc862c6f asm
2024-04-01 20:30:24 +02:00

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')