18 from .itemlist
import ItemList
19 from .modelobject
import ModelObject, full_name
27 ITERATION =
'ITERATION'
28 IF_ELSE_ROOT =
'IF/ELSE ROOT'
32 TRY_EXCEPT_ROOT =
'TRY/EXCEPT ROOT'
42 __slots__ = [
'parent']
59 return self.
_get_id_get_id(self.parent)
64 steps.append(parent.setup)
65 if hasattr(parent,
'body'):
66 steps.extend(step
for step
in parent.body.flatten()
67 if step.type != self.
MESSAGEMESSAGE)
68 if parent.has_teardown:
69 steps.append(parent.teardown)
70 return '%s-k%d' % (parent.id, steps.index(self) + 1)
79 has_teardown = property
100 super().
__init__(BodyItem, {
'parent': parent}, items)
104 name_parts = re.findall(
'([A-Z][a-z]+)', item_class.__name__) + [
'class']
105 name =
'_'.join(name_parts).lower()
106 if not hasattr(cls, name):
107 raise TypeError(
"Cannot register '%s'." % name)
108 setattr(cls, name, item_class)
116 f
"'{full_name(self)}' object has no attribute 'create'. "
117 f
"Use item specific methods like 'create_keyword' instead."
125 raise TypeError(f
"'{full_name(self)}' object does not support '{name}'.")
126 return self.
appendappend(cls(*args, **kwargs))
129 return self.
_create_create(self.
for_classfor_class,
'create_for', args, kwargs)
132 return self.
_create_create(self.
if_classif_class,
'create_if', args, kwargs)
135 return self.
_create_create(self.
try_classtry_class,
'create_try', args, kwargs)
175 def filter(self, keywords=None, messages=None, predicate=None):
176 if messages
is not None and not self.
message_classmessage_class:
177 raise TypeError(f
"'{full_name(self)}' object does not support "
178 f
"filtering by 'messages'.")
183 include = tuple(cls
for cls, activated
in types
if activated
is True and cls)
184 exclude = tuple(cls
for cls, activated
in types
if activated
is False and cls)
185 if include
and exclude:
186 raise ValueError(
'Items cannot be both included and excluded by type.')
189 items = [item
for item
in items
if isinstance(item, include)]
191 items = [item
for item
in items
if not isinstance(item, exclude)]
193 items = [item
for item
in items
if predicate(item)]
202 roots = BodyItem.IF_ELSE_ROOT, BodyItem.TRY_EXCEPT_ROOT
205 if item.type
in roots:
206 steps.extend(item.body)
221 class Branches(BaseBody):
222 __slots__ = [
'branch_class']
224 def __init__(self, branch_class, parent=None, items=None):
Base class for Body and Branches objects.
def create_keyword(self, *args, **kwargs)
def _filter(self, types, predicate)
def create_continue(self, *args, **kwargs)
def _create(self, cls, name, args, kwargs)
def flatten(self)
Return steps so that IF and TRY structures are flattened.
def __init__(self, parent=None, items=None)
def create_if(self, *args, **kwargs)
def create_message(self, *args, **kwargs)
def create_return(self, *args, **kwargs)
def create_break(self, *args, **kwargs)
def create_try(self, *args, **kwargs)
def create_while(self, *args, **kwargs)
def register(cls, item_class)
def create_for(self, *args, **kwargs)
def filter(self, keywords=None, messages=None, predicate=None)
Filter body items based on type and/or custom predicate.
def _get_id(self, parent)
id
Item id in format like s1-t3-k1.
A list-like object representing body of a suite, a test or a keyword.
def __init__(self, branch_class, parent=None, items=None)
def create_branch(self, *args, **kwargs)