Total Complexity | 10 |
Total Lines | 37 |
Duplicated Lines | 0 % |
1 | import xml.etree.ElementTree as ET |
||
7 | class Response(Doc): |
||
8 | def __init__(self, root): |
||
9 | self.data = {} |
||
10 | self.root = root |
||
11 | self.parse(self.root[0]) |
||
12 | |||
13 | def find(self, tag, name): |
||
14 | return tag.find(name, namespaces=self.nsmap) |
||
15 | |||
16 | def find_text(self, parent, name): |
||
17 | tag = self.find(parent, name) |
||
18 | if tag is not None: |
||
19 | return tag.text |
||
20 | |||
21 | def findall(self, tag, name): |
||
22 | return tag.findall(name, self.nsmap) |
||
23 | |||
24 | def parse(self, tag): |
||
25 | ns = tag.tag.split('}')[0][1:] |
||
26 | name = tag.tag.split('}')[1] |
||
27 | module = self.get_module(ns) |
||
28 | if name in module.opmap: |
||
29 | name = module.opmap[name] |
||
30 | method = 'parse_' + name |
||
31 | if not hasattr(module, method): |
||
32 | raise Exception('unknown tag', ns + ':' + name) |
||
33 | getattr(module, method)(self, tag) |
||
34 | |||
35 | @staticmethod |
||
36 | def parsexml(xml): |
||
37 | root = ET.fromstring(xml) |
||
38 | return Response(root) |
||
39 | |||
40 | @staticmethod |
||
41 | def build(name, start): |
||
42 | type = globals()[name] |
||
43 | return type(start) |
||
44 | |||
45 |