I can define and eval BNF definitions
This commit is contained in:
+14
-15
@@ -1,5 +1,3 @@
|
||||
# from os import path
|
||||
# import os
|
||||
from datetime import datetime, date
|
||||
import hashlib
|
||||
import json
|
||||
@@ -542,7 +540,7 @@ class SheerkaDataProvider:
|
||||
self.set_snapshot(new_snapshot)
|
||||
return new_snapshot
|
||||
|
||||
def get(self, entry, key=None):
|
||||
def get(self, entry, key=None, load_origin=True):
|
||||
"""
|
||||
Retrieve an element by its key
|
||||
:param entry:
|
||||
@@ -560,11 +558,11 @@ class SheerkaDataProvider:
|
||||
|
||||
item = state.data[entry] if key is None else state.data[entry][key]
|
||||
if isinstance(item, list):
|
||||
return [self.load_ref_if_needed(i)[0] for i in item]
|
||||
return [self.load_ref_if_needed(i, load_origin)[0] for i in item]
|
||||
|
||||
return self.load_ref_if_needed(item)[0]
|
||||
return self.load_ref_if_needed(item, load_origin)[0]
|
||||
|
||||
def get_safe(self, entry, key=None):
|
||||
def get_safe(self, entry, key=None, load_origin=True):
|
||||
"""
|
||||
Retrieve an element by its key. Return None if the element does not exist
|
||||
:param entry:
|
||||
@@ -582,9 +580,9 @@ class SheerkaDataProvider:
|
||||
|
||||
item = state.data[entry] if key is None else state.data[entry][key]
|
||||
if isinstance(item, list):
|
||||
return [self.load_ref_if_needed(i)[0] for i in item]
|
||||
return [self.load_ref_if_needed(i, load_origin)[0] for i in item]
|
||||
|
||||
return self.load_ref_if_needed(item)[0]
|
||||
return self.load_ref_if_needed(item, load_origin)[0]
|
||||
|
||||
def exists(self, entry, key=None, digest=None):
|
||||
"""
|
||||
@@ -676,7 +674,7 @@ class SheerkaDataProvider:
|
||||
log.debug(f"...digest={digest}.")
|
||||
return digest
|
||||
|
||||
def load_obj(self, digest):
|
||||
def load_obj(self, digest, add_origin=True):
|
||||
if digest is None:
|
||||
return None
|
||||
|
||||
@@ -688,19 +686,20 @@ class SheerkaDataProvider:
|
||||
obj = self.serializer.deserialize(f, SerializerContext(origin=digest))
|
||||
|
||||
# set the origin of the object
|
||||
if isinstance(obj, dict):
|
||||
obj[Serializer.ORIGIN] = digest
|
||||
elif not isinstance(obj, str):
|
||||
setattr(obj, Serializer.ORIGIN, digest)
|
||||
if add_origin:
|
||||
if isinstance(obj, dict):
|
||||
obj[Serializer.ORIGIN] = digest
|
||||
elif not isinstance(obj, str):
|
||||
setattr(obj, Serializer.ORIGIN, digest)
|
||||
return obj
|
||||
|
||||
def load_ref_if_needed(self, obj):
|
||||
def load_ref_if_needed(self, obj, load_origin=True):
|
||||
if not isinstance(obj, str):
|
||||
return obj, False
|
||||
if not obj.startswith(SheerkaDataProvider.REF_PREFIX):
|
||||
return obj, False
|
||||
|
||||
resolved = self.load_obj(obj[len(SheerkaDataProvider.REF_PREFIX):])
|
||||
resolved = self.load_obj(obj[len(SheerkaDataProvider.REF_PREFIX):], load_origin)
|
||||
if resolved is None:
|
||||
return obj, False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user