Fixed list of concepts
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import core.utils
|
||||
from core.builtin_concepts import BuiltinConcepts, ErrorConcept
|
||||
from core.concept import Concept
|
||||
from sdp.sheerkaDataProvider_Old import SheerkaDataProviderDuplicateKeyError
|
||||
|
||||
BNF_NODE_PARSER_CLASS = "parsers.BnfNodeParser_Old.BnfNodeParser"
|
||||
BASE_NODE_PARSER_CLASS = "parsers.BaseNodeParser.BaseNodeParser"
|
||||
|
||||
@@ -18,7 +18,7 @@ class SheerkaDump:
|
||||
self.sheerka = sheerka
|
||||
|
||||
def dump_concepts(self):
|
||||
lst = self.sheerka.sdp.list(self.sheerka.CONCEPTS_BY_KEY_ENTRY)
|
||||
lst = self.sheerka.sdp.list(self.sheerka.CONCEPTS_BY_ID_ENTRY)
|
||||
for item in lst:
|
||||
if hasattr(item, "__iter__"):
|
||||
for i in item:
|
||||
|
||||
@@ -89,6 +89,13 @@ class State:
|
||||
return hashlib.sha256(as_json.encode("utf-8")).hexdigest()
|
||||
|
||||
|
||||
class SheerkaDataProviderDuplicateKeyError(Exception):
|
||||
def __init__(self, key, obj):
|
||||
Exception.__init__(self, "Duplicate object.")
|
||||
self.key = key
|
||||
self.obj = obj
|
||||
|
||||
|
||||
@dataclass
|
||||
class SheerkaDataProviderResult:
|
||||
"""
|
||||
@@ -224,6 +231,39 @@ class SheerkaDataProvider:
|
||||
return {self.load_ref_if_needed(i, load_origin) for i in item}
|
||||
return self.load_ref_if_needed(item, load_origin)
|
||||
|
||||
def list(self, entry, filter=None):
|
||||
"""
|
||||
Lists elements of entry 'entry'
|
||||
:param entry: name of the entry to list
|
||||
:param filter: filter to use
|
||||
:return: list of elements
|
||||
"""
|
||||
snapshot = self.get_snapshot(SheerkaDataProvider.HeadFile)
|
||||
state = self.load_state(snapshot)
|
||||
if entry not in state.data:
|
||||
return []
|
||||
|
||||
elements = state.data[entry]
|
||||
|
||||
if isinstance(elements, dict):
|
||||
# manage when elements have a key
|
||||
filter_to_use = (lambda k, o: True) if filter is None else filter
|
||||
for key, element in elements.items():
|
||||
if filter_to_use(key, element):
|
||||
if isinstance(element, list):
|
||||
yield [self.load_ref_if_needed(e) for e in element]
|
||||
else:
|
||||
yield self.load_ref_if_needed(element)
|
||||
else:
|
||||
# manage when no key is defined for the elements
|
||||
if not isinstance(elements, list) and not isinstance(elements, set):
|
||||
elements = [elements]
|
||||
|
||||
filter_to_use = (lambda o: True) if filter is None else filter
|
||||
for element in elements:
|
||||
if filter_to_use(element):
|
||||
yield self.load_ref_if_needed(element)
|
||||
|
||||
def exists(self, entry, key=None):
|
||||
"""
|
||||
Returns true if the entry is defined
|
||||
|
||||
+1087
-1087
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user