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

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

 1  """NDG XACML ElementTree Policy Document Reader 
 2   
 3  NERC DataGrid 
 4  """ 
 5  __author__ = "R B Wilkinson" 
 6  __date__ = "01/11/11" 
 7  __copyright__ = "(C) 2011 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$" 
12  from ndg.xacml.parsers import XMLParseError 
13  from ndg.xacml.core.policy import Policy 
14  from ndg.xacml.core.policyset import PolicySet 
15  from ndg.xacml.core.policybase import PolicyBase 
16  from ndg.xacml.parsers.etree import QName 
17  from ndg.xacml.parsers.etree.policyreader import PolicyReader 
18  from ndg.xacml.parsers.etree.policysetreader import PolicySetReader 
19  from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 
20   
21   
22 -class PolicyBaseReader(ETreeAbstractReader):
23 """Parse a Policy Document using ElementTree 24 @cvar TYPE: XACML type to instantiate from parsed object 25 @type TYPE: type""" 26 TYPE = PolicyBase 27 TYPE_MAP = {Policy.ELEMENT_LOCAL_NAME: (Policy, PolicyReader), 28 PolicySet.ELEMENT_LOCAL_NAME: (PolicySet, PolicySetReader)} 29
30 - def __call__(self, obj, common):
31 """Parse policy object 32 33 @param obj: input object to parse 34 @type obj: ElementTree Element, or stream object 35 @return: new XACML expression instance 36 @rtype: ndg.xacml.core.policybase.PolicyBase derived type 37 @raise XMLParseError: error reading element 38 @raise NotImplementedError: parsing is not implemented for rule 39 combiner, combiner parameters and obligations elements. 40 """ 41 elem = super(PolicyBaseReader, self)._parse(obj) 42 localName = QName.getLocalPart(elem.tag) 43 44 # Root element should be either Policy or PolicySet. 45 (xacmlType, readerType) = self.TYPE_MAP.get(localName, (None, None)) 46 if xacmlType is None: 47 raise XMLParseError("Element %s is not valid as the root element" 48 " of a XACML document", 49 localName) 50 51 # Instantiate appropriate reader and parse the policy document. 52 rootElementReader = readerType() 53 policy = rootElementReader.processElement(elem, common) 54 55 return policy
56