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())
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)
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())
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 )
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
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()
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"))
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'])
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))