Robot Framework
userkeyword.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 os
17 
18 from robot.errors import DataError
19 from robot.output import LOGGER
20 from robot.utils import getshortdoc
21 
22 from .arguments import EmbeddedArguments, UserKeywordArgumentParser
23 from .handlerstore import HandlerStore
24 from .userkeywordrunner import UserKeywordRunner, EmbeddedArgumentsRunner
25 from .usererrorhandler import UserErrorHandler
26 
27 
29 
30  def __init__(self, resource, resource_file=True):
31  source = resource.source
32  basename = os.path.basename(source) if source else None
33  self.namename = os.path.splitext(basename)[0] if resource_file else None
34  self.docdoc = resource.doc
35  self.handlershandlers = HandlerStore()
36  self.sourcesource = source
37  for kw in resource.keywords:
38  try:
39  handler = self._create_handler_create_handler(kw)
40  except DataError as error:
41  handler = UserErrorHandler(error, kw.name, self.namename, source, kw.lineno)
42  self._log_creating_failed_log_creating_failed(handler, error)
43  embedded = isinstance(handler, EmbeddedArgumentsHandler)
44  try:
45  self.handlershandlers.add(handler, embedded)
46  except DataError as error:
47  self._log_creating_failed_log_creating_failed(handler, error)
48 
49  def _create_handler(self, kw):
50  if kw.error:
51  raise DataError(kw.error)
52  embedded = EmbeddedArguments.from_name(kw.name)
53  if not embedded:
54  return UserKeywordHandler(kw, self.namename)
55  if kw.args:
56  raise DataError('Keyword cannot have both normal and embedded arguments.')
57  return EmbeddedArgumentsHandler(kw, self.namename, embedded)
58 
59  def _log_creating_failed(self, handler, error):
60  LOGGER.error(f"Error in file '{self.source}' on line {handler.lineno}: "
61  f"Creating keyword '{handler.name}' failed: {error.message}")
62 
63  def handlers_for(self, name):
64  return self.handlershandlers.get_handlers(name)
65 
66 
67 # TODO: Should be merged with running.model.UserKeyword
68 
70  supports_embedded_args = False
71 
72  def __init__(self, keyword, libname):
73  self.namename = keyword.name
74  self.libnamelibname = libname
75  self.docdoc = keyword.doc
76  self.sourcesource = keyword.source
77  self.linenolineno = keyword.lineno
78  self.tagstags = keyword.tags
79  self.argumentsarguments = UserKeywordArgumentParser().parse(tuple(keyword.args),
80  self.longnamelongnamelongname)
81  self.timeouttimeout = keyword.timeout
82  self.bodybody = keyword.body
83  self.return_valuereturn_value = tuple(keyword.return_)
84  self.teardownteardown = keyword.teardown
85 
86  @property
87  longname = property
88 
89  def longname(self):
90  return '%s.%s' % (self.libnamelibname, self.namename) if self.libnamelibname else self.namename
91 
92  @property
93  shortdoc = property
94 
95  def shortdoc(self):
96  return getshortdoc(self.docdoc)
97 
98  @property
99  private = property
100 
101  def private(self):
102  return bool(self.tagstags and self.tagstags.robot('private'))
103 
104  def create_runner(self, name, languages=None):
105  return UserKeywordRunner(self)
106 
107 
109  supports_embedded_args = True
110 
111  def __init__(self, keyword, libname, embedded):
112  super().__init__(keyword, libname)
113  self.embeddedembedded = embedded
114 
115  def matches(self, name):
116  return self.embeddedembedded.match(name) is not None
117 
118  def create_runner(self, name, languages=None):
119  return EmbeddedArgumentsRunner(self, name)
Created if creating handlers fail – running raises DataError.
def create_runner(self, name, languages=None)
Definition: userkeyword.py:118
def __init__(self, keyword, libname, embedded)
Definition: userkeyword.py:111
def __init__(self, keyword, libname)
Definition: userkeyword.py:72
def create_runner(self, name, languages=None)
Definition: userkeyword.py:104
def __init__(self, resource, resource_file=True)
Definition: userkeyword.py:30
def _log_creating_failed(self, handler, error)
Definition: userkeyword.py:59
def getshortdoc(doc_or_item, linesep='\n')
Definition: text.py:184
Definition: __init__.py:1