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 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