def delete(self, id, **params): coll = get_or_404(Collection, id) if cherrypy.request.method == "POST": # FIXME - check csrf token if id: if params.get('delete_conf', '') == '': redirect(url("colls-list")) coll = get_or_404(Collection, id) # Remove the collection's parents coll.set_parents(()) Collection.objects.set(coll) # Remove the collection from its childrens parent lists. child_colls = coll.children for child in child_colls: cparents = set(child.parents) cparents.remove(id) child.set_parents(cparents) Collection.objects.set(child) # Iterate through the records in the collection, and remove the # collection from them. SearchCollection.checkpoint().wait() for record in SearchCollection.doc_type('record') \ .field.coll.is_in(id)[:]: try: record = record.object except KeyError: # Record is already gone - can't update it. # (This shouldn't happen, but do this check for # robustness.) continue record.collections = filter(lambda x: x != id, record.collections) Record.objects.set(record) Collection.objects.remove(id) Record.objects.flush() Collection.objects.flush() gonext() redirect(url("colls-list", id=coll.id)) elif cherrypy.request.method == "GET": context = dict(coll=coll) return render("coll-delete-confirm.html", context) raise cherrypy.HTTPError(404)