def GET(self, key): """GET called to retrieve children of a node.""" user = users.get_current_user() children = models.Node.get_children([db.Key(key)]) for child in children: assert child.user == user return json.enc(children)
def POST(self, key): """POST called to create a new node.""" user = users.get_current_user() node_data = json.dec(web.data()) assert not key assert not node_data.get("key") logging.info("New Node: %r" % node_data) new_node = models.Node.new_for_user(user, node_data) new_node.put() return json.enc(new_node)
def PUT(self, key): """PUT called to save an existing node.""" user = users.get_current_user() # TODO: handle errors? new_node = json.dec(web.data()) # Check old node belongs to this user old_node = models.Node.get(new_node.key()) assert old_node.user == user new_node.put() # Remove reference to children since these should be transient # and sending them back after a save request confuses the # client and causes duplicate child nodes. new_node.children = None return json.enc(new_node)
def GET(self, key): """GET called to retrieve a node.""" user = users.get_current_user() input = web.input() # limit depth to 5 depth = min(int(input.get("depth") or 0), 5) # Look for root node if not key: node = models.Node.get_root_for_user(user, load_depth=depth) # TODO: write on GET # First visit if not node: node = models.Node.new_for_user(user, {"value": "root", "root_node": True}) node.put() else: node = models.Node.get_with_children(key) if not node or node.user != user: raise web.notfound() return json.enc(node)