code: def _parse_opensearch_response(products):
      
  
      converters = {'date': _parse_iso_date, 'int': int, 'long': int, 'float': float, 'double': float}
      # Keep the string type by default
      default_converter = lambda x: x
  
      output = OrderedDict()
      for prod in products:
          product_dict = {}
          prod_id = prod['id']
          output[prod_id] = product_dict
          for key in prod:
              if key == 'id':
                  continue
              if isinstance(prod[key], string_types):
                  product_dict[key] = prod[key]
              else:
                  properties = prod[key]
                  if isinstance(properties, dict):
                      properties = [properties]
                  if key == 'link':
                      for p in properties:
                          name = 'link'
                          if 'rel' in p:
                              name = 'link_' + p['rel']
                          product_dict[name] = p['href']
                  else:
                      f = converters.get(key, default_converter)
                      for p in properties:
                          try:
                              product_dict[p['name']] = f(p['content'])
                          except KeyError:
                              # Sentinel-3 has one element 'arr'
                              # which violates the name:content convention
                              product_dict[p['name']] = f(p['str'])
      return output
docs: Convert a query response to a dictionary.
  
      The resulting dictionary structure is {<product id>: {<property>: <value>}}.
      The property values are converted to their respective Python types unless `parse_values`
      is set to `False`.