72 |
if f2 is not None: |
if f2 is not None: |
73 |
f2.close() |
f2.close() |
74 |
|
|
75 |
def perform(self, elements=None, check_attributes=False): |
def perform(self, elements=None, subtree=None, fields=None, check_attributes=False): |
76 |
log.info('Only checking %s elements' % ",".join(elements)) |
log.info('Only checking %s elements' % ",".join(elements or ['all'])) |
77 |
for element in self.elements: |
for element in self.elements: |
78 |
if elements is not None: |
if elements is not None: |
79 |
if element not in elements: continue |
if element not in elements: continue |
80 |
self.elements_old[element] = [] |
self.elements_old[element] = [] |
81 |
self.elements_new[element] = [] |
self.elements_new[element] = [] |
82 |
for e in self.old_xml_doc.findall("//%s" % element): |
if subtree: |
83 |
|
needle = '//*[@name="%s"]//%s' % (subtree, element) |
84 |
|
else: |
85 |
|
needle = '//%s' % (element) |
86 |
|
log.debug("Searching for %s" % needle) |
87 |
|
for e in self.old_xml_doc.findall(needle): |
88 |
|
if fields is not None: |
89 |
|
name = e.attrib.get('name') |
90 |
|
if str(name ) not in fields: |
91 |
|
log.debug('Old: Not found %s in %s' % (name, fields)) |
92 |
|
continue |
93 |
self.elements_old[element].append(e) |
self.elements_old[element].append(e) |
94 |
for e in self.new_xml_doc.findall("//%s" % element): |
for e in self.new_xml_doc.findall(needle): |
95 |
|
if fields is not None: |
96 |
|
name = e.attrib.get('name') |
97 |
|
if str(name )not in fields: |
98 |
|
log.debug('New: Not found %s in %s' % (name, fields)) |
99 |
|
continue |
100 |
self.elements_new[element].append(e) |
self.elements_new[element].append(e) |
101 |
self.diff_element(element, check_attributes) |
self.diff_element(element, check_attributes) |
102 |
|
|
143 |
break |
break |
144 |
if not found: |
if not found: |
145 |
error.append("New") |
error.append("New") |
146 |
|
if element == 'choice': |
147 |
|
error.extend(self.diff_choicelist(None, o, check_attributes)) |
148 |
|
|
149 |
if error: |
if error: |
150 |
out.append("Field: %s (%s)" % (name, element)) |
out.append("Field: %s (%s)" % (name, element)) |
161 |
old = {} |
old = {} |
162 |
new = {} |
new = {} |
163 |
errors = [] |
errors = [] |
164 |
for c in o.getchildren(): |
if o is not None: |
165 |
old[c.attrib.get('value')] = c |
for c in o.findall('.//bool'): |
166 |
for c in n.getchildren(): |
old[c.attrib.get('value')] = c |
167 |
new[c.attrib.get('value')] = c |
if n is not None: |
168 |
|
for c in n.findall('.//bool'): |
169 |
|
new[c.attrib.get('value')] = c |
170 |
|
|
171 |
for key in old.keys(): |
for key in old.keys(): |
172 |
if new.has_key(key): |
if new.has_key(key): |
211 |
|
|
212 |
def main(): |
def main(): |
213 |
try: |
try: |
214 |
opts, args = getopt.getopt(sys.argv[1:], 'hvVe:', |
opts, args = getopt.getopt(sys.argv[1:], 'hvVe:s:f:', |
215 |
['elements=', 'check-attributes']) |
['elements=', 'check-attributes', 'subtree=', 'fields=']) |
216 |
|
|
217 |
except getopt.error, msg: |
except getopt.error, msg: |
218 |
usage(1, msg) |
usage(1, msg) |
219 |
|
|
220 |
elements = None |
elements = None |
221 |
|
subtree = None |
222 |
|
fields = None |
223 |
check_attributes = False |
check_attributes = False |
224 |
for opt, arg in opts: |
for opt, arg in opts: |
225 |
if opt in ('-v'): |
if opt in ('-v'): |
231 |
if opt in ('-e', '--elements'): |
if opt in ('-e', '--elements'): |
232 |
elements = arg.split(',') |
elements = arg.split(',') |
233 |
log.debug('Elements: %s' % elements) |
log.debug('Elements: %s' % elements) |
234 |
|
if opt in ('-s', '--subtree'): |
235 |
|
subtree = arg |
236 |
|
log.debug('Subtree: %s' % subtree) |
237 |
|
if opt in ('-f', '--fields'): |
238 |
|
fields = arg.split(',') |
239 |
|
log.debug('Fields: %s' % fields) |
240 |
if opt in ('--check-attributes'): |
if opt in ('--check-attributes'): |
241 |
check_attributes = True |
check_attributes = True |
242 |
if len(args) < 2: |
if len(args) < 2: |
243 |
usage(1) |
usage(1) |
244 |
|
|
245 |
ins = Inspector(args[0], args[1]) |
ins = Inspector(args[0], args[1]) |
246 |
ins.perform(elements, check_attributes) |
ins.perform(elements, subtree, fields, check_attributes) |
247 |
|
|
248 |
if __name__ == '__main__': |
if __name__ == '__main__': |
249 |
main() |
main() |