def query_solr(query, rargs, sort="-datetime", opeds=None, **kwargs): pagination = {} fq = {} if not rargs.get('rssid'): if 'domain' in rargs: fq['rssid'] = get_rssid(rargs.get('domain')) else: abort(400) else: fq['rssid'] = rargs['rssid'] pagination['start'] = kwargs.get('start') or rargs.get('start') pagination['rows'] = kwargs.get('rows') or rargs.get('rows') query_hash = fq['rssid'] + '_' + hashlib.sha1(str(query) + str(rargs) + str(sort) + str(kwargs)).hexdigest() if r.exists(query_hash): return pickle.loads(r.get(query_hash)) response = solr.query() if isinstance(query, list): for q in query: if isinstance(q, dict): response = response.query(**q) else: response = response.query(q) # Query is a string else: response = response.query(query) response = response.filter(**fq).paginate(**pagination).sort_by(sort) if opeds: app.logger.debug(opeds) query = solr.Q() for oped in opeds: query |= solr.Q(OPEDID=str(oped)) response = response.query(query) response = response.execute() app.logger.debug([response.params, response.status]) if response.status is not 0: abort(400) cache_response(response, query_hash) return list(response)
def find_rssid(): if 'domain' not in request.args: abort(400) rssid = get_rssid(request.args['domain']) save_analytics(rssid) return json.dumps(rssid)