comparison mx/outputparser.py @ 11514:dc3c8df55905

added support for pylint and fixed errors/warnings it found
author Doug Simon <doug.simon@oracle.com>
date Tue, 03 Sep 2013 16:33:41 +0200
parents 2025455e7d80
children
comparison
equal deleted inserted replaced
11513:8d4e5e08d83f 11514:dc3c8df55905
24 # ---------------------------------------------------------------------------------------------------- 24 # ----------------------------------------------------------------------------------------------------
25 25
26 import re 26 import re
27 27
28 class OutputParser: 28 class OutputParser:
29 29
30 def __init__(self): 30 def __init__(self):
31 self.matchers = [] 31 self.matchers = []
32 32
33 def addMatcher(self, matcher): 33 def addMatcher(self, matcher):
34 self.matchers.append(matcher) 34 self.matchers.append(matcher)
35 35
36 def parse(self, output): 36 def parse(self, output):
37 valueMaps = [] 37 valueMaps = []
38 for matcher in self.matchers: 38 for matcher in self.matchers:
39 matcher.parse(output, valueMaps) 39 matcher.parse(output, valueMaps)
40 return valueMaps 40 return valueMaps
45 where each key and value in the template map is either a constant 45 where each key and value in the template map is either a constant
46 value or a named group in the regular expression. The latter is 46 value or a named group in the regular expression. The latter is
47 given as the group name enclosed in '<' and '>'. 47 given as the group name enclosed in '<' and '>'.
48 """ 48 """
49 class ValuesMatcher: 49 class ValuesMatcher:
50 50
51 def __init__(self, regex, valuesTemplate): 51 def __init__(self, regex, valuesTemplate):
52 assert isinstance(valuesTemplate, dict) 52 assert isinstance(valuesTemplate, dict)
53 self.regex = regex 53 self.regex = regex
54 self.valuesTemplate = valuesTemplate 54 self.valuesTemplate = valuesTemplate
55 55
56 def parse(self, text, valueMaps): 56 def parse(self, text, valueMaps):
57 for match in self.regex.finditer(text): 57 for match in self.regex.finditer(text):
58 valueMap = {} 58 valueMap = {}
59 for keyTemplate, valueTemplate in self.valuesTemplate.items(): 59 for keyTemplate, valueTemplate in self.valuesTemplate.items():
60 key = self.get_template_value(match, keyTemplate) 60 key = self.get_template_value(match, keyTemplate)
61 value = self.get_template_value(match, valueTemplate) 61 value = self.get_template_value(match, valueTemplate)
62 assert not valueMap.has_key(key), key 62 assert not valueMap.has_key(key), key
63 valueMap[key] = value 63 valueMap[key] = value
64 valueMaps.append(valueMap) 64 valueMaps.append(valueMap)
65 65
66 def get_template_value(self, match, template): 66 def get_template_value(self, match, template):
67 def replace_var(m): 67 def replace_var(m):
68 groupName = m.group(1) 68 groupName = m.group(1)
69 return match.group(groupName) 69 return match.group(groupName)
70 70
71 return re.sub(r'<([\w]+)>', replace_var, template) 71 return re.sub(r'<([\w]+)>', replace_var, template)