From 483f761e15231d1cdb21fabaeb686514f5d0d096 Mon Sep 17 00:00:00 2001 From: Cyber MacGeddon Date: Tue, 26 Nov 2024 13:49:12 +0000 Subject: [PATCH] Change API to deliver a boolean e if value is an entity --- trustgraph-base/trustgraph/api/api.py | 27 +++++--- .../trustgraph/knowledge/document.py | 11 ++- .../trustgraph/knowledge/organization.py | 11 ++- .../trustgraph/knowledge/publication.py | 11 ++- .../trustgraph/api/gateway/service.py | 69 +++++++------------ 5 files changed, 71 insertions(+), 58 deletions(-) diff --git a/trustgraph-base/trustgraph/api/api.py b/trustgraph-base/trustgraph/api/api.py index 818e42c3..809288a7 100644 --- a/trustgraph-base/trustgraph/api/api.py +++ b/trustgraph-base/trustgraph/api/api.py @@ -213,9 +213,16 @@ class Api: "limit": limit } - if s: input["s"] = s - if p: input["p"] = p - if o: input["o"] = o + if not isinstance(s, Uri): + raise RuntimeError("s must be Uri") + if not isinstance(p, Uri): + raise RuntimeError("p must be Uri") + if not isinstance(o, Uri) and not isinstance(o, Literal): + raise RuntimeError("o must be Uri or Literal") + + if s: input["s"] = { "v": str(s), "e": isinstance(s, Uri), } + if p: input["p"] = { "v": str(p), "e": isinstance(p, Uri), } + if o: input["o"] = { "v": str(o), "e": isinstance(o, Uri), } url = f"{self.url}triples-query" @@ -272,10 +279,10 @@ class Api: if metadata: metadata.emit( - lambda t: triples.append({ - "s": t.s.value, - "p": t.p.value, - "o": t.o.value + lambda t: triples.append( + "s": { "v": t.s, "e": isinstance(t.s, Uri) } + "p": { "v": t.p, "e": isinstance(t.p, Uri) } + "o": { "v": t.o, "e": isinstance(t.o, Uri) } }) ) @@ -312,9 +319,9 @@ class Api: if metadata: metadata.emit( lambda t: triples.append({ - "s": t.s.value, - "p": t.p.value, - "o": t.o.value + "s": { "v": t.s, "e": isinstance(t.s, Uri), + "p": { "v": t.p, "e": isinstance(t.p, Uri), + "o": { "v": t.o, "e": isinstance(t.o, Uri), }) ) diff --git a/trustgraph-base/trustgraph/knowledge/document.py b/trustgraph-base/trustgraph/knowledge/document.py index dc2f43e3..606727bb 100644 --- a/trustgraph-base/trustgraph/knowledge/document.py +++ b/trustgraph-base/trustgraph/knowledge/document.py @@ -1,6 +1,15 @@ from . defs import * -from .. schema import Triple, Value + +def Value(value, is_uri): + return { + "v": value, "e": is_uri, + } + +def Triple(s, p, o): + return { + "s": s, "p": p, "o": o, + } class DigitalDocument: diff --git a/trustgraph-base/trustgraph/knowledge/organization.py b/trustgraph-base/trustgraph/knowledge/organization.py index 1129dd6c..381ad8ad 100644 --- a/trustgraph-base/trustgraph/knowledge/organization.py +++ b/trustgraph-base/trustgraph/knowledge/organization.py @@ -1,6 +1,15 @@ from . defs import * -from .. schema import Triple, Value + +def Value(value, is_uri): + return { + "v": value, "e": is_uri, + } + +def Triple(s, p, o): + return { + "s": s, "p": p, "o": o, + } class Organization: def __init__(self, id, name=None, description=None): diff --git a/trustgraph-base/trustgraph/knowledge/publication.py b/trustgraph-base/trustgraph/knowledge/publication.py index 3c9d41c8..f124a004 100644 --- a/trustgraph-base/trustgraph/knowledge/publication.py +++ b/trustgraph-base/trustgraph/knowledge/publication.py @@ -1,6 +1,15 @@ from . defs import * -from .. schema import Triple, Value + +def Value(value, is_uri): + return { + "v": value, "e": is_uri, + } + +def Triple(s, p, o): + return { + "s": s, "p": p, "o": o, + } class PublicationEvent: def __init__( diff --git a/trustgraph-flow/trustgraph/api/gateway/service.py b/trustgraph-flow/trustgraph/api/gateway/service.py index a9ed7079..0ae01d3a 100755 --- a/trustgraph-flow/trustgraph/api/gateway/service.py +++ b/trustgraph-flow/trustgraph/api/gateway/service.py @@ -73,10 +73,7 @@ default_timeout = 600 default_port = 8088 def to_value(x): - if x.startswith("http:") or x.startswith("https:"): - return Value(value=x, is_uri=True) - else: - return Value(value=x, is_uri=False) + return Value(value=x["v"], is_uri=x["e"]) def to_subgraph(x): return [ @@ -195,43 +192,41 @@ class Subscriber: if id in self.full: del self.full[id] +def serialize_value(v): + return { + "v": v.value, + "e": v.is_uri, + } + +def serialize_triple(t): + return { + "s": serialize_value(t.s), + "p": serialize_value(t.p), + "o": serialize_value(t.o) + } + +def serialize_subgraph(sg): + return [ + serialize_triple(t) + for t in sg + ] + def serialize_triples(message): return { "metadata": { "id": message.metadata.id, - "metadata": [ - { - "s": t.s.value, - "p": t.p.value, - "o": t.o.value, - } - for t in message.metadata.metadata - ], + "metadata": serialize_subgraph(message.metadata.metadata), "user": message.metadata.user, "collection": message.metadata.collection, }, - "triples": [ - { - "s": t.s.value, - "p": t.p.value, - "o": t.o.value, - } - for t in message.triples - ] + "triples": serialize_subgraph(message.triples), } def serialize_graph_embeddings(message): return { "metadata": { "id": message.metadata.id, - "metadata": [ - { - "s": t.s.value, - "p": t.p.value, - "o": t.o.value, - } - for t in message.metadata.metadata - ], + "metadata": serialize_subgraph(message.metadata.metadata), "user": message.metadata.user, "collection": message.metadata.collection, }, @@ -563,23 +558,7 @@ class Api: return web.json_response( { - "response": [ - { - "s": { - "v": t.s.value, - "e": t.s.is_uri, - }, - "p": { - "v": t.p.value, - "e": t.p.is_uri, - }, - "o": { - "v": t.o.value, - "e": t.o.is_uri, - } - } - for t in resp.triples - ] + "response": serialize_subgraph(resp.triples), } )