diff --git a/ckan/views/admin.py b/ckan/views/admin.py index 1edda8ce108..d063b407649 100644 --- a/ckan/views/admin.py +++ b/ckan/views/admin.py @@ -149,7 +149,6 @@ def get(self): return base.render(u'admin/trash.html', extra_vars=data) def post(self): - deleted_revisions = model.Session.query( model.Revision).filter_by(state=model.State.DELETED) # NB: we repeat retrieval of of revisions @@ -158,44 +157,40 @@ def post(self): # purge packages) of form: "this object already exists in the # session" msgs = [] - if (u'purge-packages' in request.form) or ( - u'purge-revisions' in request.form): - if u'purge-packages' in request.form: - # Delete the packages first - for pkg in self.deleted_packages: - logic.get_action(u'dataset_purge')( - {u'user': g.user}, {u'id': pkg.id}) - model.Session.remove() - - # Delete associated revisions - revs_to_purge = [] - for pkg in self.deleted_packages: - revisions = [x[0] for x in pkg.all_related_revisions] - # ensure no accidental purging of other(non-deleted) - # packages initially just avoided purging revisions - # where non-deleted packages were affected - # however this lead to confusing outcomes e.g. - # we succesfully deleted revision in which package - # was deleted (so package now active again) but no - # other revisions - problem = False - for r in revisions: - affected_pkgs = set(r.packages).\ - difference(set(self.deleted_packages)) - if affected_pkgs: - msg = _(u'Cannot purge package %s as ' - u'associated revision %s includes ' - u'non-deleted packages %s') - msg = msg % (pkg.id, r.id, - [pkg.id for r in affected_pkgs]) - msgs.append(msg) - problem = True - break - if not problem: - revs_to_purge += [r.id for r in revisions] - model.Session.remove() - else: - revs_to_purge = [rev.id for rev in deleted_revisions] + if (u'purge-packages' in request.form): + # Delete the packages first + for pkg in self.deleted_packages: + logic.get_action(u'dataset_purge')( + {u'user': g.user}, {u'id': pkg.id}) + model.Session.remove() + + # Delete associated revisions + revs_to_purge = [] + for pkg in self.deleted_packages: + revisions = [x[0] for x in pkg.all_related_revisions] + # ensure no accidental purging of other(non-deleted) + # packages initially just avoided purging revisions + # where non-deleted packages were affected + # however this lead to confusing outcomes e.g. + # we succesfully deleted revision in which package + # was deleted (so package now active again) but no + # other revisions + problem = False + for r in revisions: + affected_pkgs = set(r.packages).\ + difference(set(self.deleted_packages)) + if affected_pkgs: + msg = _(u'Cannot purge package %s as ' + u'associated revision %s includes ' + u'non-deleted packages %s') + msg = msg % (pkg.id, r.id, + [pkg.id for r in affected_pkgs]) + msgs.append(msg) + problem = True + break + if not problem: + revs_to_purge += [r.id for r in revisions] + model.Session.remove() revs_to_purge = list(set(revs_to_purge)) for id in revs_to_purge: revision = model.Session.query(model.Revision).get(id)