Refactored to allow ConceptEvaluator

This commit is contained in:
2019-11-14 22:04:38 +01:00
parent 576ce77740
commit 9e10e77737
30 changed files with 2406 additions and 1007 deletions
+27 -7
View File
@@ -133,7 +133,7 @@ class State:
for item in items:
item_digest = SheerkaDataProvider.get_obj_digest(item)
if item_digest == digest:
raise SheerkaDataProviderDuplicateKeyError("duplicate key", key, obj.obj)
raise SheerkaDataProviderDuplicateKeyError(key, obj.obj)
def update(self, entry, obj: ObjToUpdate, append=True):
"""
@@ -258,8 +258,8 @@ class SheerkaDataProviderError(Exception):
class SheerkaDataProviderDuplicateKeyError(Exception):
def __init__(self, message, key, obj):
Exception.__init__(self, message)
def __init__(self, key, obj):
Exception.__init__(self, "Duplicate object.")
self.key = key
self.obj = obj
@@ -371,7 +371,6 @@ class SheerkaDataProvider:
state.parents = [] if snapshot is None else [snapshot]
state.events = [event_digest]
state.date = datetime.now()
log.debug(state.data)
if use_ref:
obj.set_digest(self.save_obj(obj.obj))
@@ -579,15 +578,36 @@ class SheerkaDataProvider:
return self.load_ref_if_needed(state.data[entry] if key is None else state.data[entry][key])[0]
def exists(self, entry):
def exists(self, entry, key=None, digest=None):
"""
Returns true if the entry is defined
:param digest:
:param key:
:param entry:
:return:
"""
snapshot = self.get_snapshot()
state = self.load_state(snapshot)
return entry in state.data
exist = entry in state.data
if not exist or key is None:
return exist
items = state.data[entry]
exist = key in items
if not exist or digest is None:
return exist
items = items[key]
if not isinstance(items, list):
items = [items]
for item in items:
item_digest = SheerkaDataProvider.get_obj_digest(item)
if item_digest == digest:
return True
return False
def save_event(self, event: Event):
"""
@@ -657,7 +677,7 @@ class SheerkaDataProvider:
with open(target_path, "wb") as f:
f.write(stream.read())
log.debug(f"...digest is {digest}.")
log.debug(f"...digest={digest}.")
return digest
def load_obj(self, digest):
+5
View File
@@ -5,6 +5,8 @@ import struct
import io
from dataclasses import dataclass
import logging
from enum import Enum
import core.utils
from core.concept import Concept
@@ -23,6 +25,9 @@ def json_default_converter(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
if isinstance(o, Enum):
return o.key
@dataclass()
class SerializerContext: