Changeset 6752
- Timestamp:
- 19/03/10 10:39:33 (11 years ago)
- Location:
- TI12-security/trunk/NDG_XACML/ndg/xacml
- Files:
-
- 6 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
TI12-security/trunk/NDG_XACML/ndg/xacml/core/attributedesignator.py
r6750 r6752 68 68 """XACML Subject Attribute Designator type""" 69 69 ELEMENT_LOCAL_NAME = 'SubjectAttributeDesignator' 70 71 72 class ResourceAttributeDesignator(AttributeDesignator): 73 """XACML Resource Attribute Designator type""" 74 ELEMENT_LOCAL_NAME = 'ResourceAttributeDesignator' -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/actionreader.py
r6747 r6752 1 ''' 2 Created on 16 Mar 2010 1 """NDG XACML ElementTree based parser for Action type 3 2 4 @author: pjkersha 5 ''' 3 NERC DataGrid Project 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: $" 12 from ndg.xacml.core.action import Action 13 from ndg.xacml.parsers.etree.targetchildreader import TargetChildReader 6 14 7 class ActionReader: 8 pass 15 16 class ActionReader(TargetChildReader): 17 '''ElementTree based parser for Action type 18 @cvar TYPE: XACML type to instantiate from parsed object 19 @type string: type 20 ''' 21 TYPE = Action -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/attributedesignatorreader.py
r6750 r6752 11 11 __revision__ = "$Id: $" 12 12 from ndg.xacml.utils import str2Bool 13 from ndg.xacml.core.attributedesignator import SubjectAttributeDesignator14 13 from ndg.xacml.parsers import XMLParseError 15 14 from ndg.xacml.parsers.etree import QName … … 22 21 def _parseExtension(self, elem, attributeDesignator): 23 22 """Parse AttributeDesignator object""" 24 cls= self.__class__.TYPE23 xacmlType = self.__class__.TYPE 25 24 26 25 # Unpack additional *required* attributes from top-level element 27 26 attributeValues = [] 28 for attributeName in ( cls.ATTRIBUTE_ID_ATTRIB_NAME,):27 for attributeName in (xacmlType.ATTRIBUTE_ID_ATTRIB_NAME,): 29 28 attributeValue = elem.attrib.get(attributeName) 30 29 if attributeValue is None: 31 30 raise XMLParseError('No "%s" attribute found in "%s" element' % 32 (attributeName, cls.ELEMENT_LOCAL_NAME))31 (attributeName, xacmlType.ELEMENT_LOCAL_NAME)) 33 32 34 33 attributeValues.append(attributeValue) … … 37 36 38 37 # Optional attributes 39 issuer = elem.attrib.get( cls.DATA_TYPE_ATTRIB_NAME)38 issuer = elem.attrib.get(xacmlType.DATA_TYPE_ATTRIB_NAME) 40 39 if issuer is not None: 41 40 attributeDesignator.issuer = issuer 42 41 43 mustBePresent = elem.attrib.get( cls.DATA_TYPE_ATTRIB_NAME)42 mustBePresent = elem.attrib.get(xacmlType.DATA_TYPE_ATTRIB_NAME) 44 43 if mustBePresent is not None: 45 44 attributeDesignator.mustBePresent = str2Bool(mustBePresent) … … 47 46 return attributeDesignator 48 47 49 50 class SubjectAttributeDesignatorReader(AttributeDesignatorReaderBase):51 '''ElementTree based XACML Subject Attribute Designator type parser52 '''53 TYPE = SubjectAttributeDesignator -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/conditionreader.py
r6746 r6752 23 23 24 24 condition = Condition() 25 cls= Condition25 xacmlType = Condition 26 26 27 27 localName = QName.getLocalPart(elem.tag) 28 if localName != cls.ELEMENT_LOCAL_NAME:28 if localName != xacmlType.ELEMENT_LOCAL_NAME: 29 29 raise XMLParseError("No \"%s\" element found" % 30 cls.ELEMENT_LOCAL_NAME)30 xacmlType.ELEMENT_LOCAL_NAME) 31 31 32 32 # Parse expression sub-element -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/expressionreader.py
r6750 r6752 27 27 elem = super(ExpressionReader, self)._parse(obj) 28 28 29 cls= self.__class__.TYPE30 expression = cls()29 xacmlType = self.__class__.TYPE 30 expression = xacmlType() 31 31 32 32 localName = QName.getLocalPart(elem.tag) 33 if localName != cls.ELEMENT_LOCAL_NAME:33 if localName != xacmlType.ELEMENT_LOCAL_NAME: 34 34 raise XMLParseError("No \"%s\" element found" % 35 cls.ELEMENT_LOCAL_NAME)35 xacmlType.ELEMENT_LOCAL_NAME) 36 36 37 37 # Unpack *required* attributes from top-level element 38 38 attributeValues = [] 39 for attributeName in ( cls.DATA_TYPE_ATTRIB_NAME,):39 for attributeName in (xacmlType.DATA_TYPE_ATTRIB_NAME,): 40 40 attributeValue = elem.attrib.get(attributeName) 41 41 if attributeValue is None: 42 42 raise XMLParseError('No "%s" attribute found in "%s" element' % 43 (attributeName, cls.ELEMENT_LOCAL_NAME))43 (attributeName, xacmlType.ELEMENT_LOCAL_NAME)) 44 44 45 45 attributeValues.append(attributeValue) -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/matchreader.py
r6750 r6752 11 11 __contact__ = "Philip.Kershaw@stfc.ac.uk" 12 12 __revision__ = "$Id: $" 13 from ndg.xacml.core. match import SubjectMatch13 from ndg.xacml.core.attributevalue import AttributeValue 14 14 from ndg.xacml.core.attributeselector import AttributeSelector 15 15 from ndg.xacml.parsers import XMLParseError 16 16 from ndg.xacml.parsers.etree import QName 17 17 from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 18 from ndg.xacml.parsers.etree.attributevaluereader import AttributeValueReader 19 from ndg.xacml.parsers.etree.attributedesignatorreader import ( 20 SubjectAttributeDesignatorReader) 21 from ndg.xacml.parsers.etree.attributeselectorreader import \ 22 AttributeSelectorReader 18 from ndg.xacml.parsers.etree.factory import ReaderFactory 23 19 24 20 … … 27 23 action and environment match types 28 24 ''' 29 ATTRIBUTE_DESIGNATOR_ READER_TYPE = None25 ATTRIBUTE_DESIGNATOR_TYPE = None 30 26 31 27 def __init__(self): 32 if self.__class__.ATTRIBUTE_DESIGNATOR_ READER_TYPE is None:28 if self.__class__.ATTRIBUTE_DESIGNATOR_TYPE is None: 33 29 raise NotImplementedError('Extend this class setting the ' 34 '"ATTRIBUTE_DESIGNATOR_ READER_TYPE" '30 '"ATTRIBUTE_DESIGNATOR_TYPE" ' 35 31 'class variable') 36 32 … … 41 37 elem = super(MatchReaderBase, self)._parse(obj) 42 38 43 cls= self.__class__.TYPE44 match = cls()39 xacmlType = self.__class__.TYPE 40 match = xacmlType() 45 41 46 42 localName = QName.getLocalPart(elem.tag) 47 if localName != cls.ELEMENT_LOCAL_NAME:43 if localName != xacmlType.ELEMENT_LOCAL_NAME: 48 44 raise XMLParseError("No \"%s\" element found" % 49 cls.ELEMENT_LOCAL_NAME)45 xacmlType.ELEMENT_LOCAL_NAME) 50 46 51 47 # Unpack *required* attributes from top-level element 52 48 attributeValues = [] 53 for attributeName in ( cls.MATCH_ID_ATTRIB_NAME, ):49 for attributeName in (xacmlType.MATCH_ID_ATTRIB_NAME, ): 54 50 attributeValue = elem.attrib.get(attributeName) 55 51 if attributeValue is None: 56 52 raise XMLParseError('No "%s" attribute found in "%s" ' 57 53 'element' % (attributeName, 58 cls.ELEMENT_LOCAL_NAME))54 xacmlType.ELEMENT_LOCAL_NAME)) 59 55 60 56 attributeValues.append(attributeValue) … … 63 59 64 60 # Assign specific attribute designator type from derived class 65 attributeDesignator ReaderType = \66 self.__class__.ATTRIBUTE_DESIGNATOR_READER_TYPE67 attributeDesignatorType = attributeDesignatorReaderType.TYPE68 61 attributeDesignatorType = self.__class__.ATTRIBUTE_DESIGNATOR_TYPE 62 attributeDesignatorReaderType = ReaderFactory.getReader( 63 attributeDesignatorType) 64 69 65 # Parse match elements 70 66 for childElem in elem: 71 67 localName = QName.getLocalPart(childElem.tag) 72 68 73 if localName == cls.ATTRIBUTE_VALUE_ELEMENT_LOCAL_NAME: 69 if localName == xacmlType.ATTRIBUTE_VALUE_ELEMENT_LOCAL_NAME: 70 AttributeValueReader = ReaderFactory.getReader(AttributeValue) 74 71 match.attributeValue = AttributeValueReader.parse(childElem) 75 72 … … 78 75 raise XMLParseError("XACML %r child element may only be " 79 76 "either a %r or %r element NOT both" % 80 ( cls.ELEMENT_LOCAL_NAME,77 (xacmlType.ELEMENT_LOCAL_NAME, 81 78 attributeDesignatorType.ELEMENT_LOCAL_NAME, 82 79 AttributeSelector.ELEMENT_LOCAL_NAME)) … … 89 86 raise XMLParseError("XACML %r child element may only be " 90 87 "either a %r or %r element NOT both" % 91 ( cls.ELEMENT_LOCAL_NAME,88 (xacmlType.ELEMENT_LOCAL_NAME, 92 89 attributeDesignatorType.ELEMENT_LOCAL_NAME, 93 90 AttributeSelector.ELEMENT_LOCAL_NAME)) 94 91 92 AttributeSelectorReader = ReaderFactory.getReader( 93 AttributeSelector) 94 95 95 match.attributeSelector = AttributeSelectorReader.parse( 96 96 childElem) … … 98 98 raise XMLParseError("XACML %r child element name %r not " 99 99 "recognised" % 100 ( cls.MATCH_TYPE.ELEMENT_LOCAL_NAME,100 (xacmlType.MATCH_TYPE.ELEMENT_LOCAL_NAME, 101 101 localName)) 102 102 103 103 return match 104 104 105 106 105 107 106 class SubjectMatchReader(MatchReaderBase):107 """ElementTree based parser for XACML SubjectMatch"""108 TYPE = SubjectMatch109 ATTRIBUTE_DESIGNATOR_READER_TYPE = SubjectAttributeDesignatorReader -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/policyreader.py
r6751 r6752 17 17 from ndg.xacml.parsers.etree import QName 18 18 from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 19 from ndg.xacml.parsers.etree.targetreader import TargetReader 20 from ndg.xacml.parsers.etree.rulereader import RuleReader 19 from ndg.xacml.parsers.etree.factory import ReaderFactory 21 20 22 21 … … 32 31 33 32 # XACML type to instantiate 34 cls= PolicyReader.TYPE35 policy = cls()33 xacmlType = PolicyReader.TYPE 34 policy = xacmlType() 36 35 37 36 localName = QName.getLocalPart(elem.tag) 38 if localName != cls.ELEMENT_LOCAL_NAME:37 if localName != xacmlType.ELEMENT_LOCAL_NAME: 39 38 raise XMLParseError("No \"%s\" element found" % 40 cls.ELEMENT_LOCAL_NAME)39 xacmlType.ELEMENT_LOCAL_NAME) 41 40 42 41 # Unpack *required* attributes from top-level element 43 42 attributeValues = [] 44 for attributeName in ( cls.POLICY_ID_ATTRIB_NAME,45 cls.RULE_COMBINING_ALG_ID_ATTRIB_NAME):43 for attributeName in (xacmlType.POLICY_ID_ATTRIB_NAME, 44 xacmlType.RULE_COMBINING_ALG_ID_ATTRIB_NAME): 46 45 attributeValue = elem.attrib.get(attributeName) 47 46 if attributeValue is None: … … 49 48 'element' % 50 49 (attributeName, 51 cls.ELEMENT_LOCAL_NAME))50 xacmlType.ELEMENT_LOCAL_NAME)) 52 51 53 52 attributeValues.append(attributeValue) … … 57 56 # Defaults to XACML version 1.0 58 57 # TODO: version check 59 policy.version = (elem.attrib.get( cls.VERSION_ATTRIB_NAME) or60 cls.DEFAULT_XACML_VERSION)58 policy.version = (elem.attrib.get(xacmlType.VERSION_ATTRIB_NAME) or 59 xacmlType.DEFAULT_XACML_VERSION) 61 60 62 61 # Parse sub-elements … … 64 63 localName = QName.getLocalPart(childElem.tag) 65 64 66 if localName == cls.DESCRIPTION_LOCAL_NAME:65 if localName == xacmlType.DESCRIPTION_LOCAL_NAME: 67 66 if childElem.text is not None: 68 67 policy.description = childElem.text.strip() 69 68 70 elif localName == cls.POLICY_DEFAULTS_LOCAL_NAME:69 elif localName == xacmlType.POLICY_DEFAULTS_LOCAL_NAME: 71 70 raise NotImplementedError() 72 71 73 72 elif localName == Target.ELEMENT_LOCAL_NAME: 73 TargetReader = ReaderFactory.getReader(Target) 74 74 policy.target = TargetReader.parse(childElem) 75 75 76 elif localName == cls.COMBINER_PARAMETERS_LOCAL_NAME:76 elif localName == xacmlType.COMBINER_PARAMETERS_LOCAL_NAME: 77 77 raise NotImplementedError() 78 78 79 elif localName == cls.RULE_COMBINER_PARAMETERS_LOCAL_NAME:79 elif localName == xacmlType.RULE_COMBINER_PARAMETERS_LOCAL_NAME: 80 80 raise NotImplementedError() 81 81 82 82 elif localName == VariableDefinition.ELEMENT_LOCAL_NAME: 83 VariableDefinitionReader = ReaderFactory.getReader( 84 VariableDefinition) 83 85 variableDefinition = VariableDefinitionReader.parse(childElem) 84 86 85 87 elif localName == Rule.ELEMENT_LOCAL_NAME: 88 RuleReader = ReaderFactory.getReader(Rule) 86 89 policy.rules.append(RuleReader.parse(childElem)) 87 90 88 elif localName == cls.OBLIGATIONS_LOCAL_NAME:91 elif localName == xacmlType.OBLIGATIONS_LOCAL_NAME: 89 92 raise NotImplementedError() 90 93 -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/reader.py
r6750 r6752 1 '''2 Created on 15 Mar 20103 4 @author: pjkersha5 '''6 import logging7 log = logging.getLogger(__name__)8 1 """NDG XACML ElementTree reader module containing reader base class 9 2 … … 17 10 __contact__ = "Philip.Kershaw@stfc.ac.uk" 18 11 __revision__ = "$Id: $" 12 import logging 13 log = logging.getLogger(__name__) 14 19 15 from xml.etree import ElementTree 20 16 -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/resourcereader.py
r6751 r6752 11 11 __revision__ = "$Id: $" 12 12 from ndg.xacml.core.resource import Resource 13 from ndg.xacml.parsers.etree.subjectreader import AbstractTargetChildReader13 from ndg.xacml.parsers.etree.subjectreader import TargetChildReader 14 14 15 15 16 class ResourceReader( AbstractTargetChildReader):16 class ResourceReader(TargetChildReader): 17 17 '''ElementTree based XACML Rule parser 18 18 @cvar TYPE: XACML type to instantiate from parsed object -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/rulereader.py
r6751 r6752 16 16 from ndg.xacml.parsers.etree import QName 17 17 from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 18 from ndg.xacml.parsers.etree.conditionreader import ConditionReader 19 from ndg.xacml.parsers.etree.targetreader import TargetReader 18 from ndg.xacml.parsers.etree.factory import ReaderFactory 20 19 21 20 … … 32 31 elem = super(RuleReader, self)._parse(obj) 33 32 34 cls= RuleReader.TYPE35 rule = cls()33 xacmlType = RuleReader.TYPE 34 rule = xacmlType() 36 35 37 36 localName = QName.getLocalPart(elem.tag) 38 if localName != cls.ELEMENT_LOCAL_NAME:37 if localName != xacmlType.ELEMENT_LOCAL_NAME: 39 38 raise XMLParseError("No \"%s\" element found" % 40 cls.ELEMENT_LOCAL_NAME)39 xacmlType.ELEMENT_LOCAL_NAME) 41 40 42 41 # Unpack *required* attributes from top-level element 43 42 attributeValues = [] 44 for attributeName in ( cls.RULE_ID_ATTRIB_NAME, cls.EFFECT_ATTRIB_NAME):43 for attributeName in (xacmlType.RULE_ID_ATTRIB_NAME, xacmlType.EFFECT_ATTRIB_NAME): 45 44 attributeValue = elem.attrib.get(attributeName) 46 45 if attributeValue is None: … … 48 47 'element' % 49 48 (attributeName, 50 cls.ELEMENT_LOCAL_NAME))49 xacmlType.ELEMENT_LOCAL_NAME)) 51 50 52 51 attributeValues.append(attributeValue) … … 58 57 localName = QName.getLocalPart(childElem.tag) 59 58 60 if localName == cls.DESCRIPTION_LOCAL_NAME:59 if localName == xacmlType.DESCRIPTION_LOCAL_NAME: 61 60 if childElem.text is not None: 62 61 rule.description = childElem.text.strip() 63 62 64 63 elif localName == Condition.ELEMENT_LOCAL_NAME: 64 ConditionReader = ReaderFactory.getReader(Condition) 65 65 rule.condition = ConditionReader.parse(childElem) 66 66 67 67 elif localName == Target.ELEMENT_LOCAL_NAME: 68 TargetReader = ReaderFactory.getReader(Target) 68 69 rule.target = TargetReader.parse(childElem) 69 70 -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/subjectreader.py
r6751 r6752 11 11 __revision__ = "$Id: $" 12 12 from ndg.xacml.core.subject import Subject 13 from ndg.xacml.parsers import XMLParseError 14 from ndg.xacml.parsers.etree import QName 15 from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 16 from ndg.xacml.parsers.etree.matchreader import SubjectMatchReader 17 18 19 class AbstractTargetChildReader(ETreeAbstractReader): 20 '''ElementTree based XACML generic target child element parser 21 @cvar TYPE: XACML type to instantiate from parsed object 22 @type string: type 23 ''' 24 25 def __call__(self, obj): 26 """Parse subject object""" 27 elem = super(AbstractTargetChildReader, self)._parse(obj) 28 29 cls = self.__class__.TYPE 30 targetChild = cls() 31 32 localName = QName.getLocalPart(elem.tag) 33 if localName != cls.ELEMENT_LOCAL_NAME: 34 raise XMLParseError("No \"%s\" element found" % 35 cls.ELEMENT_LOCAL_NAME) 36 37 # Parse match elements 38 for childElem in elem: 39 localName = QName.getLocalPart(childElem.tag) 40 41 if localName == cls.MATCH_TYPE.ELEMENT_LOCAL_NAME: 42 targetChild.matches.append(self.__class__.parse(childElem)) 43 44 else: 45 raise XMLParseError("XACML %r child element name %r not " 46 "recognised" % (cls.ELEMENT_LOCAL_NAME, 47 localName)) 48 49 return targetChild 13 from ndg.xacml.parsers.etree.targetchildreader import TargetChildReader 50 14 51 15 52 class SubjectReader( AbstractTargetChildReader):16 class SubjectReader(TargetChildReader): 53 17 '''ElementTree based XACML Rule parser 54 18 @cvar TYPE: XACML type to instantiate from parsed object -
TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/targetreader.py
r6750 r6752 11 11 __revision__ = "$Id: $" 12 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 13 17 from ndg.xacml.parsers import XMLParseError 14 18 from ndg.xacml.parsers.etree import QName 15 19 from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 16 from ndg.xacml.parsers.etree.subjectreader import SubjectReader 17 from ndg.xacml.parsers.etree.actionreader import ActionReader 18 from ndg.xacml.parsers.etree.resourcereader import ResourceReader 19 from ndg.xacml.parsers.etree.environmentreader import EnvironmentReader 20 from ndg.xacml.parsers.etree.factory import ReaderFactory 20 21 21 22 … … 30 31 elem = super(TargetReader, self)._parse(obj) 31 32 32 cls= TargetReader.TYPE33 target = cls()33 xacmlType = TargetReader.TYPE 34 target = xacmlType() 34 35 35 36 localName = QName.getLocalPart(elem.tag) 36 if localName != cls.ELEMENT_LOCAL_NAME:37 if localName != xacmlType.ELEMENT_LOCAL_NAME: 37 38 raise XMLParseError('No "%s" element found' % 38 cls.ELEMENT_LOCAL_NAME)39 xacmlType.ELEMENT_LOCAL_NAME) 39 40 40 41 # Parse sub-elements … … 42 43 localName = QName.getLocalPart(childElem.tag) 43 44 44 if localName == cls.SUBJECTS_ELEMENT_LOCAL_NAME:45 if localName == xacmlType.SUBJECTS_ELEMENT_LOCAL_NAME: 45 46 for subjElem in childElem: 47 SubjectReader = ReaderFactory.getReader(Subject) 46 48 target.subjects.append(SubjectReader.parse(subjElem)) 47 49 48 elif localName == cls.RESOURCES_ELEMENT_LOCAL_NAME:50 elif localName == xacmlType.RESOURCES_ELEMENT_LOCAL_NAME: 49 51 for resourceElem in childElem: 52 ResourceReader = ReaderFactory.getReader(Resource) 50 53 target.resources.append(ResourceReader.parse(resourceElem)) 51 54 52 elif localName == cls.ACTIONS_ELEMENT_LOCAL_NAME:55 elif localName == xacmlType.ACTIONS_ELEMENT_LOCAL_NAME: 53 56 for targetElem in childElem: 57 ActionReader = ReaderFactory.getReader(Action) 54 58 target.actions.append(ActionReader.parse(targetElem)) 55 59 56 elif localName == cls.ENVIRONMENTS_ELEMENT_LOCAL_NAME:60 elif localName == xacmlType.ENVIRONMENTS_ELEMENT_LOCAL_NAME: 57 61 for environElem in childElem: 62 EnvironmentReader = ReaderFactory.getReader(Environment) 58 63 target.environments.append(EnvironmentReader.parse( 59 64 environElem)) -
TI12-security/trunk/NDG_XACML/ndg/xacml/test/test_xacml.py
r6751 r6752 13 13 from os import path 14 14 15 from ndg.xacml.parsers.etree.policyreader import PolicyReader 15 from ndg.xacml.core.policy import Policy 16 from ndg.xacml.parsers.etree.factory import ReaderFactory 16 17 17 18 … … 24 25 25 26 def test01ETreeParseRule1Policy(self): 27 PolicyReader = ReaderFactory.getReader(Policy) 26 28 policy = PolicyReader.parse(XACMLTestCase.XACML_TEST1_FILEPATH) 27 29 self.assert_(policy) … … 72 74 73 75 def test02ETreeParseRule2Policy(self): 76 PolicyReader = ReaderFactory.getReader(Policy) 74 77 policy = PolicyReader.parse(XACMLTestCase.XACML_TEST2_FILEPATH) 75 78 self.assert_(policy)
Note: See TracChangeset
for help on using the changeset viewer.