Package ndg :: Package xacml :: Package parsers :: Package etree :: Module reader
[hide private]

Source Code for Module ndg.xacml.parsers.etree.reader

 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 
20 21 22 -class ETreeAbstractReader(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
29 - def __init__(self):
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
43 - def __del__(self):
44 """Restore original global namespace map""" 45 if not Config.use_lxml: 46 ElementTree._namespace_map = self.__namespace_map_backup
47 48 @staticmethod
49 - def _parse(obj):
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 # Treat as stream object 60 elem = ElementTree.parse(obj).getroot() 61 62 return elem
63 64 # Set up new class as an abstract base itself 65 AbstractReader.register(ETreeAbstractReader) 66