|
1 | 1 | from __future__ import absolute_import, division, unicode_literals |
2 | 2 |
|
3 | 3 |
|
| 4 | +from collections import MutableMapping |
4 | 5 | from xml.dom import minidom, Node |
5 | 6 | import weakref |
6 | 7 |
|
|
13 | 14 | def getDomBuilder(DomImplementation): |
14 | 15 | Dom = DomImplementation |
15 | 16 |
|
16 | | - class AttrList(object): |
| 17 | + class AttrList(MutableMapping): |
17 | 18 | def __init__(self, element): |
18 | 19 | self.element = element |
19 | 20 |
|
20 | 21 | def __iter__(self): |
21 | | - return list(self.element.attributes.items()).__iter__() |
| 22 | + return iter(self.element.attributes.keys()) |
22 | 23 |
|
23 | 24 | def __setitem__(self, name, value): |
24 | | - self.element.setAttribute(name, value) |
| 25 | + if isinstance(name, tuple): |
| 26 | + raise NotImplementedError |
| 27 | + else: |
| 28 | + attr = self.element.ownerDocument.createAttribute(name) |
| 29 | + attr.value = value |
| 30 | + self.element.attributes[name] = attr |
25 | 31 |
|
26 | 32 | def __len__(self): |
27 | | - return len(list(self.element.attributes.items())) |
| 33 | + return len(self.element.attributes) |
28 | 34 |
|
29 | 35 | def items(self): |
30 | | - return [(item[0], item[1]) for item in |
31 | | - list(self.element.attributes.items())] |
| 36 | + return list(self.element.attributes.items()) |
32 | 37 |
|
33 | | - def keys(self): |
34 | | - return list(self.element.attributes.keys()) |
| 38 | + def values(self): |
| 39 | + return list(self.element.attributes.values()) |
35 | 40 |
|
36 | 41 | def __getitem__(self, name): |
37 | | - return self.element.getAttribute(name) |
| 42 | + if isinstance(name, tuple): |
| 43 | + raise NotImplementedError |
| 44 | + else: |
| 45 | + return self.element.attributes[name].value |
38 | 46 |
|
39 | | - def __contains__(self, name): |
| 47 | + def __delitem__(self, name): |
40 | 48 | if isinstance(name, tuple): |
41 | 49 | raise NotImplementedError |
42 | 50 | else: |
43 | | - return self.element.hasAttribute(name) |
| 51 | + del self.element.attributes[name] |
44 | 52 |
|
45 | 53 | class NodeBuilder(_base.Node): |
46 | 54 | def __init__(self, element): |
|
0 commit comments