Skip to content

Commit

Permalink
Fix dataset-purge Paster command
Browse files Browse the repository at this point in the history
The dataset-purge command leaves dangling references to purged datasets in "member"
table (so this fix takes care to remove those membership records before).
  • Loading branch information
drmalex07 committed Jun 6, 2015
1 parent 073fe13 commit 6ee0fbf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
10 changes: 10 additions & 0 deletions ckan/lib/cli.py
Expand Up @@ -18,6 +18,7 @@
import paste.script
from paste.registry import Registry
from paste.script.util.logging_config import fileConfig
from sqlalchemy import or_, and_

#NB No CKAN imports are allowed until after the config file is loaded.
# i.e. do the imports in methods, after _load_config is called.
Expand Down Expand Up @@ -925,7 +926,16 @@ def purge(self, dataset_ref):
name = dataset.name

rev = model.repo.new_revision()

# Purge membership to several groups
q_member = model.Session.query(model.Member).filter(and_(
model.Member.table_name == 'package',
model.Member.table_id == dataset_ref))
for memb in q_member.all():
memb.purge()
# Purge actual dataset
dataset.purge()

model.repo.commit_and_remove()
print '%s purged' % name

Expand Down
11 changes: 6 additions & 5 deletions ckan/model/group.py
Expand Up @@ -102,13 +102,14 @@ def related_packages(self):
id=self.table_id).all()

def __unicode__(self):
# refer to objects by name, not ID, to help debugging
# Try to refer to objects by name, not ID, to help debugging
# Note A referenced object may be already deleted into the same transaction
if self.table_name == 'package':
table_info = 'package=%s' % meta.Session.query(_package.Package).\
get(self.table_id).name
pkg = meta.Session.query(_package.Package).get(self.table_id)
table_info = 'package=%s' % (pkg.name if pkg else self.table_id)
elif self.table_name == 'group':
table_info = 'group=%s' % meta.Session.query(Group).\
get(self.table_id).name
grp = meta.Session.query(Group).get(self.table_id)
table_info = 'group=%s' % (grp.name if grp else self.table_id)
else:
table_info = 'table_name=%s table_id=%s' % (self.table_name,
self.table_id)
Expand Down

0 comments on commit 6ee0fbf

Please sign in to comment.