mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-26 00:46:22 +02:00
Collection management (#520)
* Tech spec * Refactored Cassanda knowledge graph for single table * Collection management, librarian services to manage metadata and collection deletion
This commit is contained in:
parent
48016d8fb2
commit
13ff7d765d
48 changed files with 2941 additions and 425 deletions
|
|
@ -8,6 +8,7 @@ from . library import Library
|
|||
from . flow import Flow
|
||||
from . config import Config
|
||||
from . knowledge import Knowledge
|
||||
from . collection import Collection
|
||||
from . exceptions import *
|
||||
from . types import *
|
||||
|
||||
|
|
@ -68,3 +69,6 @@ class Api:
|
|||
|
||||
def library(self):
|
||||
return Library(self)
|
||||
|
||||
def collection(self):
|
||||
return Collection(self)
|
||||
|
|
|
|||
90
trustgraph-base/trustgraph/api/collection.py
Normal file
90
trustgraph-base/trustgraph/api/collection.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
import datetime
|
||||
import logging
|
||||
|
||||
from . types import CollectionMetadata
|
||||
from . exceptions import *
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Collection:
|
||||
|
||||
def __init__(self, api):
|
||||
self.api = api
|
||||
|
||||
def request(self, request):
|
||||
return self.api.request(f"collection-management", request)
|
||||
|
||||
def list_collections(self, user, tag_filter=None):
|
||||
|
||||
input = {
|
||||
"operation": "list-collections",
|
||||
"user": user,
|
||||
}
|
||||
|
||||
if tag_filter:
|
||||
input["tag_filter"] = tag_filter
|
||||
|
||||
object = self.request(input)
|
||||
|
||||
try:
|
||||
return [
|
||||
CollectionMetadata(
|
||||
user = v["user"],
|
||||
collection = v["collection"],
|
||||
name = v["name"],
|
||||
description = v["description"],
|
||||
tags = v["tags"],
|
||||
created_at = v["created_at"],
|
||||
updated_at = v["updated_at"]
|
||||
)
|
||||
for v in object["collections"]
|
||||
]
|
||||
except Exception as e:
|
||||
logger.error("Failed to parse collection list response", exc_info=True)
|
||||
raise ProtocolException(f"Response not formatted correctly")
|
||||
|
||||
def update_collection(self, user, collection, name=None, description=None, tags=None):
|
||||
|
||||
input = {
|
||||
"operation": "update-collection",
|
||||
"user": user,
|
||||
"collection": collection,
|
||||
}
|
||||
|
||||
if name is not None:
|
||||
input["name"] = name
|
||||
if description is not None:
|
||||
input["description"] = description
|
||||
if tags is not None:
|
||||
input["tags"] = tags
|
||||
|
||||
object = self.request(input)
|
||||
|
||||
try:
|
||||
if "collections" in object and object["collections"]:
|
||||
v = object["collections"][0]
|
||||
return CollectionMetadata(
|
||||
user = v["user"],
|
||||
collection = v["collection"],
|
||||
name = v["name"],
|
||||
description = v["description"],
|
||||
tags = v["tags"],
|
||||
created_at = v["created_at"],
|
||||
updated_at = v["updated_at"]
|
||||
)
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error("Failed to parse collection update response", exc_info=True)
|
||||
raise ProtocolException(f"Response not formatted correctly")
|
||||
|
||||
def delete_collection(self, user, collection):
|
||||
|
||||
input = {
|
||||
"operation": "delete-collection",
|
||||
"user": user,
|
||||
"collection": collection,
|
||||
}
|
||||
|
||||
object = self.request(input)
|
||||
|
||||
return {}
|
||||
|
|
@ -41,3 +41,13 @@ class ProcessingMetadata:
|
|||
user : str
|
||||
collection : str
|
||||
tags : List[str]
|
||||
|
||||
@dataclasses.dataclass
|
||||
class CollectionMetadata:
|
||||
user : str
|
||||
collection : str
|
||||
name : str
|
||||
description : str
|
||||
tags : List[str]
|
||||
created_at : str
|
||||
updated_at : str
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue