Beispiel #1
0
    def entry2odata(self, entry_node, entity_class):
        '''
        parses lxml <entry> node to odata struct
        '''

        node = entry_node

        tmpEntity = ODataEntity()
        tmpEntity.entity_class = entity_class

        content_nodes = node.xpath('a:content', namespaces={'a': ATOM_NS})
        if len(content_nodes):
            content_node = content_nodes[0]
            if content_node.get('type') == 'text/xml':
                tmpEntity.data = splunk.rest.format.nodeToPrimitive(
                    content_node[0])
            else:
                tmpEntity.data = {'__text': content_node.text}

        # move the metadata around
        if isinstance(tmpEntity.data, dict):
            to_delete = []
            for k in tmpEntity.data:

                if k.startswith('eai:') and k != 'eai:data':
                    to_delete.append(k)
                    if hasattr(tmpEntity.metadata, k[4:]):
                        setattr(tmpEntity.metadata, k[4:], tmpEntity.data[k])
                    else:
                        logger.warn('encountered unknown EAI attribute: %s' %
                                    k)

            # the one exception
            if 'eai:data' in tmpEntity.data:
                tmpEntity.data['rawdata'] = tmpEntity.data['eai:data']
                to_delete.append('eai:data')

            for k in to_delete:
                del tmpEntity.data[k]

        # pull in all the links
        for link in node.xpath('a:link', namespaces={'a': ATOM_NS}):
            tmpEntity.metadata.links.append({
                'href': link.get('href'),
                'rel': link.get('rel')
            })

        # set other randoms
        tmpEntity.id = node.xpath('a:id', namespaces={'a': ATOM_NS})[0].text
        tmpEntity.name = node.xpath('a:title', namespaces={'a':
                                                           ATOM_NS})[0].text

        return tmpEntity
Beispiel #2
0
    def entry2odata(self, entry_node, entity_class):
        """
        parses lxml <entry> node to odata struct
        """

        node = entry_node

        tmpEntity = ODataEntity()
        tmpEntity.entity_class = entity_class

        content_nodes = node.xpath("a:content", namespaces={"a": ATOM_NS})
        if len(content_nodes):
            content_node = content_nodes[0]
            if content_node.get("type") == "text/xml":
                tmpEntity.data = splunk.rest.format.nodeToPrimitive(content_node[0])
            else:
                tmpEntity.data = {"__text": content_node.text}

        # move the metadata around
        if isinstance(tmpEntity.data, dict):
            to_delete = []
            for k in tmpEntity.data:

                if k.startswith("eai:") and k != "eai:data":
                    to_delete.append(k)
                    if hasattr(tmpEntity.metadata, k[4:]):
                        setattr(tmpEntity.metadata, k[4:], tmpEntity.data[k])
                    else:
                        logger.warn("encountered unknown EAI attribute: %s" % k)

            # the one exception
            if "eai:data" in tmpEntity.data:
                tmpEntity.data["rawdata"] = tmpEntity.data["eai:data"]
                to_delete.append("eai:data")

            for k in to_delete:
                del tmpEntity.data[k]

        # pull in all the links
        for link in node.xpath("a:link", namespaces={"a": ATOM_NS}):
            tmpEntity.metadata.links.append({"href": link.get("href"), "rel": link.get("rel")})

        # set other randoms
        tmpEntity.id = node.xpath("a:id", namespaces={"a": ATOM_NS})[0].text
        tmpEntity.name = node.xpath("a:title", namespaces={"a": ATOM_NS})[0].text

        return tmpEntity
    def entry2odata(self, entry_node, entity_class):
        '''
        parses lxml <entry> node to odata struct
        '''
        
        node = entry_node
        
        tmpEntity = ODataEntity()
        tmpEntity.entity_class = entity_class
        
        tmpEntity.data = {}
        content_xpath = node.xpath('a:content', namespaces={'a': ATOM_NS})
        if (len(content_xpath) > 0):
            if (len(content_xpath[0]) > 0):
                content_node = content_xpath[0][0]
                tmpEntity.data = splunk.rest.format.nodeToPrimitive(content_node)
            else:
                tmpEntity.data = {"data": content_xpath[0].text}
    
        # move the metadata around
        if isinstance(tmpEntity.data, dict):
            to_delete = []
            for k in tmpEntity.data:

                if k.startswith('eai:') and k != 'eai:data':
                    to_delete.append(k)
                    if hasattr(tmpEntity.metadata, k[4:]):
                        setattr(tmpEntity.metadata, k[4:], tmpEntity.data[k])
                    else:
                        logger.warn('encountered unknown EAI attribute: %s' % k)

            # the one exception
            if 'eai:data' in tmpEntity.data:
                tmpEntity.data['rawdata'] = tmpEntity.data['eai:data']
                to_delete.append('eai:data')

            for k in to_delete:
                del tmpEntity.data[k]
            
        # pull in all the links
        for link in node.xpath('a:link', namespaces={'a': ATOM_NS}):
            tmpEntity.metadata.links.append({
                'href': link.get('href'),
                'rel': link.get('rel')
            })
        
        # set other randoms
        tmpEntity.id = node.xpath('a:id', namespaces={'a': ATOM_NS})[0].text
        tmpEntity.name = tmpEntity.data.get("name", node.xpath('a:title', namespaces={'a': ATOM_NS})[0].text)
        
        published_info = node.xpath('a:published', namespaces={'a': ATOM_NS})
        if published_info:
            tmpEntity.data["published"] = published_info[0].text
            
        updated_info = node.xpath('a:updated', namespaces={'a': ATOM_NS})
        if updated_info:
            tmpEntity.data["updated"] = updated_info[0].text
            
        author_info = node.xpath('a:author/a:name', namespaces={'a': ATOM_NS})
        if author_info:
            tmpEntity.data["author"] = author_info[0].text
        
        return tmpEntity
    def entry2odata(self, entry_node, entity_class):
        '''
        parses lxml <entry> node to odata struct
        '''

        node = entry_node

        tmpEntity = ODataEntity()
        tmpEntity.entity_class = entity_class

        tmpEntity.data = {}
        content_xpath = node.xpath('a:content', namespaces={'a': ATOM_NS})
        if (len(content_xpath) > 0):
            if (len(content_xpath[0]) > 0):
                content_node = content_xpath[0][0]
                tmpEntity.data = splunk.rest.format.nodeToPrimitive(
                    content_node)
            else:
                tmpEntity.data = {"data": content_xpath[0].text}

        # move the metadata around
        if isinstance(tmpEntity.data, dict):
            to_delete = []
            for k in tmpEntity.data:

                if k.startswith('eai:') and k != 'eai:data':
                    to_delete.append(k)
                    if hasattr(tmpEntity.metadata, k[4:]):
                        setattr(tmpEntity.metadata, k[4:], tmpEntity.data[k])
                    else:
                        logger.warn('encountered unknown EAI attribute: %s' %
                                    k)

            # the one exception
            if 'eai:data' in tmpEntity.data:
                tmpEntity.data['rawdata'] = tmpEntity.data['eai:data']
                to_delete.append('eai:data')

            for k in to_delete:
                del tmpEntity.data[k]

        # pull in all the links
        for link in node.xpath('a:link', namespaces={'a': ATOM_NS}):
            tmpEntity.metadata.links.append({
                'href': link.get('href'),
                'rel': link.get('rel')
            })

        # set other randoms
        tmpEntity.id = node.xpath('a:id', namespaces={'a': ATOM_NS})[0].text
        tmpEntity.name = tmpEntity.data.get(
            "name",
            node.xpath('a:title', namespaces={'a': ATOM_NS})[0].text)

        published_info = node.xpath('a:published', namespaces={'a': ATOM_NS})
        if published_info:
            tmpEntity.data["published"] = published_info[0].text

        updated_info = node.xpath('a:updated', namespaces={'a': ATOM_NS})
        if updated_info:
            tmpEntity.data["updated"] = updated_info[0].text

        author_info = node.xpath('a:author/a:name', namespaces={'a': ATOM_NS})
        if author_info:
            tmpEntity.data["author"] = author_info[0].text

        return tmpEntity