2023-09-11 00:46:56 +08:00
|
|
|
|
|
|
|
|
# define a object type enum
|
|
|
|
|
from abc import ABC, abstractmethod
|
|
|
|
|
from enum import Enum
|
2023-09-11 02:05:24 +08:00
|
|
|
from .object_id import ObjectID, ObjectType
|
2023-09-11 00:46:56 +08:00
|
|
|
import hashlib
|
|
|
|
|
import json
|
|
|
|
|
import pickle
|
|
|
|
|
|
|
|
|
|
class KnowledgeObject(ABC):
|
2023-09-11 02:05:24 +08:00
|
|
|
def __init__(self, object_type: ObjectType, desc: dict = {}, body: dict = {}):
|
2023-09-11 00:46:56 +08:00
|
|
|
self.desc = desc
|
|
|
|
|
self.body = body
|
|
|
|
|
self.object_type = object_type
|
|
|
|
|
|
2023-09-11 02:05:24 +08:00
|
|
|
def get_object_type(self) -> ObjectType:
|
2023-09-11 00:46:56 +08:00
|
|
|
return self.object_type
|
|
|
|
|
|
|
|
|
|
def object_id(self) -> ObjectID:
|
|
|
|
|
return self.calculate_id()
|
|
|
|
|
|
|
|
|
|
def set_desc_with_key_value(self, key, value):
|
|
|
|
|
self.desc[key] = value
|
|
|
|
|
|
|
|
|
|
def get_desc_with_key(self, key):
|
|
|
|
|
return self.desc.get(key)
|
|
|
|
|
|
|
|
|
|
def get_desc(self) -> dict:
|
|
|
|
|
return self.desc
|
|
|
|
|
|
|
|
|
|
def set_body_with_key_value(self, key, value):
|
|
|
|
|
self.body[key] = value
|
|
|
|
|
|
|
|
|
|
def get_body_with_key(self, key):
|
|
|
|
|
return self.body.get(key)
|
|
|
|
|
|
|
|
|
|
def get_body(self) -> dict:
|
|
|
|
|
return self.body
|
|
|
|
|
|
|
|
|
|
def calculate_id(self):
|
|
|
|
|
# Convert the object_type and desc to string and compute the SHA256 hash
|
|
|
|
|
data = json.dumps({"object_type": self.object_type, "desc": self.desc})
|
|
|
|
|
sha256 = hashlib.sha256()
|
|
|
|
|
sha256.update(data.encode())
|
|
|
|
|
return ObjectID(sha256.digest())
|
|
|
|
|
|
|
|
|
|
def encode(self) -> bytes:
|
|
|
|
|
return pickle.dumps(self)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def decode(data: bytes):
|
|
|
|
|
return pickle.loads(data)
|
|
|
|
|
|
|
|
|
|
|