Exemple #1
0
def get(handler, response):
  user = handler.get_user(required=True)
  # get some edits
  from_key = handler.request.get('from')
  if from_key:
    from_edit = Edit.get(from_key)
  else:
    from_edit = None
  if from_edit:
    edits = Edit.all().\
      filter('author =', user).\
      filter('status =', 'open').\
      filter('created <=', from_edit.created).\
      order('-created').\
      fetch(PAGE_SIZE+1)
  else:
    edits = Edit.all().\
      filter('author =', user).\
      filter('status =', 'open').\
      order('-created').\
      fetch(PAGE_SIZE+1)
  # for output
  response.edits = edits[:PAGE_SIZE]
  
  if len(edits) > PAGE_SIZE:
    response.next.url = "%s?from=%s" % (handler.base_path(), edits[PAGE_SIZE].key())
Exemple #2
0
def get(handler, response):
  q = handler.request.get('q')
  status = handler.request.get('status')
  url = handler.request.get('url')
  url_sha1 = handler.request.get('url_sha1')
  from_key = handler.request.get('from')
  to_key = handler.request.get('to')
  
  from_edit, to_edit = None, None
  
  if from_key:
    from_edit = Edit.get(from_key)
  if to_key:
    to_edit = Edit.get(to_key)
  
  if url:
    url_sha1 = hashlib.sha1(url.encode('utf8')).hexdigest()
  
  if q:
    response.heading = "Edits matching %s" % q
  elif url_sha1:
    response.heading = "sha1(url) = %s..." % (url_sha1[:6])
  elif status == "open":
    response.heading = "Open edits"
  elif status == "closed":
    response.heading = "Closed edits"
  else:
    response.heading = "All edits"
  
  query = Edit.all()
  
  # filter
  if url_sha1:
    # check bloom first
    if not url_sha1 in get_url_sha1_bloom():
      return
    # continue with query
    query = query.filter('url_sha1 =', url_sha1)
  if status:
    query = query.filter('status =', status)
  if q:
    query = query.search(q)
  if from_edit:
    query = query.filter('created <=', from_edit.created)
  if to_edit:
    query = query.filter('created >', to_edit.created)
  
  # sort
  if to_edit:
    query = query.order('created')
  else:
    query = query.order('-created')
  
  # output
  edits = query.fetch(PAGE_SIZE+1)
  response.edits = edits[:PAGE_SIZE]
  if to_edit:
    response.edits.reverse()
  
  if url_sha1 and not edits:
    logging.error('bloom false positive %s', url_sha1)
  
  # pagination
  query_dict = cgi.parse_qs(os.environ.get('QUERY_STRING'), keep_blank_values=True)
  if to_edit: # backward
    next_query_dict = query_dict.copy()
    next_query_dict.pop("to", None)
    next_query_dict["from"] = to_edit.key() # first on next page
    response.next.url = '%s?%s' % (handler.base_path(), urllib.urlencode(next_query_dict, doseq=True))
    
    if len(edits) > PAGE_SIZE:
      previous_query_dict = query_dict.copy()
      previous_query_dict.pop("from", None)
      previous_query_dict["to"] = response.edits[0].key() # first on this page
      response.previous.url = '%s?%s' % (handler.base_path(), urllib.urlencode(previous_query_dict, doseq=True))
      
  else: # forward
    if len(edits) > PAGE_SIZE:
      next_query_dict = query_dict.copy()
      next_query_dict.pop("to", None)
      next_query_dict["from"] = edits[-1].key() # first on next page
      response.next.url = '%s?%s' % (handler.base_path(), urllib.urlencode(next_query_dict, doseq=True))
    
    if response.edits and from_edit:
      previous_query_dict = query_dict.copy()
      previous_query_dict.pop("from", None)
      previous_query_dict["to"] = response.edits[0].key() # first on this page
      response.previous.url = '%s?%s' % (handler.base_path(), urllib.urlencode(previous_query_dict, doseq=True))