Home | Trees | Indices | Help |
|
---|
|
1 """Predicates that can be used when searching for nodes. 2 3 Author: David Malcolm <dmalcolm@redhat.com>""" 4 __author__ = 'David Malcolm <dmalcolm@redhat.com>' 5 6 from i18n import TranslatableString 7 810 assert isinstance(scriptName, TranslatableString) 11 12 return scriptName.matchedBy(reportedName)13 14 20 2123 """ 24 Convert string to camelCaps 25 """ 26 string = str(string) 27 # FIXME: this function is probably really fragile, lots of difficult cases 28 # here 29 30 # Sanitize string, replacing bad characters with spaces: 31 for char in ":;!@#$%^&*()-+=_~`\\/?|[]{}<>,.\t\n\r\"'": 32 string = string.replace(char, " ") 33 words = string.strip().split(" ") 34 for word in words: 35 word.strip 36 result = "" 37 firstWord = True 38 for word in words: 39 lowercaseWord = word.lower() 40 if firstWord: 41 result += lowercaseWord 42 firstWord = False 43 else: 44 result += lowercaseWord.capitalize() 45 return result46 4749 50 """Abstract base class representing a predicate function on nodes. 51 52 It's more than just a function in that it has data and can describe itself""" 5392 9355 """Pure virtual method returning a boolean if the predicate is satisfied by the node""" 56 raise NotImplementedError57 6062 """ 63 Method to generate a string containing a (hopefully) readable search 64 method call on a node (to be used when generating Python source code in 65 the event recorder) 66 """ 67 raise NotImplementedError6870 """ 71 Method to generate a string containing a (hopefully) readable name 72 for a Node instance variable that would be the result of a search on 73 this predicate (to be used when generating Python source code in the 74 event recorder). 75 """ 76 raise NotImplementedError7779 """ 80 Predicates are considered equal if they are of the same subclass and 81 have the same data 82 """ 83 # print "predeq: self:%s"%self 84 # print " other:%s"%other 85 # print "predeq: selfdict:%s"%self.__dict__ 86 # print " otherdict:%s"%other.__dict__ 87 88 if type(self) != type(other): 89 return False 90 else: 91 return self.__dict__ == other.__dict__95 96 """Search subclass that looks for an application by name""" 97107 110 11499 self.appName = TranslatableString(appName) 100 self.debugName = self.describeSearchResult() 101 self.satisfiedByNode = self._genCompareFunc()102104 def satisfiedByNode(node): 105 return node.roleName == 'application' and stringMatches(self.appName, node.name)106 return satisfiedByNode116 return makeCamel(self.appName) + "App"117 118120 121 """SubtreePredicate subclass that takes various optional search fields""" 122176124 if name: 125 self.name = TranslatableString(name) 126 else: 127 self.name = None 128 self.roleName = roleName 129 self.description = description 130 if label: 131 self.label = TranslatableString(label) 132 else: 133 self.label = None 134 135 if debugName: 136 self.debugName = debugName 137 else: 138 if label: 139 self.debugName = "labelled '%s'" % self.label 140 else: 141 self.debugName = "child with" 142 if name: 143 self.debugName += " name=%s" % self.name 144 if roleName: 145 self.debugName += " roleName='%s'" % roleName 146 if description: 147 self.debugName += " description='%s'" % description 148 assert self.debugName 149 150 self.satisfiedByNode = self._genCompareFunc()151153 def satisfiedByNode(node): 154 # labelled nodes are handled specially: 155 if self.label: 156 # this reverses the search; we're looking for a node with LABELLED_BY 157 # and then checking the label, rather than looking for a label and 158 # then returning whatever LABEL_FOR targets 159 if node.labeller: 160 return stringMatches(self.label, node.labeller.name) 161 else: 162 return False 163 else: 164 # Ensure the node matches any criteria that were set: 165 if self.name: 166 if not stringMatches(self.name, node.name): 167 return False 168 if self.roleName: 169 if self.roleName != node.roleName: 170 return False 171 if self.description: 172 if self.description != node.description: 173 return False 174 return True175 return satisfiedByNode178 return self.debugName179181 if self.label: 182 args = "label=%s" % self.label 183 else: 184 args = "" 185 if self.name: 186 print(self.name) 187 args += " name=%s" % self.name 188 if self.roleName: 189 args += " roleName='%s'" % self.roleName 190 if self.description: 191 args += " description='%s'" % self.description 192 return "child(%s%s)" % (args, makeScriptRecursiveArgument(isRecursive, True))193195 if self.label: 196 return makeCamel(self.label) + "Node" 197 else: 198 if self.name: 199 return makeCamel(self.name) + "Node" 200 if self.roleName: 201 return makeCamel(self.roleName) + "Node" 202 if self.description: 203 return makeCamel(self.description) + "Node"204 205207 208 """Predicate subclass that looks simply by name""" 209219211 self.name = TranslatableString(name) 212 self.debugName = self.describeSearchResult() 213 self.satisfiedByNode = self._genCompareFunc()214 218 return satisfiedByNode221 return "named %s" % self.name222 225 228 229231 232 """Predicate subclass that looks for a top-level window by name""" 233243 246235 self.windowName = TranslatableString(windowName) 236 self.debugName = self.describeSearchResult() 237 self.satisfiedByNode = self._genCompareFunc()238240 def satisfiedByNode(node): 241 return node.roleName == 'frame' and stringMatches(self.windowName, node.name)242 return satisfiedByNode248 return "window(%s%s)" % (self.windowName, makeScriptRecursiveArgument(isRecursive, False))249251 return makeCamel(self.windowName) + "Win"252 253 263 264266 267 """Predicate subclass that looks for a top-level dialog by name""" 268278 281270 self.dialogName = TranslatableString(dialogName) 271 self.debugName = self.describeSearchResult() 272 self.satisfiedByNode = self._genCompareFunc()273275 def satisfiedByNode(node): 276 return node.roleName == 'dialog' and stringMatches(self.dialogName, node.name)277 return satisfiedByNode283 return "dialog(%s%s)" % (self.dialogName, makeScriptRecursiveArgument(isRecursive, False))284286 return makeCamel(self.dialogName) + "Dlg"287 288 293 294296 297 """Predicate: is this node labelled with the text string (i.e. by another node with that as a name)""" 298312 315300 self.labelText = TranslatableString(labelText) 301 self.debugName = self.describeSearchResult() 302 self.satisfiedByNode = self._genCompareFunc()303305 def satisfiedByNode(node): 306 # FIXME 307 if node.labeller: 308 return stringMatches(self.labelText, node.labeller.name) 309 else: 310 return False311 return satisfiedByNode317 return "child(label=%s%s)" % (self.labelText, makeScriptRecursiveArgument(isRecursive, True))318320 return makeCamel(self.labelText) + "Node"321 322324 325 """Predicate subclass that looks for a menu by name""" 326341 342328 self.menuName = TranslatableString(menuName) 329 self.debugName = self.describeSearchResult() 330 self.satisfiedByNode = lambda node: node.roleName == 'menu' and \ 331 stringMatches(self.menuName, node.name)332 335337 return "menu(%s%s)" % (self.menuName, makeScriptRecursiveArgument(isRecursive, True))338340 return makeCamel(self.menuName) + "Menu"344 345 """Predicate subclass that looks for a menu item by name""" 346362 363348 self.menuItemName = TranslatableString(menuItemName) 349 self.debugName = self.describeSearchResult() 350 self.satisfiedByNode = lambda node: \ 351 node.roleName.endswith('menu item') and \ 352 stringMatches(self.menuItemName, node.name)353 356358 return "menuItem(%s%s)" % (self.menuItemName, makeScriptRecursiveArgument(isRecursive, True))359361 return makeCamel(self.menuItemName) + "MenuItem"365 366 """Predicate subclass that looks for a text entry by name""" 367382 383369 self.textEntryName = TranslatableString(textEntryName) 370 self.debugName = self.describeSearchResult() 371 self.satisfiedByNode = lambda node: node.roleName == 'text' and \ 372 stringMatches(self.textEntryName, node.name)373 376378 return "textentry(%s%s)" % (self.textEntryName, makeScriptRecursiveArgument(isRecursive, True))379381 return makeCamel(self.textEntryName) + "Entry"385 386 """Predicate subclass that looks for a button by name""" 387402 403389 self.buttonName = TranslatableString(buttonName) 390 self.debugName = self.describeSearchResult() 391 self.satisfiedByNode = lambda node: node.roleName == 'push button' \ 392 and stringMatches(self.buttonName, node.name)393 396398 return "button(%s%s)" % (self.buttonName, makeScriptRecursiveArgument(isRecursive, True))399401 return makeCamel(self.buttonName) + "Button"405 406 """Predicate subclass that looks for a tab by name""" 407422409 self.tabName = TranslatableString(tabName) 410 self.debugName = self.describeSearchResult() 411 self.satisfiedByNode = lambda node: node.roleName == 'page tab' and \ 412 stringMatches(self.tabName, node.name)413 416418 return "tab(%s%s)" % (self.tabName, makeScriptRecursiveArgument(isRecursive, True))419421 return makeCamel(self.tabName) + "Tab"
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Thu Mar 13 17:22:31 2014 | http://epydoc.sourceforge.net |