Преглед на файлове

Add constrainedBy header; fix tests for server-managed triples.

Stefano Cossu преди 5 години
родител
ревизия
1345dab551
променени са 3 файла, в които са добавени 34 реда и са изтрити 15 реда
  1. 7 2
      lakesuperior/endpoints/ldp.py
  2. 10 7
      lakesuperior/endpoints/main.py
  3. 17 6
      tests/3_endpoints/test_3_0_ldp.py

+ 7 - 2
lakesuperior/endpoints/ldp.py

@@ -307,6 +307,10 @@ def post_resource(parent_uid):
     except TombstoneError as e:
         return _tombstone_response(e, uid)
     except ServerManagedTermError as e:
+        rsp_headers['Link'] = (
+            f'<{uri}>; rel="{nsc["ldp"].constrainedBy}"; '
+            f'{g.webroot}/info/ldp_constraints"'
+        )
         return str(e), 412
 
     uri = g.tbox.uid_to_uri(rsrc.uid)
@@ -315,8 +319,9 @@ def post_resource(parent_uid):
     rsp_headers['Location'] = uri
 
     if mimetype and kwargs.get('rdf_fmt') is None:
-        rsp_headers['Link'] = (f'<{uri}/fcr:metadata>; rel="describedby"; '
-                               f'anchor="{uri}"')
+        rsp_headers['Link'] = (
+            f'<{uri}/fcr:metadata>; rel="describedby"; anchor="{uri}"'
+        )
 
     return uri, 201, rsp_headers
 

+ 10 - 7
lakesuperior/endpoints/main.py

@@ -2,9 +2,10 @@ import logging
 
 from os import path
 
-from flask import Blueprint, render_template
+from flask import Blueprint, jsonify, render_template
 
 from lakesuperior import release
+from lakesuperior.dictionaries import srv_mgd_terms as smt
 
 logger = logging.getLogger(__name__)
 
@@ -21,9 +22,11 @@ def index():
     return render_template('index.html', release=release)
 
 
-@main.route('/debug', methods=['GET'])
-def debug():
-    """Debug page."""
-    raise RuntimeError()
-
-
+@main.route('/info/ldp_constraints', methods=['GET'])
+def ldp_constraints():
+    """ LDP term constraints. """
+    return jsonify({
+        'srv_mgd_subjects': [*smt.srv_mgd_subjects],
+        'srv_mgd_predicates': [*smt.srv_mgd_predicates],
+        'srv_mgd_types': [*smt.srv_mgd_types],
+    })

+ 17 - 6
tests/3_endpoints/test_3_0_ldp.py

@@ -516,17 +516,28 @@ class TestLdp:
         uid = '/test_patch_sm_pred'
         path = f'/ldp{uid}'
         self.client.put(path)
+        self.client.put(path + '/child1')
 
         uri = g.webroot + uid
 
         ins_qry1 = f'INSERT {{ <> <{nsc["ldp"].contains}> <http://bogus.com/ext1> . }} WHERE {{}}'
-        ins_qry2 = f'INSERT {{ <> <{nsc["fcrepo"].created}> "2019-04-01T05:57:36.899033+00:00"^^{nsc["xsd"].dateTime} . }} WHERE {{}}'
+        ins_qry2 = (
+            f'INSERT {{ <> <{nsc["fcrepo"].created}>'
+            f'"2019-04-01T05:57:36.899033+00:00"^^<{nsc["xsd"].dateTime}> . }}'
+            'WHERE {}'
+        )
         # The following won't change the graph so it does not raise an error.
-        ins_qry3 = f'INSERT {{ <> a <{nsc["ldp"].Container}> WHERE {{}}'
-        del_qry1 = f'DELETE {{ <> <{nsc["ldp"].contains}> ?o . }} WHERE {{ <> <{nsc["ldp"].contains}> ?o . }}'
-        del_qry2 = f'DELETE {{ <> a <{nsc["ldp"].Container}> WHERE {{}}'
-        # No-op as ins_qry1
-        del_qry3 = f'DELETE {{ <> a <{nsc["ldp"].DirectContainer}> WHERE {{}}'
+        ins_qry3 = f'INSERT {{ <> a <{nsc["ldp"].Container}> . }} WHERE {{}}'
+        del_qry1 = (
+            f'DELETE {{ <> <{nsc["ldp"].contains}> ?o . }} '
+            f'WHERE {{ <> <{nsc["ldp"].contains}> ?o . }}'
+        )
+        del_qry2 = f'DELETE {{ <> a <{nsc["ldp"].Container}> . }} WHERE {{}}'
+        # No-op as ins_qry3
+        del_qry3 = (
+            f'DELETE {{ <> a <{nsc["ldp"].DirectContainer}> .}} '
+            'WHERE {}'
+        )
 
         assert self.client.patch(
             path, data=ins_qry1,