Home | Trees | Indices | Help |
|
---|
|
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 2224 """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 308232 """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
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Thu Apr 5 08:44:41 2012 | http://epydoc.sourceforge.net |