Implemented SheerkaOntology

This commit is contained in:
2021-01-11 15:36:03 +01:00
parent e3c2adb533
commit e26c83a825
119 changed files with 6876 additions and 2002 deletions
@@ -2,6 +2,7 @@ import logging
import pytest
from core.concept import Concept
from core.global_symbols import NotInit, NotFound, Removed
from core.tokenizer import Keywords
from sheerkapickle import tags
from sheerkapickle.SheerkaPickler import SheerkaPickler
@@ -55,6 +56,19 @@ class TestSheerkaPickler(TestUsingMemoryBasedSheerka):
decoded = SheerkaUnpickler(sheerka).restore(flatten)
assert decoded == obj
@pytest.mark.parametrize("obj, expected", [
(NotInit, {tags.CUSTOM: NotInit.value}),
(NotFound, {tags.CUSTOM: NotFound.value}),
(Removed, {tags.CUSTOM: Removed.value}),
])
def test_i_can_flatten_and_restore_custom_types(self, obj, expected):
sheerka = self.get_sheerka()
flatten = SheerkaPickler(sheerka).flatten(obj)
assert flatten == expected
decoded = SheerkaUnpickler(sheerka).restore(flatten)
assert decoded == obj
def test_i_can_flatten_and_restore_instances(self):
sheerka = self.get_sheerka()
@@ -175,3 +189,18 @@ class TestSheerkaPickler(TestUsingMemoryBasedSheerka):
flatten = SheerkaPickler(sheerka).flatten(obj)
decoded = SheerkaUnpickler(sheerka).restore(flatten)
assert decoded == Obj("foo", None, {"a": None, "b": None})
def test_ontology_are_not_serialized(self):
sheerka, context = self.init_test().unpack()
sheerka.push_ontology(context, "new ontology")
ontology = sheerka.pop_ontology().body.body
obj = sheerka.ret(sheerka.name, True, ontology)
flatten = SheerkaPickler(sheerka).flatten(obj)
assert flatten == {
'_sheerka/obj': 'core.builtin_concepts.ReturnValueConcept',
'concept/id': ('__RETURN_VALUE', '43'),
'status': True,
'value': 'new ontology',
'who': '__SHEERKA'}
+1 -1
View File
@@ -69,7 +69,7 @@ class TestSheerkaPickleHandler(TestUsingMemoryBasedSheerka):
to_string = sheerkapickle.encode(sheerka, concept)
decoded = sheerkapickle.decode(sheerka, to_string)
assert decoded == concept
assert to_string == '{"_sheerka/obj": "core.concept.Concept", "meta.name": "foo", "meta.variables": [["a", "value_a"], ["b", "value_b"]], "values": [["a", null], ["b", null]]}'
assert to_string == '{"_sheerka/obj": "core.concept.Concept", "meta.name": "foo", "meta.variables": [["a", "value_a"], ["b", "value_b"]], "values": [["a", {"_sheerka/custom": "**NotInit**"}], ["b", {"_sheerka/id": 1}]]}'
concept = Concept("foo").init_key()
sheerka.create_new_concept(self.get_context(sheerka), concept)