itunes.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # -*- coding: utf-8 -*-
  2. import dateutil.parser
  3. import xml.etree.ElementTree
  4. class XmlDict:
  5. def __init__(self, node):
  6. assert isinstance(node, xml.etree.ElementTree.Element), node
  7. assert node.tag == 'dict', node.tag
  8. self._node = node
  9. def _get_value_node(self, key):
  10. # WORKAROUND method getnext() is sadly not available
  11. for child_idx, child_node in enumerate(self._node):
  12. if child_node.tag == 'key' and child_node.text == key:
  13. return self._node[child_idx + 1]
  14. raise KeyError(key)
  15. def __getitem__(self, key):
  16. value_node = self._get_value_node(key)
  17. if value_node.tag == 'string':
  18. return value_node.text
  19. elif value_node.tag == 'integer':
  20. return int(value_node.text)
  21. elif value_node.tag == 'date':
  22. return dateutil.parser.parse(value_node.text)
  23. else:
  24. return value_node
  25. class XmlLibrary:
  26. def __init__(self, path):
  27. self._tree = xml.etree.ElementTree.parse(path)
  28. self._root_dict = XmlDict(self._tree.find('./dict'))
  29. self._id = self._root_dict['Library Persistent ID']
  30. assert isinstance(self._id, str), self._id
  31. assert len(self._id) > 4
  32. @property
  33. def id(self):
  34. return self._id