We can now use concept sets in BNF definitions
This commit is contained in:
@@ -346,7 +346,7 @@ class SheerkaDataProvider:
|
||||
def is_reference(obj):
|
||||
return isinstance(obj, str) and obj.startswith(SheerkaDataProvider.REF_PREFIX)
|
||||
|
||||
def add(self, event_digest: str, entry, obj, allow_multiple=True, use_ref=False):
|
||||
def add(self, event_digest: str, entry, obj, allow_multiple=True, use_ref=False, is_ref=False):
|
||||
"""
|
||||
Adds obj to the entry 'entry'
|
||||
:param event_digest: digest of the event that triggers the modification of the state
|
||||
@@ -359,6 +359,12 @@ class SheerkaDataProvider:
|
||||
:return: (entry, key) to retrieve the object
|
||||
"""
|
||||
|
||||
if use_ref and is_ref:
|
||||
raise SheerkaDataProviderError("Cannot use use_ref and is_ref at the same time", None)
|
||||
|
||||
if is_ref and not isinstance(obj, dict):
|
||||
raise SheerkaDataProviderError("is_ref can only be used with dictionaries", obj)
|
||||
|
||||
snapshot = self.get_snapshot()
|
||||
state = self.load_state(snapshot)
|
||||
|
||||
@@ -387,6 +393,10 @@ class SheerkaDataProvider:
|
||||
obj.set_digest(self.save_obj(obj.obj))
|
||||
obj.obj = self.REF_PREFIX + obj.get_digest()
|
||||
|
||||
if is_ref:
|
||||
for k, v in obj.obj.items():
|
||||
obj.obj[k] = self.REF_PREFIX + v
|
||||
|
||||
state.update(entry, obj)
|
||||
|
||||
new_snapshot = self.save_state(state)
|
||||
@@ -427,16 +437,24 @@ class SheerkaDataProvider:
|
||||
self.set_snapshot(new_snapshot)
|
||||
return (None if already_exist else entry), None
|
||||
|
||||
def set(self, event_digest, entry, obj, use_ref=False):
|
||||
def set(self, event_digest, entry, obj, use_ref=False, is_ref=False):
|
||||
"""
|
||||
Add or replace an entry. The entry is reinitialized.
|
||||
If the previous value was dict, all keys are lost
|
||||
:param event_digest:
|
||||
:param entry:
|
||||
:param obj:
|
||||
:param use_ref:
|
||||
:param use_ref: Do not save obj in State (save it under objects), use_ref in State
|
||||
:param is_ref: obj is supposed to be a reference
|
||||
:return:
|
||||
"""
|
||||
|
||||
if use_ref and is_ref:
|
||||
raise SheerkaDataProviderError("Cannot use use_ref and is_ref at the same time", None)
|
||||
|
||||
if is_ref and not isinstance(obj, dict):
|
||||
raise SheerkaDataProviderError("is_ref can only be used with dictionaries", obj)
|
||||
|
||||
snapshot = self.get_snapshot()
|
||||
state = self.load_state(snapshot)
|
||||
|
||||
@@ -447,6 +465,10 @@ class SheerkaDataProvider:
|
||||
key = self.get_obj_key(obj)
|
||||
obj = self.save_ref_if_needed(use_ref, obj)
|
||||
|
||||
if is_ref:
|
||||
for k, v in obj.items():
|
||||
obj[k] = self.REF_PREFIX + v
|
||||
|
||||
state.data[entry] = obj if key is None else {key: obj}
|
||||
|
||||
new_snapshot = self.save_state(state)
|
||||
|
||||
Reference in New Issue
Block a user