Skip to content

Commit

Permalink
Merge pull request #2637 from ckan/1572-dataset-purge
Browse files Browse the repository at this point in the history
dataset_purge improvements
  • Loading branch information
rossjones committed Sep 14, 2015
2 parents 4ca2e61 + 7096d6e commit ed5fe6e
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 9 deletions.
3 changes: 2 additions & 1 deletion ckan/logic/action/delete.py
Expand Up @@ -110,7 +110,8 @@ def dataset_purge(context, data_dict):
m.purge()

pkg = model.Package.get(id)
model.repo.new_revision()
# no new_revision() needed since there are no object_revisions created
# during purge
pkg.purge()
model.repo.commit_and_remove()

Expand Down
13 changes: 13 additions & 0 deletions ckan/migration/versions/080_continuity_id_indexes.py
@@ -0,0 +1,13 @@
def upgrade(migrate_engine):
migrate_engine.execute(
'''
CREATE INDEX idx_member_continuity_id
ON member_revision (continuity_id);
CREATE INDEX idx_package_tag_continuity_id
ON package_tag_revision (continuity_id);
CREATE INDEX idx_package_continuity_id
ON package_revision (continuity_id);
CREATE INDEX idx_package_extra_continuity_id
ON package_extra_revision (continuity_id);
'''
)
7 changes: 2 additions & 5 deletions ckan/model/domain_object.py
Expand Up @@ -76,15 +76,12 @@ def remove(self):
self.Session.remove()

def delete(self):
# stateful objects have this method overridden - see
# vmd.base.StatefulObjectMixin
self.Session.delete(self)

def purge(self):
self.Session().autoflush = False
if hasattr(self, '__revisioned__'): # only for versioned objects ...
# this actually should auto occur due to cascade relationships but
# ...
for rev in self.all_revisions:
self.Session.delete(rev)
self.Session.delete(self)

def as_dict(self):
Expand Down
7 changes: 5 additions & 2 deletions ckan/tests/logic/action/test_delete.py
Expand Up @@ -207,6 +207,7 @@ def test_purged_dataset_leaves_no_trace_in_the_model(self):
groups=[{'name': 'group1'}],
owner_org=org['id'],
extras=[{'key': 'testkey', 'value': 'testvalue'}])
factories.Resource(package_id=dataset['id'])
num_revisions_before = model.Session.query(model.Revision).count()

helpers.call_action('dataset_purge',
Expand All @@ -216,6 +217,7 @@ def test_purged_dataset_leaves_no_trace_in_the_model(self):

# the Package and related objects are gone
assert_equals(model.Session.query(model.Package).all(), [])
assert_equals(model.Session.query(model.Resource).all(), [])
assert_equals(model.Session.query(model.PackageTag).all(), [])
# there is no clean-up of the tag object itself, just the PackageTag.
assert_equals([t.name for t in model.Session.query(model.Tag).all()],
Expand All @@ -230,13 +232,14 @@ def test_purged_dataset_leaves_no_trace_in_the_model(self):

# all the object revisions were purged too
assert_equals(model.Session.query(model.PackageRevision).all(), [])
assert_equals(model.Session.query(model.ResourceRevision).all(), [])
assert_equals(model.Session.query(model.PackageTagRevision).all(), [])
assert_equals(model.Session.query(model.PackageExtraRevision).all(),
[])
# Member is not revisioned

# No Revision objects were purged, in fact 1 is created for the purge
assert_equals(num_revisions_after - num_revisions_before, 1)
# No Revision objects were purged or created
assert_equals(num_revisions_after - num_revisions_before, 0)

def test_missing_id_returns_error(self):
assert_raises(logic.ValidationError,
Expand Down
5 changes: 4 additions & 1 deletion test-core.ini
Expand Up @@ -127,7 +127,10 @@ level = INFO
[logger_sqlalchemy]
handlers =
qualname = sqlalchemy.engine
level = WARN
level = WARNING
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARNING" logs neither.

[handler_console]
class = StreamHandler
Expand Down

0 comments on commit ed5fe6e

Please sign in to comment.