Exemplo n.º 1
0
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)
Exemplo n.º 2
0
def find_rssid():
  if 'domain' not in request.args:
    abort(400)
  rssid = get_rssid(request.args['domain'])
  save_analytics(rssid)
  return json.dumps(rssid)