Refactored to allow ConceptEvaluator
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user