|
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