Source code for pacifica.policy.status.instrument.search

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""CherryPy Status Policy object class."""
from json import loads
from cherrypy import tools, HTTPError
import requests
from pacifica.policy.config import get_config
from pacifica.policy.status.base import QueryBase


# pylint: disable=too-few-public-methods
[docs]class InstrumentKeywordSearch(QueryBase): """Retrieves a set of proposals for a given keyword set.""" exposed = True
[docs] def _get_instruments_for_keywords(self, user_id, search_terms=''): """Return a list with all the instruments having this term.""" # is_admin = self._is_admin(user_id) inst_list_url = '{0}/instrumentinfo/search/{1}'.format( get_config().get('metadata', 'endpoint_url'), search_terms ) inst_query = requests.get(url=inst_list_url) if inst_query.status_code == 200: inst_response = loads(inst_query.text) return self._clean_up_instrument_list(inst_response, user_id) else: raise HTTPError(inst_query.status_code)
[docs] def _clean_up_instrument_list(self, inst_response, user_id): """Clear out entries that done belong to this user.""" is_admin = self._is_admin(user_id) output_list = [] if not is_admin: inst_for_user_url = '{0}/instrumentinfo/by_user_id/{1}'.format( get_config().get('metadata', 'endpoint_url'), user_id ) query = requests.get(url=inst_for_user_url) response = loads(query.text) output_list = InstrumentKeywordSearch._squash_output_list( response, inst_response) else: output_list = inst_response return output_list
[docs] @staticmethod def _squash_output_list(inst_for_user_list, full_inst_list): """Filter entries in the full instrument list.""" inst_list = [i['id'] for i in inst_for_user_list] output_list = [obj for obj in full_inst_list if obj['id'] in inst_list] return output_list
# CherryPy requires these named methods # Add HEAD (basically Get without returning body # pylint: disable=invalid-name
[docs] @tools.json_out() def GET(self, search_terms='', **kwargs): """CherryPy GET method.""" user_id = kwargs['user'] if 'user' in kwargs else None return self._get_instruments_for_keywords(user_id, search_terms)
# pylint: enable=too-few-public-methods