21 from robot.utils import abspath, get_error_message, safe_str
26 def __init__(self, source=None, init_file=None, children=None):
35 source = init_file
or source
36 return os.path.splitext(source)[1][1:].lower()
39 is_directory = property
42 return self.
childrenchildren
is not None
46 visitor.visit_file(self)
48 visitor.visit_directory(self)
52 ignored_prefixes = (
'_',
'.')
53 ignored_dirs = (
'CVS',)
55 def __init__(self, included_extensions=(
'robot',), included_suites=
None):
68 raise DataError(
'One or more source paths required.')
70 path = os.path.normpath(path)
71 if not os.path.exists(path):
72 raise DataError(
"Parsing '%s' failed: File or directory to "
73 "execute does not exist." % path)
76 def _build(self, path, include_suites):
77 if os.path.isfile(path):
80 init_file, paths = self.
_get_child_paths_get_child_paths(path, include_suites)
81 children = [self.
_build_build(p, include_suites)
for p
in paths]
87 if not isinstance(incl_suites, SuiteNamePatterns):
96 for suite
in incl_suites:
99 suite = suite.split(
'.', 1)[1]
105 for path, is_init_file
in self.
_list_dir_list_dir(dirpath, incl_suites):
110 LOGGER.error(
"Ignoring second test suite init file '%s'."
114 return init_file, paths
118 names = os.listdir(dir_path)
120 raise DataError(
"Reading directory '%s' failed: %s"
122 for name
in sorted(names, key=
lambda item: item.lower()):
124 path = os.path.join(dir_path, name)
125 base, ext = os.path.splitext(name)
126 ext = ext[1:].lower()
129 elif self.
_is_included_is_included(path, base, ext, incl_suites):
132 LOGGER.info(
"Ignoring file or directory '%s'." % path)
135 return (base.lower() ==
'__init__'
137 and os.path.isfile(path))
142 if os.path.isdir(path):
151 return incl_suites.match(self.
_split_prefix_split_prefix(name))
154 result = name.split(
'__', 1)[-1]
166 self.start_directory(structure)
167 for child
in structure.children:
169 self.end_directory(structure)
def _is_included(self, path, base, ext, incl_suites)
def _normalize_paths(self, paths)
def _list_dir(self, dir_path, incl_suites)
def _build(self, path, include_suites)
def _is_in_included_suites(self, name, incl_suites)
def _is_init_file(self, path, base, ext)
def _split_prefix(self, name)
def _get_child_paths(self, dirpath, incl_suites=None)
def _create_included_suites(self, incl_suites)
def __init__(self, included_extensions=('robot',), included_suites=None)
def _get_include_suites(self, path, incl_suites)
def visit_directory(self, structure)
def end_directory(self, structure)
def visit_file(self, structure)
def start_directory(self, structure)
def __init__(self, source=None, init_file=None, children=None)
def _get_extension(self, source, init_file)
def get_error_message()
Returns error message of the last occurred exception.
def abspath(path, case_normalize=False)
Replacement for os.path.abspath with some enhancements and bug fixes.