Exemple #1
0
 def parse(self, node):
     '''Parse the XML DOM node as a query document.
     '''
     if 'query' != node.nodeName:
         raise ValueError('Expected query but got "%s"' % node.nodeName)
     self.mimeAccept, self.results = [], []
     for child in node.childNodes:
         if child.nodeType == xml.dom.Node.ELEMENT_NODE:
             if child.nodeName == u'queryAttributes':
                 self.header = QueryHeader(node=child)
             elif child.nodeName == u'resultModeID':
                 self.resultModeID = xmlutils.text(child)
             elif child.nodeName == u'queryPropogationType':
                 self.propType = xmlutils.text(child)
             elif child.nodeName == u'queryPropogationLevels':
                 self.propLevels = xmlutils.text(child)
             elif child.nodeName == u'queryMimeAccept':
                 self.mimeAccept.append(xmlutils.text(child))
             elif child.nodeName == u'queryMaxResults':
                 self.maxResults = int(xmlutils.text(child))
             elif child.nodeName == u'queryKWQString':
                 self.keywordQuery = xmlutils.text(child)
             elif child.nodeName == u'querySelectSet':
                 self.selects = _parseQueryElements(child)
             elif child.nodeName == u'queryFromSet':
                 self.froms = _parseQueryElements(child)
             elif child.nodeName == u'queryWhereSet':
                 self.wheres = _parseQueryElements(child)
             elif child.nodeName == u'queryResultSet':
                 self.resultSet = QueryResult(node=child)
Exemple #2
0
 def parse(self, node):
     '''Parse the XML DOM node as a query document.
     '''
     if 'query' != node.nodeName:
         raise ValueError('Expected query but got "%s"' % node.nodeName)
     self.mimeAccept, self.results = [], []
     for child in node.childNodes:
         if child.nodeType == xml.dom.Node.ELEMENT_NODE:
             if child.nodeName == u'queryAttributes':
                 self.header = QueryHeader(node=child)
             elif child.nodeName == u'resultModeID':
                 self.resultModeID = xmlutils.text(child)
             elif child.nodeName == u'queryPropogationType':
                 self.propType = xmlutils.text(child)
             elif child.nodeName == u'queryPropogationLevels':
                 self.propLevels = xmlutils.text(child)
             elif child.nodeName == u'queryMimeAccept':
                 self.mimeAccept.append(xmlutils.text(child))
             elif child.nodeName == u'queryMaxResults':
                 self.maxResults = int(xmlutils.text(child))
             elif child.nodeName == u'queryKWQString':
                 self.keywordQuery = xmlutils.text(child)
             elif child.nodeName == u'querySelectSet':
                 self.selects = _parseQueryElements(child)
             elif child.nodeName == u'queryFromSet':
                 self.froms = _parseQueryElements(child)
             elif child.nodeName == u'queryWhereSet':
                 self.wheres = _parseQueryElements(child)
             elif child.nodeName == u'queryResultSet':
                 self.resultSet = QueryResult(node=child)
Exemple #3
0
def _parseProfileElement(node):
    '''Construct an appropriate profile element from the given DOM node.
    '''
    if node.nodeName != u'profElement':
        raise ValueError('Expected profElement element but got "%s"' % node.nodeName)
    settings = dict(elemId=u'UNKNOWN', elemDesc=u'UNKNOWN', elemType=u'UNKNOWN', elemUnit=u'UNKNOWN', elemEnumFlag=u'F',
        elemComment=u'UNKNOWN')
    values, syns = [], []
    for child in filter(lambda node: node.nodeType == xml.dom.Node.ELEMENT_NODE, node.childNodes):
        text = xmlutils.text(child)
        if child.nodeName == u'elemValue':
            values.append(text)
        elif child.nodeName == u'elemSynonym':
            syns.append(text)
        else:
            settings[str(child.nodeName)] = text
    if 'elemName' not in settings:
        raise ValueError('profElement requires elemName but none specified')
    if 'elemEnumFlag' not in settings:
        raise ValueError('profElement requires elemEnumFlag but none specified')
        
    # Normally I'd treat only those XML elements where elemEnumFlag as T as possibly producing
    # unspecified or enumerated, and F producing *only* ranged elements.  But PDS profile
    # servers are producing profile elements with F for elemEnumFlag and yet NO elemMinValue
    # and elemMaxValue.  If they're using the Java profile code, I'd call that a bug in that
    # code.  If they're not, then I'd say they're producing profiles incorrectly.
    if settings['elemEnumFlag'] == 'T':
        if len(values) == 0:
            return UnspecifiedProfileElement(settings['elemName'], settings['elemDesc'], settings['elemType'],
                settings['elemUnit'], syns, settings['elemComment'])
        else:
            return EnumeratedProfileElement(settings['elemName'], settings['elemDesc'], settings['elemType'],
                settings['elemUnit'], syns, settings['elemComment'], values)
    else:
        if 'elemMinValue' not in settings or 'elemMaxValue' not in settings:
            return UnspecifiedProfileElement(settings['elemName'], settings['elemDesc'], settings['elemType'],
                settings['elemUnit'], syns, settings['elemComment'])
        else:
            return RangedProfileElement(settings['elemName'], settings['elemDesc'], settings['elemType'],
            settings['elemUnit'], syns, settings['elemComment'], float(settings['elemMinValue']),
            float(settings['elemMaxValue']))
Exemple #4
0
def _parseProfileElement(node):
    '''Construct an appropriate profile element from the given DOM node.
    '''
    if node.nodeName != u'profElement':
        raise ValueError('Expected profElement element but got "%s"' %
                         node.nodeName)
    settings = dict(elemId=u'UNKNOWN',
                    elemDesc=u'UNKNOWN',
                    elemType=u'UNKNOWN',
                    elemUnit=u'UNKNOWN',
                    elemEnumFlag=u'F',
                    elemComment=u'UNKNOWN')
    values, syns = [], []
    for child in filter(
            lambda node: node.nodeType == xml.dom.Node.ELEMENT_NODE,
            node.childNodes):
        text = xmlutils.text(child)
        if child.nodeName == u'elemValue':
            values.append(text)
        elif child.nodeName == u'elemSynonym':
            syns.append(text)
        else:
            settings[str(child.nodeName)] = text
    if 'elemName' not in settings:
        raise ValueError('profElement requires elemName but none specified')
    if 'elemEnumFlag' not in settings:
        raise ValueError(
            'profElement requires elemEnumFlag but none specified')

    # Normally I'd treat only those XML elements where elemEnumFlag as T as possibly producing
    # unspecified or enumerated, and F producing *only* ranged elements.  But PDS profile
    # servers are producing profile elements with F for elemEnumFlag and yet NO elemMinValue
    # and elemMaxValue.  If they're using the Java profile code, I'd call that a bug in that
    # code.  If they're not, then I'd say they're producing profiles incorrectly.
    if settings['elemEnumFlag'] == 'T':
        if len(values) == 0:
            return UnspecifiedProfileElement(settings['elemName'],
                                             settings['elemDesc'],
                                             settings['elemType'],
                                             settings['elemUnit'], syns,
                                             settings['elemComment'])
        else:
            return EnumeratedProfileElement(settings['elemName'],
                                            settings['elemDesc'],
                                            settings['elemType'],
                                            settings['elemUnit'], syns,
                                            settings['elemComment'], values)
    else:
        if 'elemMinValue' not in settings or 'elemMaxValue' not in settings:
            return UnspecifiedProfileElement(settings['elemName'],
                                             settings['elemDesc'],
                                             settings['elemType'],
                                             settings['elemUnit'], syns,
                                             settings['elemComment'])
        else:
            return RangedProfileElement(settings['elemName'],
                                        settings['elemDesc'],
                                        settings['elemType'],
                                        settings['elemUnit'], syns,
                                        settings['elemComment'],
                                        float(settings['elemMinValue']),
                                        float(settings['elemMaxValue']))