|  | @@ -0,0 +1,44 @@
 | 
	
		
			
				|  |  | +# -*- 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
 |