Skip to content

Commit

Permalink
Purge dataset relationships
Browse files Browse the repository at this point in the history
  • Loading branch information
martinburchell committed Jun 13, 2016
1 parent 997b06c commit d36226b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions ckan/logic/action/delete.py
Expand Up @@ -117,6 +117,8 @@ def dataset_purge(context, data_dict):
:type id: string
'''
from sqlalchemy import or_

model = context['model']
id = _get_or_bust(data_dict, 'id')

Expand All @@ -134,6 +136,11 @@ def dataset_purge(context, data_dict):
for m in members.all():
m.purge()

for r in model.Session.query(model.PackageRelationship).filter(
or_(model.PackageRelationship.subject_package_id == pkg.id,
model.PackageRelationship.object_package_id == pkg.id)).all():
r.purge()

pkg = model.Package.get(id)
# no new_revision() needed since there are no object_revisions created
# during purge
Expand Down
24 changes: 24 additions & 0 deletions ckan/tests/logic/action/test_delete.py
Expand Up @@ -451,6 +451,30 @@ def test_purged_dataset_leaves_no_trace_in_the_model(self):
# No Revision objects were purged or created
assert_equals(num_revisions_after - num_revisions_before, 0)

def test_purged_dataset_removed_from_relationships(self):
child = factories.Dataset()
parent = factories.Dataset()
grandparent = factories.Dataset()

helpers.call_action('package_relationship_create',
subject=child['id'],
type='child_of',
object=parent['id'])

helpers.call_action('package_relationship_create',
subject=parent['id'],
type='child_of',
object=grandparent['id'])

assert_equals(len(
model.Session.query(model.PackageRelationship).all()), 2)

helpers.call_action('dataset_purge',
context={'ignore_auth': True},
id=parent['name'])

assert_equals(model.Session.query(model.PackageRelationship).all(), [])

def test_missing_id_returns_error(self):
assert_raises(logic.ValidationError,
helpers.call_action, 'dataset_purge')
Expand Down

0 comments on commit d36226b

Please sign in to comment.