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
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
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)
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)