Robot Framework Integrated Development Environment (RIDE)
cellinfo.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 from ..action.shortcut import localize_shortcuts
17 from ..utils import highlightmatcher, html_escape
18 
19 CTRL_LABEL = localize_shortcuts('CtrlCmd')
20 
21 
22 class CellInfo():
23 
24  def __init__(self, cell_content, cell_position, for_loop=False):
25  self._cell_content_cell_content = cell_content
26  self._cell_position_cell_position = cell_position
27  self.for_loopfor_loop = for_loop
28 
29  @property
30  content_type = property
31 
32  def content_type(self):
33  return self._cell_content_cell_content.type
34 
35  @property
36  cell_type = property
37 
38  def cell_type(self):
39  return self._cell_position_cell_position.type
40 
41  @property
42  source = property
43 
44  def source(self):
45  return self._cell_content_cell_content.source
46 
47  @property
48  arg_name = property
49 
50  def arg_name(self):
51  return self._cell_position_cell_position.argument_name
52 
53  def has_error(self):
54  return self.argument_missingargument_missing() or self.too_many_argumentstoo_many_arguments()
55 
56  def argument_missing(self):
57  return self.cell_typecell_typecell_type == CellType.MANDATORY \
58  and self.content_typecontent_typecontent_type in [ContentType.EMPTY, ContentType.COMMENTED]
59 
60  def too_many_arguments(self):
61  return self.cell_typecell_typecell_type == CellType.MUST_BE_EMPTY \
62  and self.content_typecontent_typecontent_type not in \
63  [ContentType.EMPTY, ContentType.COMMENTED]
64 
65  def matches(self, value):
66  return highlightmatcher.highlight_matcher(value,
67  self._cell_content_cell_content.value)
68 
69 
70 def TipMessage(cell):
71  if not cell:
72  return ''
73  tip = _TooltipMessage(cell) #if not cell.for_loop else _ForLoopTooltipMessage(cell)
74  return html_escape(str(tip)).replace('\n', '<br />')
75 
76 
78 
79  TOO_MANY_ARGUMENTS = "Too many arguments"
80  KEYWORD_NOT_FOUND = \
81  "Keyword not found! For possible corrections press <%s>" % CTRL_LABEL
82  VARIABLE_ASSIGMENT = "Variable assignment"
83  UNKNOWN_VARIABLE = "\n\nUnknown variable"
84 
85  ARGUMENT = "Argument: %s"
86  OPTIONAL_ARGUMENT = "Optional argument: %s"
87  MISSING_ARGUMENT = "Missing argument: %s"
88 
89  KEYWORD = "Keyword from: %s\n\n" + ("Press <%s> for details" % CTRL_LABEL)
90 
91  def __init__(self, cell):
92  self.messagemessage = self._get_message_get_message(cell)
93 
94  def _get_message(self, cell):
95  message = '' if cell.content_type != ContentType.UNKNOWN_VARIABLE \
96  else self.UNKNOWN_VARIABLEUNKNOWN_VARIABLE
97  handlers = {
98  CellType.ASSIGN: self._assign_assign,
99  CellType.KEYWORD: self._keyword_keyword,
100  CellType.MANDATORY: self._mandatory_mandatory,
101  CellType.OPTIONAL: self._optional_optional,
102  CellType.MUST_BE_EMPTY: self._must_be_empty_must_be_empty,
103  CellType.UNKNOWN: self._unknown_unknown,
104  CellType.END: self._keyword_keyword,
105  CellType.FOR: self._keyword_keyword
106  }
107  return (handlers[cell.cell_type](cell) + message).strip()
108 
109  def _must_be_empty(self, cell):
110  if cell.too_many_arguments():
111  return self.TOO_MANY_ARGUMENTSTOO_MANY_ARGUMENTS
112  return ''
113 
114  def _mandatory(self, cell):
115  if cell.argument_missing():
116  return self.MISSING_ARGUMENTMISSING_ARGUMENT % cell.arg_name
117  return self.ARGUMENTARGUMENT % cell.arg_name
118 
119  def _optional(self, cell):
120  return self.OPTIONAL_ARGUMENTOPTIONAL_ARGUMENT % cell.arg_name
121 
122  def _keyword(self, cell):
123  if cell.content_type == ContentType.STRING:
124  return self.KEYWORD_NOT_FOUNDKEYWORD_NOT_FOUND
125  if cell.content_type in ContentType.KEYWORDS:
126  return self.KEYWORDKEYWORD % cell.source
127  return ''
128 
129  def _assign(self, cell):
130  return self.VARIABLE_ASSIGMENTVARIABLE_ASSIGMENT
131 
132  def _unknown(self, cell):
133  return ''
134 
135  def __nonzero__(self):
136  return bool(self.messagemessage)
137 
138  def __str__(self):
139  return self.messagemessage
140 
141  """
142  class _ForLoopTooltipMessage(_TooltipMessage):
143 
144  TOO_MANY_ARGUMENTS = "Too many parameters in for loop"
145 
146  def _get_message(self, cell):
147  if cell.too_many_arguments():
148  return self.TOO_MANY_ARGUMENTS
149  return ''
150  """
151 
152 
153 class CellContent():
154 
155  def __init__(self, type, value, source=None):
156  self.typetype = type
157  self.valuevalue = value
158  self.sourcesource = source
159 
160 
161 class CellPosition():
162 
163  def __init__(self, type, argument_name):
164  self.typetype = type
165  self.argument_nameargument_name = argument_name
166 
167 
169  USER_KEYWORD = 'USER_KEYWORD'
170  LIBRARY_KEYWORD = 'LIBRARY_KEYWORD'
171  END = 'END'
172  FOR = 'FOR'
173  IF = 'IF'
174  ELSE = 'ELSE'
175  ELSEIF = 'ELSE IF'
176  WHILE = 'WHILE'
177  TRY = 'TRY'
178  EXCEPT = 'EXCEPT'
179  BREAK = 'BREAK'
180  CONTINUE = 'CONTINUE'
181  KEYWORDS = (USER_KEYWORD, LIBRARY_KEYWORD, END, FOR, IF, ELSE, ELSEIF, WHILE, TRY, EXCEPT, BREAK, CONTINUE)
182  VARIABLE = 'VARIABLE'
183  UNKNOWN_VARIABLE = 'UNKNOWN_VARIABLE'
184  COMMENTED = 'COMMENTED'
185  STRING = 'STRING'
186  EMPTY = 'EMPTY'
187 
188 
189 class CellType:
190  ASSIGN = 'ASSIGN'
191  KEYWORD = 'KEYWORD'
192  MANDATORY = 'MANDATORY'
193  OPTIONAL = 'OPTIONAL'
194  MUST_BE_EMPTY = 'MUST_BE_EMPTY'
195  UNKNOWN = 'UNKNOWN'
196  FOR = 'KEYWORD'
197  END = 'KEYWORD'
198  IF = 'KEYWORD'
199  ELSE = 'KEYWORD'
200  ELSEIF = 'KEYWORD'
201  WHILE = 'KEYWORD'
202  TRY = 'KEYWORD'
203  EXCEPT = 'KEYWORD'
204  BREAK = 'KEYWORD'
205  CONTINUE = 'KEYWORD'
def __init__(self, type, value, source=None)
Definition: cellinfo.py:155
def __init__(self, cell_content, cell_position, for_loop=False)
Definition: cellinfo.py:24
def __init__(self, type, argument_name)
Definition: cellinfo.py:163
def localize_shortcuts(string)
Definition: shortcut.py:57
def html_escape(text, linkify=True)
Definition: markuputils.py:40