Fixed list of concepts

This commit is contained in:
2020-05-15 11:06:12 +02:00
parent 5489ef00b9
commit b54882f994
4 changed files with 1128 additions and 1089 deletions
@@ -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"
+1 -1
View File
@@ -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:
+40
View File
@@ -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
File diff suppressed because it is too large Load Diff