Bläddra i källkod

Use Imr in LDP layer; fix several failing tests (90% succeed).

Stefano Cossu 5 år sedan
förälder
incheckning
bcc4b16b0e

+ 5 - 5
lakesuperior/endpoints/ldp.py

@@ -179,7 +179,7 @@ def get_resource(uid, out_fmt=None):
     if out_fmt == 'rdf':
         if locals().get('rdf_mimetype', None) is None:
             rdf_mimetype = DEFAULT_RDF_MIMETYPE
-        ggr = g.tbox.globalize_graph(rsrc.out_graph)
+        ggr = g.tbox.globalize_imr(rsrc.out_graph)
         ggr.namespace_manager = nsm
         return _negotiate_content(
                 ggr, rdf_mimetype, out_headers, uid=uid, uri=uri)
@@ -217,7 +217,7 @@ def get_version_info(uid):
     """
     rdf_mimetype = _best_rdf_mimetype() or DEFAULT_RDF_MIMETYPE
     try:
-        gr = rsrc_api.get_version_info(uid)
+        imr = rsrc_api.get_version_info(uid)
     except ResourceNotExistsError as e:
         return str(e), 404
     except InvalidResourceError as e:
@@ -225,7 +225,7 @@ def get_version_info(uid):
     except TombstoneError as e:
         return _tombstone_response(e, uid)
     else:
-        return _negotiate_content(g.tbox.globalize_graph(gr), rdf_mimetype)
+        return _negotiate_content(g.tbox.globalize_imr(imr), rdf_mimetype)
 
 
 @ldp.route('/<path:uid>/fcr:versions/<ver_uid>', methods=['GET'])
@@ -238,7 +238,7 @@ def get_version(uid, ver_uid):
     """
     rdf_mimetype = _best_rdf_mimetype() or DEFAULT_RDF_MIMETYPE
     try:
-        gr = rsrc_api.get_version(uid, ver_uid)
+        imr = rsrc_api.get_version(uid, ver_uid)
     except ResourceNotExistsError as e:
         return str(e), 404
     except InvalidResourceError as e:
@@ -246,7 +246,7 @@ def get_version(uid, ver_uid):
     except TombstoneError as e:
         return _tombstone_response(e, uid)
     else:
-        return _negotiate_content(g.tbox.globalize_graph(gr), rdf_mimetype)
+        return _negotiate_content(g.tbox.globalize_imr(imr), rdf_mimetype)
 
 
 @ldp.route('/<path:parent_uid>', methods=['POST'], strict_slashes=False)

+ 9 - 6
lakesuperior/model/ldp/ldpr.py

@@ -276,7 +276,7 @@ class Ldpr(metaclass=ABCMeta):
         """
         Retun a graph of the resource's IMR formatted for output.
         """
-        out_gr = Graph(identifier=self.uri)
+        out_trp = set()
 
         for t in self.imr:
             if (
@@ -290,9 +290,9 @@ class Ldpr(metaclass=ABCMeta):
                 self._imr_options.get('incl_srv_mgd', True) or
                 not self._is_trp_managed(t)
             ):
-                out_gr.add(t)
+                out_trp.add(t)
 
-        return out_gr
+        return Imr(uri = self.uri, data=out_trp)
 
 
     @property
@@ -586,7 +586,7 @@ class Ldpr(metaclass=ABCMeta):
 
         for t in ver_gr:
             if not self._is_trp_managed(t):
-                self.provided_imr.add((self.uri, t[1], t[2]))
+                self.provided_imr.add(((self.uri, t[1], t[2]),))
             # @TODO Check individual objects: if they are repo-managed URIs
             # and not existing or tombstones, they are not added.
 
@@ -723,7 +723,10 @@ class Ldpr(metaclass=ABCMeta):
         self._clear_cache()
         # Reload IMR because if we exit the LMDB txn we lose access to stored
         # memory locations.
-        self.imr
+        try:
+            self.imr
+        except:
+            pass
 
         if (
                 ev_type is not None and
@@ -803,7 +806,7 @@ class Ldpr(metaclass=ABCMeta):
             logger.info(
                 'Removing link to non-existent repo resource: {}'
                 .format(obj))
-            self.provided_imr.remove_triples((None, None, obj))
+            self.provided_imr.remove((None, None, obj))
 
 
     def _add_srv_mgd_triples(self, create=False):

+ 2 - 4
lakesuperior/store/ldp_rs/lmdb_triplestore.pyx

@@ -1409,17 +1409,15 @@ cdef class LmdbTriplestore(BaseLmdbStore):
         key_v.mv_data = key
         key_v.mv_size = KLEN
 
-        logger.info('So far so good[0].')
-        logger.info(f'Size of mdb_val: {sizeof(lmdb.MDB_val)}; size of buffer: {sizeof(Buffer)}')
+        #logger.info(f'Size of mdb_val: {sizeof(lmdb.MDB_val)}; size of buffer: {sizeof(Buffer)}')
         _check(
                 lmdb.mdb_get(
                     self.txn, self.get_dbi('t:st'), &key_v, &data_v
                 ),
                 f'Error getting data for key \'{key}\'.')
-        logger.info('So far so good[1].')
         data.addr = data_v.mv_data
         data.sz = data_v.mv_size
-        logger.info('Found term: {}'.format(buffer_dump(data)))
+        #logger.info('Found term: {}'.format(buffer_dump(data)))
 
 
     cdef tuple from_trp_key(self, TripleKey key):

+ 3 - 3
lakesuperior/store/ldp_rs/rsrc_centric_layout.py

@@ -299,7 +299,7 @@ class RsrcCentricLayout:
 
         # Include inbound relationships.
         if incl_inbound and len(imr):
-            gr = SimpleGraph(data=self.get_inbound_rel(nsc['fcres'][uid]))
+            gr = SimpleGraph({*self.get_inbound_rel(nsc['fcres'][uid])})
             imr |= gr
 
         if strict:
@@ -391,7 +391,7 @@ class RsrcCentricLayout:
             )
             # Get triples in the meta graph filtering out undesired triples.
             for vmtrp in vmeta_gr:
-                for trp in self.store.grep_lookup(
+                for trp in self.store.graph_lookup(
                     (vmtrp[0], None, None), HIST_GR_URI
                 ):
                     if (
@@ -449,7 +449,7 @@ class RsrcCentricLayout:
             )[s : cont_p]
             #new_dset = set(ds.graph(c)[s : cont_p])
             for ss in new_dset:
-                dset.add((ss,))
+                dset.add(ss)
                 cc = URIRef(ss.replace(nsc['fcres'], nsc['fcstruct']))
                 sub_dset = self.store.triples((ss, cont_p, None), cc)
                 #if set(ds.graph(cc)[ss : cont_p]):

+ 13 - 0
lakesuperior/toolbox.py

@@ -194,6 +194,19 @@ class Toolbox:
         return s, p, o
 
 
+    def globalize_imr(self, imr):
+        '''
+        Globalize an Imr.
+
+        :rtype: rdflib.Graph
+        '''
+        g_gr = Graph(identifier=self.globalize_term(imr.uri))
+        for trp in imr:
+            g_gr.add(self.globalize_triple(trp))
+
+        return g_gr
+
+
     def globalize_graph(self, gr):
         '''
         Globalize a graph.