Example #1
0
    def getparamslist(self, args):
        ''' Retrieve a list of all available input parameters into the query

        .. :quickref: Query; Get a list of all or "best" queryable parameters

        :query string release: the release of MaNGA
        :form paramdisplay: ``all`` or ``best``, type of parameters to return
        :resjson int status: status of response. 1 if good, -1 if bad.
        :resjson string error: error message, null if None
        :resjson json inconfig: json of incoming configuration
        :resjson json utahconfig: json of outcoming configuration
        :resjson string traceback: traceback of an error, null if None
        :resjson string data: dictionary of returned data
        :json list params: the list of queryable parameters
        :resheader Content-Type: application/json
        :statuscode 200: no error
        :statuscode 422: invalid input parameters

        **Example request**:

        .. sourcecode:: http

           GET /marvin2/api/query/getparamslist/ HTTP/1.1
           Host: api.sdss.org
           Accept: application/json, */*

        **Example response**:

        .. sourcecode:: http

           HTTP/1.1 200 OK
           Content-Type: application/json
           {
              "status": 1,
              "error": null,
              "inconfig": {"release": "MPL-5"},
              "utahconfig": {"release": "MPL-5", "mode": "local"},
              "traceback": null,
              "data": ['nsa.z', 'cube.ra', 'cube.dec', ...]
           }

        '''
        paramdisplay = args.pop('paramdisplay', 'all')
        q = Query(mode='local')
        if paramdisplay == 'all':
            params = q.get_available_params()
        elif paramdisplay == 'best':
            params = q.get_best_params()
        self.results['data'] = params
        self.results['status'] = 1
        output = jsonify(self.results)
        return output
Example #2
0
    def getparams(self, paramdisplay):
        ''' Retrieves the list of query parameters for Bloodhound Typeahead

        '''

        # set the paramdisplay if it is not
        if not paramdisplay:
            paramdisplay = 'all'

        # run query and retrieve parameters
        q = Query(release=self._release)
        if paramdisplay == 'all':
            params = q.get_available_params()
        elif paramdisplay == 'best':
            params = q.get_best_params()
        output = jsonify(params)
        return output
Example #3
0
    def _get_params(self,
                    pdisp,
                    mode='local',
                    expcount=None,
                    inlist=None,
                    outlist=None):
        if mode == 'remote':
            self._set_remote()
        q = Query(mode=mode)

        if pdisp == 'all':
            keys = q.get_available_params()
            self.assertGreaterEqual(len(keys), expcount)
        elif pdisp == 'best':
            keys = q.get_best_params()
            self.assertLessEqual(len(keys), expcount)

        for i in inlist:
            self.assertIn(i, keys)
        if outlist:
            for o in outlist:
                self.assertNotIn(o, keys)
Example #4
0
    def index(self):

        # Attempt to retrieve search parameters
        form = processRequest(request=request)
        self.search['formparams'] = form

        print('search form', form, type(form))
        # set the search form and form validation
        searchform = self.mf.SearchForm(form)
        q = Query(release=self._release)
        # allparams = q.get_available_params()
        bestparams = q.get_best_params()
        searchform.returnparams.choices = [(k.lower(), k) for k in bestparams]
        searchform.parambox.validators = [
            all_in(bestparams), validators.Optional()
        ]

        # Add the forms
        self.search['searchform'] = searchform
        self.search['placeholder'] = getRandomQuery()

        #from flask import abort
        #abort(500)

        # If form parameters then try to do a search
        if form:
            self.search.update({'results': None, 'errmsg': None})

            args = av.manual_parse(self, request, use_params='search')
            print('search args', args)

            # get form parameters
            searchvalue = form['searchbox']  # search filter input
            returnparams = form.getlist('returnparams',
                                        type=str)  # dropdown select
            parambox = form.get('parambox', None,
                                type=str)  # from autocomplete
            if parambox:
                parms = parambox.split(',')
                parms = parms if parms[-1].strip() else parms[:-1]
                parambox = parms if parambox else None
            # Select the one that is not none
            returnparams = returnparams if returnparams and not parambox else \
                parambox if parambox and not returnparams else \
                list(set(returnparams) | set(parambox)) if returnparams and parambox else None
            print('return params', returnparams)
            current_session.update({
                'searchvalue': searchvalue,
                'returnparams': returnparams
            })

            # if main form passes validation then do search
            if searchform.validate():
                # try the query
                try:
                    q, res = doQuery(searchfilter=searchvalue,
                                     release=self._release,
                                     returnparams=returnparams)
                except MarvinError as e:
                    self.search[
                        'errmsg'] = 'Could not perform query: {0}'.format(e)
                else:
                    self.search['filter'] = q.strfilter
                    self.search['count'] = res.totalcount
                    self.search['runtime'] = res.query_runtime.total_seconds()
                    if res.count > 0:
                        cols = res.mapColumnsToParams()
                        rows = res.getDictOf(format_type='listdict')
                        output = {
                            'total': res.totalcount,
                            'rows': rows,
                            'columns': cols
                        }
                    else:
                        output = None
                    self.search['results'] = output
                    self.search['reslen'] = len(res.results)
                    if returnparams:
                        returnparams = [str(r) for r in returnparams]
                    rpstr = 'returnparams={0} <br>'.format(
                        returnparams) if returnparams else ''
                    qstr = ', returnparams=returnparams' if returnparams else ''
                    self.search['querystring'] = (
                        "<html><samp>from marvin import \
                        config<br>from marvin.tools.query import Query<br>config.mode='remote'<br>\
                        filter='{0}'<br> {1}\
                        q = Query(searchfilter=filter{2})<br>\
                        r = q.run()<br></samp></html>".format(
                            searchvalue, rpstr, qstr))

        return render_template('search.html', **self.search)