Source code for envisage.import_manager
# (C) Copyright 2007-2024 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" The default import manager implementation. """
import importlib
# Enthought library imports.
from traits.api import HasTraits, provides
# Local imports.
from .i_import_manager import IImportManager
[docs]@provides(IImportManager)
class ImportManager(HasTraits):
"""The default import manager implementation.
Its just a guess, but I think using an import manager to do all imports
will make debugging easier (as opposed to just letting imports happen from
all over the place).
"""
###########################################################################
# 'IImportManager' interface.
###########################################################################
[docs] def import_symbol(self, symbol_path):
"""Import the symbol defined by the specified symbol path."""
if ":" in symbol_path:
module_name, symbol_name = symbol_path.split(":")
module = importlib.import_module(module_name)
symbol = eval(symbol_name, module.__dict__)
else:
components = symbol_path.split(".")
module_name = ".".join(components[:-1])
symbol_name = components[-1]
module = __import__(
module_name, globals(), locals(), [symbol_name]
)
symbol = getattr(module, symbol_name)
# Event notification.
self.symbol_imported = symbol
return symbol