Robot Framework
keyword.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import warnings
17 
18 from robot.utils import setter
19 
20 from .body import Body, BodyItem
21 from .fixture import create_fixture
22 from .itemlist import ItemList
23 from .tags import Tags
24 
25 
26 @Body.register
27 
33  repr_args = ('name', 'args', 'assign')
34  __slots__ = ['_name', 'doc', 'args', 'assign', 'timeout', 'type', '_teardown']
35 
36  def __init__(self, name='', doc='', args=(), assign=(), tags=(),
37  timeout=None, type=BodyItem.KEYWORD, parent=None):
38  self._name_name = name
39  self.docdoc = doc
40  self.argsargs = args
41  self.assignassign = assign
42  self.tagstagstags = tags
43  self.timeouttimeout = timeout
44  self.typetypetype = type
45  self._teardown_teardown = None
46  self.parentparent = parent
47 
48  @property
49  name = property
50 
51  def name(self):
52  return self._name_name
53 
54  @name.setter
55 
56  def name(self, name):
57  self._name_name = name
58 
59  @property # Cannot use @setter because it would create teardowns recursively.
60 
87  teardown = property
88 
89  def teardown(self):
90  if self._teardown_teardown is None and self:
91  self._teardown_teardown = create_fixture(None, self, self.TEARDOWNTEARDOWN)
92  return self._teardown_teardown
93 
94  @teardown.setter
95 
96  def teardown(self, teardown):
97  self._teardown_teardown = create_fixture(teardown, self, self.TEARDOWNTEARDOWN)
98 
99  @property
100 
110  has_teardown = property
111 
112  def has_teardown(self):
113  return bool(self._teardown_teardown)
114 
115  @setter
116 
117  def tags(self, tags):
118  return Tags(tags)
119 
120 
121  def visit(self, visitor):
122  if self:
123  visitor.visit_keyword(self)
124 
125  def __bool__(self):
126  return self.namenamenamename is not None
127 
128  def __str__(self):
129  parts = list(self.assignassign) + [self.namenamenamename] + list(self.argsargs)
130  return ' '.join(str(p) for p in parts)
131 
132 
133 
138  __slots__ = []
139  deprecation_message = (
140  "'keywords' attribute is read-only and deprecated since Robot Framework 4.0. "
141  "Use 'body', 'setup' or 'teardown' instead."
142  )
143 
144  def __init__(self, parent=None, keywords=None):
145  warnings.warn(self.deprecation_messagedeprecation_message, UserWarning)
146  ItemList.__init__(self, object, {'parent': parent})
147  if keywords:
148  ItemList.extend(self, keywords)
149 
150  @property
151  setup = property
152 
153  def setup(self):
154  return self[0] if (self and self[0].type == 'SETUP') else None
155 
156  @setup.setter
157 
158  def setup(self, kw):
159  self.raise_deprecation_errorraise_deprecation_error()
160 
161  def create_setup(self, *args, **kwargs):
162  self.raise_deprecation_errorraise_deprecation_error()
163 
164  @property
165  teardown = property
166 
167  def teardown(self):
168  return self[-1] if (self and self[-1].type == 'TEARDOWN') else None
169 
170  @teardown.setter
171 
172  def teardown(self, kw):
173  self.raise_deprecation_errorraise_deprecation_error()
174 
175  def create_teardown(self, *args, **kwargs):
176  self.raise_deprecation_errorraise_deprecation_error()
177 
178  @property
179 
180  all = property
181 
182  def all(self):
183  return self
184 
185  @property
186 
187  normal = property
188 
189  def normal(self):
190  return [kw for kw in self if kw.type not in ('SETUP', 'TEARDOWN')]
191 
192  def __setitem__(self, index, item):
193  self.raise_deprecation_errorraise_deprecation_error()
194 
195  def create(self, *args, **kwargs):
196  self.raise_deprecation_errorraise_deprecation_error()
197 
198  def append(self, item):
199  self.raise_deprecation_errorraise_deprecation_error()
200 
201  def extend(self, items):
202  self.raise_deprecation_errorraise_deprecation_error()
203 
204  def insert(self, index, item):
205  self.raise_deprecation_errorraise_deprecation_error()
206 
207  def pop(self, *index):
208  self.raise_deprecation_errorraise_deprecation_error()
209 
210  def remove(self, item):
211  self.raise_deprecation_errorraise_deprecation_error()
212 
213  def clear(self):
214  self.raise_deprecation_errorraise_deprecation_error()
215 
216  def __delitem__(self, index):
217  self.raise_deprecation_errorraise_deprecation_error()
218 
219  def sort(self):
220  self.raise_deprecation_errorraise_deprecation_error()
221 
222  def reverse(self):
223  self.raise_deprecation_errorraise_deprecation_error()
224 
225  @classmethod
227  raise AttributeError(cls.deprecation_messagedeprecation_message)
Base model for a single keyword.
Definition: keyword.py:32
def __init__(self, name='', doc='', args=(), assign=(), tags=(), timeout=None, type=BodyItem.KEYWORD, parent=None)
Definition: keyword.py:37
def tags(self, tags)
Keyword tags as a :class:~.model.tags.Tags object.
Definition: keyword.py:117
has_teardown
Check does a keyword have a teardown without creating a teardown object.
Definition: keyword.py:110
def visit(self, visitor)
:mod:Visitor interface <robot.model.visitor> entry-point.
Definition: keyword.py:121
teardown
Keyword teardown as a :class:Keyword object.
Definition: keyword.py:87
def name(self, name)
Definition: keyword.py:56
A list-like object representing keywords in a suite, a test or a keyword.
Definition: keyword.py:137
def __init__(self, parent=None, keywords=None)
Definition: keyword.py:144
def __delitem__(self, index)
Definition: keyword.py:216
def create_setup(self, *args, **kwargs)
Definition: keyword.py:161
def remove(self, item)
Definition: keyword.py:210
def append(self, item)
Definition: keyword.py:198
def insert(self, index, item)
Definition: keyword.py:204
def __setitem__(self, index, item)
Definition: keyword.py:192
def create_teardown(self, *args, **kwargs)
Definition: keyword.py:175
def create(self, *args, **kwargs)
Definition: keyword.py:195
def extend(self, items)
Definition: keyword.py:201
normal
Iterates over normal keywords, omitting setup and teardown.
Definition: keyword.py:187
def raise_deprecation_error(cls)
Definition: keyword.py:226
all
Iterates over all keywords, including setup and teardown.
Definition: keyword.py:180
def pop(self, *index)
Definition: keyword.py:207
def create_fixture(fixture, parent, type)
Definition: fixture.py:16