22 from .encoding
import system_decode
23 from .error
import get_error_details
24 from .platform
import JYTHON, IRONPYTHON, PY3
25 from .robotpath
import abspath, normpath
26 from .robottypes
import type_name, is_unicode
29 from importlib
import invalidate_caches
as invalidate_import_caches
31 invalidate_import_caches =
lambda:
None
33 from java.lang.System
import getProperty
71 except DataError
as err:
74 return (imported, source)
if return_source
else imported
78 if importer.handles(name):
79 return importer.import_(name)
96 except DataError
as err:
100 import_type =
'%s ' % self.
_type_type
if self.
_type_type
else ''
101 msg =
"Importing %s'%s' failed: %s" % (import_type, name, error.message)
102 if not error.details:
104 msg = [msg, error.details]
105 msg.extend(self.
_get_items_in_get_items_in(
'PYTHONPATH', sys.path))
107 classpath = getProperty(
'java.class.path').split(os.path.pathsep)
108 msg.extend(self.
_get_items_in_get_items_in(
'CLASSPATH', classpath))
121 if inspect.isclass(imported):
124 raise DataError(
"Modules do not take arguments.")
129 return imported(*args)
134 import_type =
'%s ' % self.
_type_type
if self.
_type_type
else ''
135 item_type =
'module' if inspect.ismodule(item)
else 'class'
136 location = (
"'%s'" % source)
if source
else 'unknown location'
137 self.
_logger_logger.
info(
"Imported %s%s '%s' from %s."
138 % (import_type, item_type, name, location))
146 def _import(self, name, fromlist=None, retry=True):
147 if name
in sys.builtin_module_names:
148 raise DataError(
'Cannot import custom module with same name as '
149 'Python built-in module.')
153 return __import__(name, fromlist=fromlist)
158 if JYTHON
and fromlist
and retry:
159 __import__(
'%s.%s' % (name, fromlist[0]))
160 return self.
_import_import(name, fromlist, retry=
False)
164 exec(
'raise sys.exc_type, sys.exc_value, sys.exc_traceback')
170 if inspect.isclass(imported)
or inspect.ismodule(imported):
172 raise DataError(
'Expected class or module, got %s.'
176 klass = getattr(module, name
or module.__name__,
None)
177 return klass
if inspect.isclass(klass)
else None
181 return abspath(inspect.getfile(imported))
190 _valid_import_extensions = (
'.py',
'.java',
'.class',
'')
193 return os.path.isabs(path)
203 if not os.path.exists(path):
204 raise DataError(
'File or directory does not exist.')
205 if not os.path.isabs(path):
206 raise DataError(
'Import path must be absolute.')
208 raise DataError(
'Not a valid file or directory to import.')
212 importing_package = os.path.splitext(path)[1] ==
''
214 del sys.modules[name]
215 self.
_logger_logger.
info(
"Removed module '%s' from sys.modules to import "
216 "fresh module." % name)
219 module_dir, module_file = os.path.split(
abspath(path))
220 module_name = os.path.splitext(module_file)[0]
221 if module_name.endswith(
'$py'):
222 module_name = module_name[:-3]
223 return module_dir, module_name
226 if name
not in sys.modules:
228 source = getattr(sys.modules[name],
'__file__',
None)
232 return (
normpath(importing_from, case_normalize=
True) !=
233 normpath(imported_from, case_normalize=
True)
or
234 importing_package != imported_package)
238 imported_package = imported_file ==
'__init__'
240 imported_from = os.path.dirname(imported_from)
241 return imported_from, imported_package
245 sys.path.insert(0, module_dir)
247 return self.
_import_import(module_name)
249 sys.path.remove(module_dir)
255 return '.' not in name
258 module = self.
_import_import(name)
269 parent_name, lib_name = name.rsplit(
'.', 1)
270 parent = self.
_import_import(parent_name, fromlist=[str(lib_name)])
272 imported = getattr(parent, lib_name)
273 except AttributeError:
274 raise DataError(
"Module '%s' does not contain '%s'."
275 % (parent_name, lib_name))
Used when variable does not exist.
def _wrong_module_imported(self, name, importing_from, importing_package)
def _verify_import_path(self, path)
def _import_by_path(self, path)
def _get_import_information(self, source)
tuple _valid_import_extensions
def _remove_wrong_module_from_sys_modules(self, path)
def _split_path_to_module(self, path)
def _import_class_or_module(self, name)
def import_class_or_module(self, name, instantiate_with_args=None, return_source=False)
Imports Python class/module or Java class with given name.
def _raise_import_failed(self, name, error)
def _instantiate_class(self, imported, args)
def _instantiate_if_needed(self, imported, args)
def _get_items_in(self, type, items)
def _log_import_succeeded(self, item, name, source)
def import_class_or_module_by_path(self, path, instantiate_with_args=None)
Import a Python module or Java class using a file system path.
def __init__(self, type=None, logger=None)
def _get_source(self, imported)
def _get_class_from_module(self, module, name=None)
def __init__(self, logger)
def _import(self, name, fromlist=None, retry=True)
def _verify_type(self, imported)
def info(msg, html=False, also_console=False)
Writes the message to the log file using the INFO level.
def system_decode(string)
Decodes bytes from system (e.g.
def get_error_details(exclude_robot_traces=EXCLUDE_ROBOT_TRACES)
Returns error message and details of the last occurred exception.
def abspath(path, case_normalize=False)
Replacement for os.path.abspath with some enhancements and bug fixes.
def normpath(path, case_normalize=False)
Replacement for os.path.normpath with some enhancements.