1 """NDG XACML ElementTree reader module containing reader base class
2
3 NERC DataGrid
4 """
5 __author__ = "P J Kershaw"
6 __date__ = "16/03/10"
7 __copyright__ = "(C) 2010 Science and Technology Facilities Council"
8 __contact__ = "Philip.Kershaw@stfc.ac.uk"
9 __license__ = "BSD - see LICENSE file in top-level directory"
10 __contact__ = "Philip.Kershaw@stfc.ac.uk"
11 __revision__ = "$Id: reader.py 8010 2012-01-30 16:24:06Z rwilkinson $"
12 import logging
13 log = logging.getLogger(__name__)
14
15 from ndg.xacml import Config, importElementTree
16 ElementTree = importElementTree()
17
18 from ndg.xacml.core import XacmlPolicyBase
19 from ndg.xacml.parsers import AbstractReader
23 """Base class for ElementTree implementation of XACML reader
24
25 @cvar TYPE: XACML type to instantiate from parsed object
26 @type TYPE: NoneType"""
27 TYPE = None
28
30 """Initialise ElementTree namespace map for XACML 2.0 namespaces
31
32 @raise NotImplementedError: TYPE class variable must be set in a
33 derived class
34 """
35 if self.__class__.TYPE is None:
36 raise NotImplementedError('No "TYPE" class variable set to specify '
37 'the XACML type to instantiate')
38
39 if not Config.use_lxml:
40 self.__namespace_map_backup = ElementTree._namespace_map.copy()
41 ElementTree._namespace_map[''] = XacmlPolicyBase.XACML_2_0_POLICY_NS
42
44 """Restore original global namespace map"""
45 if not Config.use_lxml:
46 ElementTree._namespace_map = self.__namespace_map_backup
47
48 @staticmethod
50 """Parse helper method
51 @param obj: input object to parse
52 @type obj: ElementTree Element, or stream object
53 @return: ElementTree element
54 @rtype: xml.etree.Element
55 """
56 if ElementTree.iselement(obj):
57 elem = obj
58 else:
59
60 elem = ElementTree.parse(obj).getroot()
61
62 return elem
63
64
65 AbstractReader.register(ETreeAbstractReader)
66