22 from robot.utils import normpath, seq2str, seq2str2, is_string
24 from .builder
import ResourceFileBuilder
25 from .handlerstore
import HandlerStore
26 from .testlibraries
import TestLibrary
29 RESOURCE_EXTENSIONS = (
'.resource',
'.robot',
'.txt',
'.tsv',
'.rst',
'.rest')
43 lib.close_global_listeners()
46 lib =
TestLibrary(name, args, variables, create_handlers=
False)
47 positional, named = lib.positional_args, lib.named_args
50 alias = variables.replace_scalar(alias)
52 LOGGER.info(
"Imported library '%s' with name '%s'" % (name, alias))
58 LOGGER.info(
"Found resource file '%s' from cache" % path)
65 extension = os.path.splitext(path)[1]
66 if extension.lower()
not in RESOURCE_EXTENSIONS:
67 raise DataError(
"Invalid resource file extension '%s'. "
68 "Supported extensions are %s."
69 % (extension,
seq2str(RESOURCE_EXTENSIONS)))
72 args = positional + [
'%s=%s' % arg
for arg
in named]
73 key = (name, positional, named)
75 LOGGER.info(
"Found library '%s' with arguments %s from cache."
84 type = lib.__class__.__name__.replace(
'Library',
'').lower()[1:]
85 listener =
', with listener' if lib.has_listener
else ''
86 LOGGER.info(
"Imported library '%s' with arguments %s "
87 "(version %s, %s type, %s scope, %d keywords%s)"
88 % (name,
seq2str2(args), lib.version
or '<unknown>',
89 type, lib.scope, len(lib), listener))
91 LOGGER.warn(
"Imported library '%s' contains no keywords." % name)
99 lib.scope =
type(lib.scope)(lib)
102 for handler
in orig.handlers._normal.values():
103 handler = copy.copy(handler)
104 handler.library = lib
105 lib.handlers.add(handler)
106 for handler
in orig.handlers._embedded:
107 handler = copy.copy(handler)
108 handler.library = lib
109 lib.handlers.add(handler, embedded=
True)
125 if not is_string(key)
and not isinstance(key, tuple):
128 if key
not in self.
_keys_keys:
129 self.
_keys_keys.append(key)
130 self.
_items_items.append(item)
132 self.
_items_items[self.
_keys_keys.index(key)] = item
134 def add(self, key, item=None):
139 if key
not in self.
_keys_keys:
141 return self.
_items_items[self.
_keys_keys.index(key)]
151 return normpath(key, case_normalize=
True)
152 if isinstance(key, tuple):
157 return is_string(key)
and os.path.isabs(key)
and os.path.exists(key)
Can be used when the core framework goes to unexpected state.
Keeps track on and optionally caches imported items.
def add(self, key, item=None)
def __getitem__(self, key)
def _norm_path_key(self, key)
def __contains__(self, key)
def __setitem__(self, key, item)
def _copy_library(self, orig, name)
def _import_library(self, name, positional, named, lib)
def _log_imported_library(self, name, args, lib)
def close_global_library_listeners(self)
def _validate_resource_extension(self, path)
def import_resource(self, path, lang=None)
def import_library(self, name, args, alias, variables)
def TestLibrary(name, args=None, variables=None, create_handlers=True, logger=LOGGER)
def seq2str(sequence, quote="'", sep=', ', lastsep=' and ')
Returns sequence in format ‘'item 1’, 'item 2' and 'item 3'`.
def seq2str2(sequence)
Returns sequence in format [ item 1 | item 2 | ...
def normpath(path, case_normalize=False)
Replacement for os.path.normpath with some enhancements.