def workload(id, run): key = model.Key(EmptyModel, 1) ent = EmptyModel(key=key) keys = [] time.sleep(random.random() / 10) def tx1(): new_key = yield ent.put_async() assert key == new_key, (id, run) def tx2(): new_ent = yield key.get_async() assert ent == new_ent, (id, run) def tx3(): ents = [EmptyModel() for _ in range(10)] futs = [e.put_async() for e in ents] keys.extend((yield futs)) for key, ent in zip(keys, ents): assert ent == key.get() def tx4(): yield key.delete_async() for key in keys: assert (yield key.get_async) is None yield [model.transaction_async(tx, xg=True) for tx in tx1, tx2, tx3, tx4]
def post(self): # TODO: XSRF protection. @tasklets.tasklet def helper(): user = users.get_current_user() if not user: self.redirect(users.create_login_url('/account')) return account = yield get_account(user.user_id()) if self.request.get('delete'): if account: yield account.key.delete_async() self.redirect('/account') return if not account: account = Account(key=account_key(user.user_id()), email=user.email(), userid=user.user_id()) nickname = self.request.get('nickname') if nickname: account.nickname = nickname yield account.put_async() self.redirect('/account') yield model.transaction_async(helper)