Added DefaultParser
This commit is contained in:
+41
-13
@@ -4,7 +4,7 @@ from datetime import datetime, date
|
||||
import hashlib
|
||||
import json
|
||||
import zlib
|
||||
from sdp.sheerkaSerializer import Serializer
|
||||
from sdp.sheerkaSerializer import Serializer, SerializerContext
|
||||
|
||||
|
||||
def json_default_converter(o):
|
||||
@@ -38,15 +38,15 @@ class Event(object):
|
||||
if not isinstance(self.message, str):
|
||||
raise NotImplementedError
|
||||
|
||||
return hashlib.sha256(f"{self.user}{self.date}{self.message}".encode("utf-8")).hexdigest()
|
||||
return hashlib.sha256(f"Event:{self.user}{self.date}{self.message}".encode("utf-8")).hexdigest()
|
||||
|
||||
def to_json(self):
|
||||
return json.dumps(self.__dict__, default=json_default_converter)
|
||||
def to_dict(self):
|
||||
return self.__dict__
|
||||
|
||||
def from_json(self, json_message):
|
||||
self.user = json_message["user"]
|
||||
self.date = datetime.fromisoformat(json_message["date"])
|
||||
self.message = json_message["message"]
|
||||
def from_dict(self, as_dict):
|
||||
self.user = as_dict["user"]
|
||||
self.date = datetime.fromisoformat(as_dict["date"])
|
||||
self.message = as_dict["message"]
|
||||
|
||||
|
||||
class State:
|
||||
@@ -120,6 +120,7 @@ class SheerkaDataProvider:
|
||||
|
||||
EventFolder = "events"
|
||||
StateFolder = "state"
|
||||
ObjectsFolder = "objects"
|
||||
CacheFolder = "cache"
|
||||
HeadFile = "HEAD"
|
||||
KeysFile = "keys"
|
||||
@@ -135,6 +136,9 @@ class SheerkaDataProvider:
|
||||
|
||||
self.serializer = Serializer()
|
||||
|
||||
def get_obj_path(self, object_type, digest):
|
||||
path.join(self.root, object_type, digest[:24], digest)
|
||||
|
||||
def add(self, event: Event, entry, obj):
|
||||
"""
|
||||
Adds obj to the entry 'entry'
|
||||
@@ -366,7 +370,7 @@ class SheerkaDataProvider:
|
||||
os.makedirs(path.dirname(target_path))
|
||||
|
||||
with open(target_path, "wb") as f:
|
||||
f.write(self.serializer.serialize(event).read())
|
||||
f.write(self.serializer.serialize(event, None).read())
|
||||
|
||||
return digest
|
||||
|
||||
@@ -378,7 +382,7 @@ class SheerkaDataProvider:
|
||||
"""
|
||||
target_path = path.join(self.root, SheerkaDataProvider.EventFolder, digest[:24], digest)
|
||||
with open(target_path, "rb") as f:
|
||||
return self.serializer.deserialize(f)
|
||||
return self.serializer.deserialize(f, None)
|
||||
|
||||
def save_state(self, state: State):
|
||||
digest = state.get_digest()
|
||||
@@ -390,7 +394,7 @@ class SheerkaDataProvider:
|
||||
os.makedirs(path.dirname(target_path))
|
||||
|
||||
with open(target_path, "wb") as f:
|
||||
f.write(self.serializer.serialize(state).read())
|
||||
f.write(self.serializer.serialize(state, None).read())
|
||||
|
||||
return digest
|
||||
|
||||
@@ -400,7 +404,32 @@ class SheerkaDataProvider:
|
||||
|
||||
target_path = path.join(self.root, SheerkaDataProvider.StateFolder, digest[:24], digest)
|
||||
with open(target_path, "rb") as f:
|
||||
return self.serializer.deserialize(f)
|
||||
return self.serializer.deserialize(f, None)
|
||||
|
||||
def save_obj(self, obj):
|
||||
if hasattr(obj, "key") and hasattr(obj, "key_name") and obj.key is None:
|
||||
obj.key = self.get_next_key(obj.key_name)
|
||||
|
||||
digest = obj.get_digest()
|
||||
target_path = path.join(self.root, SheerkaDataProvider.ObjectsFolder, digest[:24], digest)
|
||||
if path.exists(target_path):
|
||||
return digest
|
||||
|
||||
if not path.exists(path.dirname(target_path)):
|
||||
os.makedirs(path.dirname(target_path))
|
||||
|
||||
with open(target_path, "wb") as f:
|
||||
f.write(self.serializer.serialize(obj, SerializerContext("kodjo", digest)).read())
|
||||
|
||||
return digest
|
||||
|
||||
def load_obj(self, digest):
|
||||
if digest is None:
|
||||
return State()
|
||||
|
||||
target_path = path.join(self.root, SheerkaDataProvider.ObjectsFolder, digest[:24], digest)
|
||||
with open(target_path, "rb") as f:
|
||||
return self.serializer.deserialize(f, SerializerContext("kodjo", digest))
|
||||
|
||||
def get_cache_params(self, category, key):
|
||||
digest = hashlib.sha3_256(f"{category}:{key}".encode("utf-8")).hexdigest()
|
||||
@@ -507,4 +536,3 @@ class SheerkaDataProvider:
|
||||
keys[entry] = value
|
||||
self.save_keys(keys)
|
||||
return str(value)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user