Ignore:
Timestamp:
12/04/10 16:40:24 (10 years ago)
Author:
pjkersha
Message:

Fixed AttributeValueReader? to handler attribute value derived types correctly.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/attributevaluereader.py

    r6754 r6802  
    1010__contact__ = "Philip.Kershaw@stfc.ac.uk" 
    1111__revision__ = "$Id: $" 
    12 from ndg.xacml.core.attributevalue import AttributeValue 
     12from ndg.xacml.core.attributevalue import (AttributeValue,  
     13                                           AttributeValueClassFactory) 
    1314from ndg.xacml.parsers import XMLParseError 
     15from ndg.xacml.parsers.etree import QName 
    1416from ndg.xacml.parsers.etree.expressionreader import ExpressionReader 
    1517 
     
    1921    ''' 
    2022    TYPE = AttributeValue 
     23    FACTORY = AttributeValueClassFactory() 
     24     
     25    def __call__(self, obj): 
     26        """Parse *AttributeValue type element - override this method instead of 
     27        _parseExtension since AttributeValue class is virtual.  A sub-type can 
     28        be instantiated only once the data type attribute is parsed 
     29        """ 
     30        elem = super(AttributeValueReader, self)._parse(obj) 
     31         
     32        xacmlType = self.__class__.TYPE 
     33        localName = QName.getLocalPart(elem.tag) 
     34        if localName != xacmlType.ELEMENT_LOCAL_NAME: 
     35            raise XMLParseError("No \"%s\" element found" %  
     36                                xacmlType.ELEMENT_LOCAL_NAME) 
     37             
     38        # Unpack *required* attributes from top-level element 
     39        elemAttributeValues = [] 
     40        for attributeName in (xacmlType.DATA_TYPE_ATTRIB_NAME,): 
     41            attributeValue = elem.attrib.get(attributeName) 
     42            if attributeValue is None: 
     43                raise XMLParseError('No "%s" attribute found in "%s" element' % 
     44                                    (attributeName,  
     45                                     xacmlType.ELEMENT_LOCAL_NAME)) 
     46                 
     47            elemAttributeValues.append(attributeValue) 
     48              
     49        attributeValueClass = self.__class__.FACTORY(elemAttributeValues[0]) 
     50        attributeValue = attributeValueClass() 
     51        attributeValue.dataType = elemAttributeValues[0] 
     52        self._parseExtension(elem, attributeValue) 
     53         
     54        return attributeValue 
    2155     
    2256    def _parseExtension(self, elem, attributeValue): 
    23         """Implement abstract method to complete parsing of attribute value""" 
    24              
    2557        if elem.text is None: 
    2658            raise XMLParseError('No attribute value element found parsing %r' %  
    2759                                AttributeValueReader.TYPE.ELEMENT_LOCAL_NAME)  
    28                
    29         attributeValue.value = elem.text.strip() 
     60             
     61        attributeValue.value = elem.text 
    3062     
Note: See TracChangeset for help on using the changeset viewer.