libraries/edge/opensearch/datacastingresponsebysolr.py (47 lines of code) (raw):
import json
import logging
from edge.opensearch.fgdcresponse import FgdcResponse
from edge.dateutility import DateUtility
class DatacastingResponseBySolr(FgdcResponse):
def __init__(self, portalUrl, archivedWithin):
super(DatacastingResponseBySolr, self).__init__()
self.addNamespace("datacasting", "http://datacasting.jpl.nasa.gov/datacasting")
self.addNamespace("georss", "http://www.georss.org/georss")
self.addNamespace("gml", "http://www.opengis.net/gml")
self.portalUrl = portalUrl
self.archivedWithin = archivedWithin
def generate(self, solrDatasetResponse, solrGranuleResponse = None, pretty=False):
self._populate(solrDatasetResponse, solrGranuleResponse)
return super(DatacastingResponseBySolr, self).generate(pretty)
def _populate(self, solrDatasetResponse, solrGranuleResponse = None):
if solrDatasetResponse is not None:
solrJson = json.loads(solrDatasetResponse)
logging.debug('dataset count: '+str(len(solrJson['response']['docs'])))
if len(solrJson['response']['docs']) == 1:
# ok now populate variables!
doc = solrJson['response']['docs'][0]
self.variables['doc'] = doc
# Format dates
try:
self.variables['DatasetCitation_ReleaseYear'] = DateUtility.convertTimeLong(doc['DatasetCitation-ReleaseDateLong'][0], '%Y')
except:
pass
# Link to dataset portal page
self.variables['DatasetPortalPage'] = self.portalUrl+'/'+doc['Dataset-ShortName'][0]
# Set default pub date to x hours ago because we cast all granules archived within the last x hours
self.variables['PubDate'] = DateUtility.pastDateRFC822(self.archivedWithin)
else:
raise Exception('No dataset found')
if solrGranuleResponse is not None:
solrGranuleJson = json.loads(solrGranuleResponse)
logging.debug('granule count: '+str(len(solrGranuleJson['response']['docs'])))
pubDate = 0
for doc in solrGranuleJson['response']['docs']:
if (doc['Granule-ArchiveTimeLong'][0] > pubDate):
pubDate = doc['Granule-ArchiveTimeLong'][0]
self._populateItem(solrGranuleResponse, doc, None)
if pubDate != 0:
# Set pub date to latest granule archive date
self.variables['PubDate'] = DateUtility.convertTimeLongToRFC822(pubDate)
self.variables['granules'] = solrGranuleJson['response']['docs']
else:
raise Exception('No granules found')
def _populateChannel(self, solrResponse):
pass
def _populateItem(self, solrResponse, doc, item):
pass