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

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

 1  """NDG XACML ElementTree based Target Element reader  
 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: targetreader.py 8028 2012-02-27 14:38:01Z rwilkinson $" 
12  from ndg.xacml.core.target import Target 
13  from ndg.xacml.core.subject import Subject 
14  from ndg.xacml.core.resource import Resource 
15  from ndg.xacml.core.action import Action 
16  from ndg.xacml.core.environment import Environment 
17  from ndg.xacml.parsers import XMLParseError 
18  from ndg.xacml.parsers.etree import QName, getElementChildren 
19  from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 
20  from ndg.xacml.parsers.etree.factory import ReaderFactory 
21   
22   
23 -class TargetReader(ETreeAbstractReader):
24 """ElementTree based parser for XACML Target elements 25 26 @cvar TYPE: XACML type to instantiate from parsed object 27 @type TYPE: type 28 """ 29 TYPE = Target 30
31 - def __call__(self, obj, common):
32 """Parse Target object 33 34 @param obj: input object to parse 35 @type obj: ElementTree Element, or stream object 36 @return: new XACML expression instance 37 @rtype: ndg.xacml.core.target.Target derived type 38 @raise XMLParseError: error reading element 39 """ 40 elem = super(TargetReader, self)._parse(obj) 41 42 xacmlType = TargetReader.TYPE 43 target = xacmlType() 44 45 localName = QName.getLocalPart(elem.tag) 46 if localName != xacmlType.ELEMENT_LOCAL_NAME: 47 raise XMLParseError('No "%s" element found' % 48 xacmlType.ELEMENT_LOCAL_NAME) 49 50 # Parse sub-elements 51 for childElem in getElementChildren(elem): 52 localName = QName.getLocalPart(childElem.tag) 53 54 if localName == xacmlType.SUBJECTS_ELEMENT_LOCAL_NAME: 55 for subjElem in getElementChildren(childElem): 56 SubjectReader = ReaderFactory.getReader(Subject) 57 target.subjects.append(SubjectReader.parse(subjElem, 58 common)) 59 60 elif localName == xacmlType.RESOURCES_ELEMENT_LOCAL_NAME: 61 for resourceElem in getElementChildren(childElem): 62 ResourceReader = ReaderFactory.getReader(Resource) 63 target.resources.append(ResourceReader.parse(resourceElem, 64 common)) 65 66 elif localName == xacmlType.ACTIONS_ELEMENT_LOCAL_NAME: 67 for targetElem in getElementChildren(childElem): 68 ActionReader = ReaderFactory.getReader(Action) 69 target.actions.append(ActionReader.parse(targetElem, 70 common)) 71 72 elif localName == xacmlType.ENVIRONMENTS_ELEMENT_LOCAL_NAME: 73 for environElem in getElementChildren(childElem): 74 EnvironmentReader = ReaderFactory.getReader(Environment) 75 target.environments.append(EnvironmentReader.parse( 76 environElem, common)) 77 else: 78 raise XMLParseError("XACML Target child element name %r not " 79 "recognised" % localName) 80 81 return target
82