Mercurial > hg > truffle
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) |