Beispiel #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())
Beispiel #2
0
def get(handler, response):
  site = handler.get_site(required=True)
  # get some edits
  from_index = handler.request.get('from')
  if from_index:
    from_index = int(from_index)
    edits = Edit.all().\
      ancestor(site).\
      filter('index <=', from_index).\
      filter('status =', 'closed').\
      order('-index').\
      fetch(PAGE_SIZE+1)
    # get top edit for comparison
    top_edit = Edit.all().\
      ancestor(site).\
      order('-index').\
      fetch(1)
    if top_edit[0].index != edits[0].index:
      response.previous.index = from_index + PAGE_SIZE
      response.previous.url = "%s?from=%s" % (handler.base_path(), response.previous.index)
  else:
    edits = Edit.all().\
      ancestor(site).\
      filter('status =', 'closed').\
      order('-index').\
      fetch(PAGE_SIZE+1)
  response.edits = edits[:PAGE_SIZE]
  if len(edits) > PAGE_SIZE:
    response.next.index = edits[-1].index
    response.next.url = "%s?from=%s" % (handler.base_path(), response.next.index)
Beispiel #3
0
def get(handler, response):
    edit = handler.get_edit(required=True)

    # next
    next = Edit.all().ancestor(edit.site).filter("index >", edit.index).filter("status =", "open").order("index").get()
    if next:
        response.next.edit = next
        response.next.url = handler.urlize(next.permalink())

    # prev
    prev = Edit.all().ancestor(edit.site).filter("index <", edit.index).filter("status =", "open").order("-index").get()
    if prev:
        response.previous.edit = prev
        response.previous.url = handler.urlize(prev.permalink())
Beispiel #4
0
 def put_edit():
   edit = Edit(
     index = site.index,
     author = handler.current_user(),
     original = original,
     proposal = proposal,
     url = url,
     parent = site
   )
   edit.put()
   # increment index and count, put
   site.index += 1
   site.open += 1
   site.put()
   return edit
Beispiel #5
0
def get(handler, response):
    site = handler.get_site(create_if_missing=True)
    if not site.is_saved():
        return
    # get some open edits
    open_edits = Edit.all().ancestor(site).filter("status =", "open").order("-index").fetch(PAGE_SIZE + 1)
    response.open = open_edits[:PAGE_SIZE]
    if len(open_edits) == PAGE_SIZE + 1:
        response.next.open.url = handler.urlize("%s/open" % site.permalink()) + "?from=%s" % open_edits[PAGE_SIZE].index
    # get some closed edits
    closed_edits = Edit.all().ancestor(site).filter("status =", "closed").order("-index").fetch(PAGE_SIZE + 1)
    response.closed = closed_edits[:PAGE_SIZE]
    if len(closed_edits) == PAGE_SIZE + 1:
        response.next.closed.url = (
            handler.urlize("%s/closed" % site.permalink()) + "?from=%s" % closed_edits[PAGE_SIZE].index
        )
Beispiel #6
0
def get(handler, response):
  if not handler.is_admin():
    return handler.not_found(status=403)
  query = Edit.all()
  bloom = get_url_sha1_bloom()
  bloom.reset()
  count = 0
  while 1:
    edits = query.fetch(1000)
    if not edits:
      break
    count += len(edits)
    for edit in edits:
      bloom.add(edit.url_sha1)
    query = Edit.all().with_cursor(query.cursor())
  bloom.put()
  response.count = count
Beispiel #7
0
def get(handler, response):
  user = handler.get_user(required=True)
  # get some open edits
  open_edits = Edit.all().\
    filter('author =', user).\
    filter('status =', 'open').\
    order('-created').\
    fetch(PAGE_SIZE+1)
  response.open = open_edits[:PAGE_SIZE]
  if len(open_edits) == PAGE_SIZE+1:
    response.next.open.url = handler.urlize("%s/open" % user.permalink())+"?from=%s" % open_edits[PAGE_SIZE].key()
  # get some closed edits
  closed_edits = Edit.all().\
    filter('author =', user).\
    filter('status =', 'closed').\
    order('-created').\
    fetch(PAGE_SIZE+1)
  response.closed = closed_edits[:PAGE_SIZE]
  if len(closed_edits) == PAGE_SIZE+1:
    response.next.closed.url = handler.urlize("%s/open" % user.permalink())+"?from=%s" % closed_edits[PAGE_SIZE].key()
Beispiel #8
0
def get(handler, response):
  # get edits in need of testing
  edits = Edit.all()\
    .filter('status =', 'open')\
    .order('tested')\
    .fetch(FETCH_COUNT)
  # test them
  response.edits = []
  for edit in edits:
    try:
      status = edit.test()
      response.edits.append(dict(edit=edit, status=status))
    except DownloadError:
      response.edits.append(dict(edit=edit, status="error"))
Beispiel #9
0
     response.suggestion = suggest(response.original)
   except KeyError, e:
     logging.warn('Missing credentials: %s', e)
 if response.url:
   # get canonical URL
   try:
     my_canonical_url = canonical_url(response.url)
     if my_canonical_url:
       response.url = my_canonical_url
   except DownloadError:
     handler.form_error(url="Connection refused")
   except Exception, e:
     handler.form_error(url="Error, %s" % e);
   # lookup latest edit for the URL
   local_edits = Edit.all().\
     filter('url =', response.url).\
     order('-created').\
     fetch(1)
   if local_edits:
     response.local_edit = local_edits[0]
 # navigation
 response.sites.url = handler.urlize("/sites")
 response.users.url = handler.urlize("/users")
 response.search.url = handler.urlize("/search")
 # url to next page of open edits
 def next_open_edits(key):
   return handler.urlize("/search/edits")+("?status=open&from=%s" % key)
 # get latest edits and bookmarklet (cached)
 if handler.cached():
   # cache hit
   if response.next and 'key' in response.next:
     response.next['url'] = next_open_edits(response.next['key'])
Beispiel #10
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))