def _get_cmr_response()

in libraries/edge/opensearch/solrcmrtemplateresponse.py [0:0]


    def _get_cmr_response(self, url, cmr):

        # Execute the curl command and load the json object.
        buffer = StringIO()
        try:
            c = pycurl.Curl()
            c.setopt(c.URL, url)
            c.setopt(c.WRITEDATA, buffer)
            c.perform()
            c.close()
        except:
            output = '{ "errors": "%s" }' %(c.errstr())
            c.close()
        else:
            try:
                output = json.loads(buffer.getvalue())
            except:
                output = '{ "errors": "json loads failed: [%s]" }' %(buffer.getvalue())
     
        # Format the output if there are errors.
        response = {}
        if list(output.keys()).__contains__('errors'):
            response['entry'] = []
            response['updated'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            response['id'] = url
            if url.find('collections') != -1:
                response['title'] = 'ECHO dataset metadata'
            elif url.find('granules') != -1:
                response['title'] = 'ECHO granule metadata'
            response['errors'] = output['errors'][0]
        else:
            response = output

        try:

            if list(response.keys()).__contains__('errors'):
                return(response)
    
            if not(list(response.keys()).__contains__('feed')):
                raise ValueError('no "feed" in the cmr response')
            if not(list(response['feed'].keys()).__contains__('entry')):
                raise ValueError('no "entry" in the cmr response')
            if not(list(response['feed'].keys()).__contains__('updated')):
                raise ValueError('no "updated" key in the cmr response')
            if not(list(response['feed'].keys()).__contains__('id')):
                raise ValueError('no "id" key in the cmr response')
            if not(list(response['feed'].keys()).__contains__('title')):
                raise ValueError('no "id" key in the cmr response')
      
            # Create lists if they do not exists.
            if not(list(cmr.keys()).__contains__('cmr_search_updated')):
                cmr['cmr_search_updated'] = []
            if not(list(cmr.keys()).__contains__('cmr_search_url')):
                cmr['cmr_search_url'] = []
            if not(list(cmr.keys()).__contains__('cmr_search_title')):
                cmr['cmr_search_title'] = []

            cmr['cmr_search_updated'].append(response['feed']['updated'])
            cmr['cmr_search_url'].append(response['feed']['id'])
            cmr['cmr_search_title'].append(response['feed']['title'])

            # Create list objects for the "entry" key.
            if response['feed']['entry'] != []:
                entry = response['feed']['entry'][0]
                for key in entry:
                    keyname = 'cmr_%s' %(key)
                    if not(list(cmr.keys()).__contains__(keyname)):
                        cmr[keyname] = []
                    cmr[keyname].append(entry[key])
    
        except ValueError as e:
            msg = 'Error! parse error: %s.' %e
            print('%s\n' %msg)
    
        return(cmr)