def delete_task(task_id): """Deletes the given task. Args: task_id: The integer id of the task to delete. """ ndb.Key('Task', task_id).delete()
def post(self): # We set the parent key on each 'Greeting' to ensure each guestbook's # greetings are in the same entity group. guestbook_name = self.request.get('guestbook_name') greeting = Greeting(parent=ndb.Key("Book", guestbook_name or "*fakebook*"), content=self.request.get('content')) greeting.put() self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name}))
def _HandleMessage(handler): k = handler.request.get('key') g = None if k: g = ndb.Key(urlsafe=k).get() else: g = Greeting() g.message = '1234' g.put() handler.response.out.write(g.key.urlsafe())
def _hp_callback(self, message): nickname = 'Anonymous' if message.userid: nickname = yield get_nickname(message.userid) # Check if there's an URL. body = message.body m = re.search(r'(?i)\bhttps?://\S+[^\s.,;\]\}\)]', body) if not m: escbody = cgi.escape(body) else: url = m.group() pre = body[:m.start()] post = body[m.end():] title = '' key = ndb.Key(flat=[UrlSummary.GetKind(), url]) summary = yield key.get_async() if not summary or summary.when < time.time() - UrlSummary.MAX_AGE: rpc = urlfetch.create_rpc(deadline=0.5) urlfetch.make_fetch_call(rpc, url, allow_truncated=True) t0 = time.time() result = yield rpc t1 = time.time() logging.warning('url=%r, status=%r, dt=%.3f', url, result.status_code, t1 - t0) if result.status_code == 200: bodytext = result.content m = re.search(r'(?i)<title>([^<]+)</title>', bodytext) if m: title = m.group(1).strip() summary = UrlSummary(key=key, url=url, title=title, when=time.time()) yield summary.put_async() hover = '' if summary.title: hover = ' title="%s"' % summary.title escbody = (cgi.escape(pre) + '<a%s href="%s">' % (hover, cgi.escape(url)) + cgi.escape(url) + '</a>' + cgi.escape(post)) text = '%s - %s - %s<br>' % (cgi.escape(nickname), time.ctime(message.when or 0), escbody) if message.when is None: message.when = 0 raise ndb.Return((-message.when, text))
def memoizing_fibonacci(n): """A memoizing recursive Fibonacci to exercise RPCs.""" if n <= 1: raise ndb.Return(n) key = ndb.Key(FibonacciMemo, str(n)) memo = yield key.get_async(ndb_should_cache=False) if memo is not None: assert memo.arg == n logging.info('memo hit: %d -> %d', n, memo.value) raise ndb.Return(memo.value) logging.info('memo fail: %d', n) a = yield memoizing_fibonacci(n - 1) b = yield memoizing_fibonacci(n - 2) ans = a + b memo = FibonacciMemo(key=key, arg=n, value=ans) logging.info('memo write: %d -> %d', n, memo.value) yield memo.put_async(ndb_should_cache=False) raise ndb.Return(ans)
def get(self): self.response.out.write('<html><body>') guestbook_name = self.request.get('guestbook_name') ancestor_key = ndb.Key("Book", guestbook_name or "*fakebook*") greetings = Greeting.QueryBook(ancestor_key) for greeting in greetings: self.response.out.write('<blockquote>%s</blockquote>' % cgi.escape(greeting.content)) self.response.out.write(""" <form action="/sign?%s" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Sign Guestbook"></div> </form> <hr> <form>Guestbook name: <input value="%s" name="guestbook_name"> <input type="submit" value="switch"></form> </body> </html>""" % (urllib.urlencode({'guestbook_name': guestbook_name }), cgi.escape(guestbook_name)))
def account_key(userid): return ndb.Key(Account, userid)