# passingkeys.py import os import cgi import webapp2 import time from google.appengine.ext import db from google.appengine.ext.webapp import template class List(db.Model): name = db.StringProperty() timestamp = db.DateTimeProperty(auto_now_add=True) class Item(db.Model): list_key = db.ReferenceProperty(List) name = db.StringProperty() timestamp = db.DateTimeProperty(auto_now_add=True) def limit(): my_limit = 10 lists = List.all() lists.order("-timestamp") if lists.count() > my_limit: # remove all lists and their items over 10, oldest first my_count = 0 for list in lists: # pass over the ones we're keeping my_count = my_count + 1 if my_count > my_limit: # delete items items = db.GqlQuery("SELECT * FROM Item Where list_key = :1",list.key()) for it in items: it.delete() # delete list list.delete() # for the remaining lists, make sure they have under 10 items lists = List.all() for list in lists: items = db.GqlQuery("SELECT * FROM Item Where list_key = :1 order by timestamp DESC",list.key()) if items.count() > my_limit: my_count = 0 for item in items: my_count = my_count + 1 if my_count > my_limit: item.delete() def render (template_values): # lists = db.GqlQuery("SELECT * FROM List") lists = List.all() lists.order("timestamp") new_lists = [] for list in lists: items = db.GqlQuery("SELECT * FROM Item Where list_key = :1 order by timestamp ASC",list.key()) new_list = { 'name': list.name, 'key': str(list.key()), 'items': items } new_lists.append(new_list) template_values['lists'] = new_lists path = os.path.join(os.path.dirname(__file__), 'index.html') return(template.render(path, template_values)) def home(s): template_values = { 'list_form': 0, 'item_form': 0 } time.sleep(2) s.response.out.write(render(template_values)) class HomePage(webapp2.RequestHandler): def get(self): home(self) class CreateList(webapp2.RequestHandler): def get(self): template_values = { 'list_form': 1 } self.response.out.write(render(template_values)) def post(self): limit() list = List() list.name = self.request.get('name') list.put() self.redirect('/') class CreateItem(webapp2.RequestHandler): def get(self, list_key): template_values = { 'item_form': 1, 'list_key': list_key } self.response.out.write(render(template_values)) def post(self): limit() item = Item() list_key = self.request.get('list_key') item.list_key = List.get(list_key) item.name = self.request.get('name') item.put() self.redirect('/') app = webapp2.WSGIApplication( [('/', HomePage), ('/list_form/', CreateList), ('/create_list/', CreateList), ('/item_form/(.*)/', CreateItem), ('/create_item/', CreateItem)], debug=True)