Robot Framework Integrated Development Environment (RIDE)
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 robotide.lib.robot.errors import DataError
19 from robotide.lib.robot.output import LOGGER
20 from robotide.lib.robot.utils import getshortdoc, is_string, unic
21 
22 from .builder import ResourceFileBuilder
23 from .arguments import EmbeddedArguments, UserKeywordArgumentParser
24 from .handlerstore import HandlerStore
25 from .userkeywordrunner import UserKeywordRunner, EmbeddedArgumentsRunner
26 from .usererrorhandler import UserErrorHandler
27 
28 
29 class UserLibrary():
30  TEST_CASE_FILE_TYPE = HandlerStore.TEST_CASE_FILE_TYPE
31  RESOURCE_FILE_TYPE = HandlerStore.RESOURCE_FILE_TYPE
32 
33  def __init__(self, source, source_type=RESOURCE_FILE_TYPE):
34  if is_string(source):
35  resource = ResourceFileBuilder().build(source)
36  else:
37  resource = source
38  source = resource.source
39  basename = os.path.basename(source) if source else None
40  self.namename = os.path.splitext(basename)[0] \
41  if source_type == self.RESOURCE_FILE_TYPERESOURCE_FILE_TYPE else None
42  self.docdoc = resource.doc
43  self.handlershandlers = HandlerStore(basename, source_type)
44  self.sourcesource = source
45  self.source_typesource_type = source_type
46  for kw in resource.keywords:
47  try:
48  handler = self._create_handler_create_handler(kw)
49  except DataError as error:
50  handler = UserErrorHandler(error, kw.name, self.namename)
51  self._log_creating_failed_log_creating_failed(handler, error)
52  embedded = isinstance(handler, EmbeddedArgumentsHandler)
53  try:
54  self.handlershandlers.add(handler, embedded)
55  except DataError as error:
56  self._log_creating_failed_log_creating_failed(handler, error)
57 
58  def _create_handler(self, kw):
59  embedded = EmbeddedArguments(kw.name)
60  if not embedded:
61  return UserKeywordHandler(kw, self.namename)
62  if kw.args:
63  raise DataError('Keyword cannot have both normal and embedded '
64  'arguments.')
65  return EmbeddedArgumentsHandler(kw, self.namename, embedded)
66 
67  def _log_creating_failed(self, handler, error):
68  LOGGER.error("Error in %s '%s': Creating keyword '%s' failed: %s"
69  % (self.source_typesource_type.lower(), self.sourcesource,
70  handler.name, error.message))
71 
72 
73 # TODO: Should be merged with running.model.UserKeyword
74 
76 
77  def __init__(self, keyword, libname):
78  self.namename = keyword.name
79  self.libnamelibname = libname
80  self.docdoc = unic(keyword.doc)
81  self.tagstags = keyword.tags
82  self.argumentsarguments = UserKeywordArgumentParser().parse(tuple(keyword.args),
83  self.longnamelongnamelongname)
84  self._kw_kw = keyword
85  self.timeouttimeout = keyword.timeout
86  self.keywordskeywords = keyword.keywords.normal
87  self.return_valuereturn_value = tuple(keyword.return_)
88  self.teardownteardown = keyword.keywords.teardown
89 
90  @property
91  longname = property
92 
93  def longname(self):
94  return '%s.%s' % (self.libnamelibname, self.namename) if self.libnamelibname else self.namename
95 
96  @property
97  shortdoc = property
98 
99  def shortdoc(self):
100  return getshortdoc(self.docdoc)
101 
102  def create_runner(self, name):
103  return UserKeywordRunner(self)
104 
105 
107 
108  def __init__(self, keyword, libname, embedded):
109  UserKeywordHandler.__init__(self, keyword, libname)
110  self.keywordkeyword = keyword
111  self.embedded_nameembedded_name = embedded.name
112  self.embedded_argsembedded_args = embedded.args
113 
114  def matches(self, name):
115  return self.embedded_nameembedded_name.match(name) is not None
116 
117  def create_runner(self, name):
118  return EmbeddedArgumentsRunner(self, name)
Used when variable does not exist.
Definition: errors.py:67
Created if creating handlers fail – running raises DataError.
def __init__(self, source, source_type=RESOURCE_FILE_TYPE)
Definition: userkeyword.py:33
def getshortdoc(doc_or_item, linesep='\n')
Definition: text.py:181