1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # -*- coding: utf-8 -*-
- import dateutil.parser
- import xml.etree.ElementTree
- class XmlDict:
- def __init__(self, node):
- assert isinstance(node, xml.etree.ElementTree.Element), node
- assert node.tag == 'dict', node.tag
- self._node = node
- def _get_value_node(self, key):
- # WORKAROUND method getnext() is sadly not available
- for child_idx, child_node in enumerate(self._node):
- if child_node.tag == 'key' and child_node.text == key:
- return self._node[child_idx + 1]
- raise KeyError(key)
- def __getitem__(self, key):
- value_node = self._get_value_node(key)
- if value_node.tag == 'string':
- return value_node.text
- elif value_node.tag == 'integer':
- return int(value_node.text)
- elif value_node.tag == 'date':
- return dateutil.parser.parse(value_node.text)
- else:
- return value_node
- class XmlLibrary:
- def __init__(self, path):
- self._tree = xml.etree.ElementTree.parse(path)
- self._root_dict = XmlDict(self._tree.find('./dict'))
- self._id = self._root_dict['Library Persistent ID']
- assert isinstance(self._id, str), self._id
- assert len(self._id) > 4
- @property
- def id(self):
- return self._id
|