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'}