Forráskód Böngészése

Forget resource with descendants.

Stefano Cossu 6 éve
szülő
commit
e21f107d9c

+ 3 - 2
lakesuperior/api/resource.py

@@ -306,7 +306,7 @@ def delete(uid, soft=True, inbound=True):
     inbound = True if refint else inbound
     repr_opts = {'incl_inbound' : True} if refint else {}
 
-    rsrc = LdpFactory.from_stored(uid, repr_opts)
+    rsrc = LdpFactory.from_stored(uid, repr_opts, strict=soft)
     if soft:
         return rsrc.bury(inbound)
     else:
@@ -339,4 +339,5 @@ def resurrect(uid):
         else:
             return LdpFactory.from_stored(uid, strict=False).resurrect()
     else:
-        raise InvalidResourceError('Resource {} is not dead.'.format(uid))
+        raise InvalidResourceError(
+                uid, msg='Resource {} is not dead.'.format(uid))

+ 1 - 1
lakesuperior/model/ldpr.py

@@ -475,7 +475,7 @@ class Ldpr(metaclass=ABCMeta):
         inbound = True if refint else inbound
 
         for desc_uri in rdfly.get_descendants(self.uid):
-            rdfly.forget_rsrc(rdfly.uri_to_uuid(desc_uri), inbound)
+            rdfly.forget_rsrc(rdfly.uri_to_uid(desc_uri), inbound)
 
         rdfly.forget_rsrc(self.uid, inbound)
 

+ 23 - 0
tests/api/test_resource_api.py

@@ -433,6 +433,29 @@ class TestResourceCRUD:
             assert nsc['ldp'].Resource in child_rsrc.ldp_types
 
 
+    def test_hard_delete_children(self):
+        """
+        Hard-delete (forget) a resource with its children.
+
+        This uses fixtures from the previous test.
+        """
+        uid = '/test_hard_delete_children01'
+        rsrc_api.create_or_replace(uid)
+        for i in range(3):
+            rsrc_api.create_or_replace('{}/child{}'.format(uid, i))
+        rsrc_api.delete(uid, False)
+        with pytest.raises(ResourceNotExistsError):
+            rsrc_api.get(uid)
+        with pytest.raises(ResourceNotExistsError):
+            rsrc_api.resurrect(uid)
+
+        for i in range(3):
+            with pytest.raises(ResourceNotExistsError):
+                rsrc_api.get('{}/child{}'.format(uid, i))
+            with pytest.raises(ResourceNotExistsError):
+                rsrc_api.resurrect('{}/child{}'.format(uid, i))
+
+
 
 @pytest.mark.usefixtures('db')
 class TestResourceVersioning: