Working on #98 : Persist attribute value when global_truth is set to true
This commit is contained in:
@@ -4,7 +4,7 @@ from cache.CacheManager import ConceptNotFound
|
||||
from core.builtin_concepts import BuiltinConcepts
|
||||
from core.builtin_helpers import ensure_bnf
|
||||
from core.concept import PROPERTIES_TO_SERIALIZE, Concept, DEFINITION_TYPE_DEF, get_concept_attrs, \
|
||||
DEFINITION_TYPE_BNF
|
||||
DEFINITION_TYPE_BNF, ConceptParts
|
||||
from core.global_symbols import NotInit, NotFound, SyaAssociativity, CONCEPT_COMPARISON_CONTEXT
|
||||
from core.sheerka.services.SheerkaConceptManager import SheerkaConceptManager, NoModificationFound, ForbiddenAttribute, \
|
||||
UnknownAttribute, CannotRemoveMeta, ValueNotFound, ConceptIsReferenced, NoFirstTokenError
|
||||
@@ -494,13 +494,13 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
to_add = {"meta": {"name": "b bar c d"},
|
||||
"variables": {"c": None, "d": None}}
|
||||
|
||||
to_remove = {"variables": ["a"]}
|
||||
|
||||
res = sheerka.modify_concept(context, foo, to_add, to_remove)
|
||||
res = sheerka.modify_concept(context, foo, to_add)
|
||||
new_concept = res.body.body
|
||||
|
||||
assert res.status
|
||||
assert new_concept.key == "__var__0 bar __var__1 __var__2"
|
||||
assert new_concept.key == "__var__1 bar __var__2 __var__3"
|
||||
assert new_concept.get_metadata().parameters == ["b", "c", "d"]
|
||||
assert new_concept.get_metadata().variables == [("a", None), ("b", None), ("c", None), ("d", None)]
|
||||
|
||||
def test_key_is_modified_when_modifying_the_definition(self):
|
||||
sheerka, context, foo = self.init_concepts(
|
||||
@@ -790,13 +790,101 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
prop = Concept("property")
|
||||
bar = Concept("bar")
|
||||
|
||||
res = sheerka.set_attr(foo, prop, bar)
|
||||
res = sheerka.set_attr(context, foo, prop, bar)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.SUCCESS)
|
||||
|
||||
assert sheerka.get_attr(foo, prop) == bar
|
||||
|
||||
def test_i_setting_twice_the_same_property_creates_a_list(self):
|
||||
def test_i_can_get_and_set_attribute_when_global_truth_is_set(self):
|
||||
sheerka, context, foo, adjective, color, red, brightness, dark = self.init_test(cache_only=False).with_concepts(
|
||||
"foo",
|
||||
"adjective",
|
||||
"color",
|
||||
"red",
|
||||
"brightness",
|
||||
"dark",
|
||||
create_new=True).unpack()
|
||||
service = sheerka.services[SheerkaConceptManager.NAME]
|
||||
global_truth_context = self.get_context(sheerka, global_truth=True)
|
||||
|
||||
color_instance = sheerka.new("color", body=sheerka.new("red"))
|
||||
sheerka.set_attr(context, color_instance, brightness, sheerka.new("dark"))
|
||||
sheerka.set_isa(context, color_instance, sheerka.new(adjective))
|
||||
|
||||
adjective_instance = sheerka.new("adjective")
|
||||
adjective_instance.set_value(ConceptParts.BODY, color_instance)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
res = sheerka.set_attr(global_truth_context, foo_instance, sheerka.new("adjective"), adjective_instance)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NEW_CONCEPT)
|
||||
|
||||
# foo.adjective is modified
|
||||
resolved_adjective = sheerka.get_attr(foo_instance, sheerka.new("adjective"))
|
||||
assert sheerka.isinstance(resolved_adjective, "adjective")
|
||||
resolved_color = resolved_adjective.body
|
||||
assert sheerka.isinstance(resolved_color, "color")
|
||||
assert sheerka.isa(resolved_color, adjective)
|
||||
assert sheerka.get_attr(resolved_color, brightness) == dark
|
||||
assert resolved_color.body == red
|
||||
|
||||
# foo default variable value is modified
|
||||
adjective_from_default_var = foo_instance.get_metadata().variables[0][1]
|
||||
assert sheerka.isinstance(adjective_from_default_var, "adjective")
|
||||
color_from_default_var = resolved_adjective.body
|
||||
assert sheerka.isinstance(color_from_default_var, "color")
|
||||
assert sheerka.isa(color_from_default_var, adjective)
|
||||
assert sheerka.get_attr(color_from_default_var, brightness) == dark
|
||||
assert color_from_default_var.body == red
|
||||
|
||||
# new instance are update
|
||||
new_instance = sheerka.new("foo")
|
||||
resolved_adjective = sheerka.get_attr(new_instance, sheerka.new("adjective"))
|
||||
assert sheerka.isinstance(resolved_adjective, "adjective")
|
||||
resolved_color = resolved_adjective.body
|
||||
assert sheerka.isinstance(resolved_color, "color")
|
||||
assert sheerka.isa(resolved_color, adjective)
|
||||
assert sheerka.get_attr(resolved_color, brightness) == dark
|
||||
assert resolved_color.body == red
|
||||
# No need to check the default variable value since the attribute is updated
|
||||
|
||||
# make sure it's persisted in DB
|
||||
sheerka.om.commit(context)
|
||||
from_db = sheerka.om.current_sdp().get(service.CONCEPTS_BY_ID_ENTRY, foo.id)
|
||||
# concepts values are never persisted in DB.
|
||||
# only check the default value of the variable
|
||||
adjective_from_default_var = from_db.get_metadata().variables[0][1]
|
||||
assert sheerka.isinstance(adjective_from_default_var, "adjective")
|
||||
color_from_default_var = resolved_adjective.body
|
||||
assert sheerka.isinstance(color_from_default_var, "color")
|
||||
assert sheerka.isa(color_from_default_var, adjective)
|
||||
assert sheerka.get_attr(color_from_default_var, brightness) == dark
|
||||
assert color_from_default_var.body == red
|
||||
|
||||
# check that we can access the values
|
||||
assert foo_instance.values() == {'c:adjective|1002:': adjective_instance}
|
||||
assert new_instance.values() == {'c:adjective|1002:': adjective_instance}
|
||||
assert from_db.values() == {'c:adjective|1002:': NotInit}
|
||||
assert foo.values() == {'c:adjective|1002:': NotInit}
|
||||
|
||||
def test_i_can_set_attr_twice_is_the_second_time_global_truth_is_true(self):
|
||||
sheerka, context, foo, prop, value = self.init_test(cache_only=False).with_concepts(
|
||||
"foo",
|
||||
"prop",
|
||||
"value",
|
||||
create_new=True).unpack()
|
||||
global_truth_context = self.get_context(sheerka, global_truth=True)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
sheerka.set_attr(context, foo_instance, prop, value)
|
||||
|
||||
sheerka.set_attr(global_truth_context, foo_instance, prop, value)
|
||||
|
||||
new_instance = sheerka.new("foo")
|
||||
assert sheerka.get_attr(new_instance, prop) == value
|
||||
|
||||
def test_setting_twice_the_same_property_creates_a_list(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
foo = Concept("foo")
|
||||
prop = Concept("property")
|
||||
@@ -804,22 +892,22 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
baz = Concept("baz")
|
||||
qux = Concept("qux")
|
||||
|
||||
res = sheerka.set_attr(foo, prop, bar)
|
||||
res = sheerka.set_attr(context, foo, prop, bar)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_attr(foo, prop) == bar
|
||||
|
||||
res = sheerka.set_attr(foo, prop, bar) # again, same value as no effect
|
||||
res = sheerka.set_attr(context, foo, prop, bar) # again, same value as no effect
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_attr(foo, prop) == bar
|
||||
|
||||
res = sheerka.set_attr(foo, prop, baz)
|
||||
res = sheerka.set_attr(context, foo, prop, baz)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_attr(foo, prop) == [bar, baz]
|
||||
|
||||
res = sheerka.set_attr(foo, prop, qux)
|
||||
res = sheerka.set_attr(context, foo, prop, qux)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_attr(foo, prop) == [bar, baz, qux]
|
||||
@@ -1241,7 +1329,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
prop = Concept("property")
|
||||
bar = Concept("bar")
|
||||
|
||||
sheerka.set_attr(foo, prop, bar)
|
||||
sheerka.set_attr(context, foo, prop, bar)
|
||||
assert sheerka.smart_get_attr(foo, prop) == bar
|
||||
|
||||
def test_i_can_smart_get_attr_when_simple_isa(self):
|
||||
@@ -1256,7 +1344,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
adjective_instance = sheerka.new(adjective, body=color_instance)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, adjective_instance)
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, color) == color_instance
|
||||
assert sheerka.objvalue(sheerka.smart_get_attr(table_instance, color)) == red
|
||||
@@ -1276,7 +1364,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
color_instance = sheerka.new(color, body=reddish_instance)
|
||||
adjective_instance = sheerka.new(adjective, body=color_instance)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, adjective_instance)
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, reddish_instance) == reddish_instance
|
||||
assert sheerka.objvalue(sheerka.smart_get_attr(table_instance, color)) == red
|
||||
@@ -1296,12 +1384,12 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
# add red color
|
||||
red_color_instance = sheerka.new(color, body=red)
|
||||
red_adjective_instance = sheerka.new(adjective, body=red_color_instance)
|
||||
sheerka.set_attr(table_instance, adjective, red_adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, red_adjective_instance)
|
||||
|
||||
# add blue color
|
||||
blue_color_instance = sheerka.new(color, body=blue)
|
||||
blue_adjective_instance = sheerka.new(adjective, body=blue_color_instance)
|
||||
sheerka.set_attr(table_instance, adjective, blue_adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, blue_adjective_instance)
|
||||
|
||||
res = sheerka.smart_get_attr(table_instance, color)
|
||||
assert res == [red_color_instance, blue_color_instance]
|
||||
@@ -1317,7 +1405,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, color, color_instance)
|
||||
sheerka.set_attr(context, table_instance, color, color_instance)
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, adjective) == color_instance
|
||||
|
||||
@@ -1336,9 +1424,9 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
table_instance = sheerka.new(table)
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
sheerka.set_attr(table_instance, color, color_instance)
|
||||
sheerka.set_attr(context, table_instance, color, color_instance)
|
||||
size_instance = sheerka.new(size, body=large)
|
||||
sheerka.set_attr(table_instance, size, size_instance)
|
||||
sheerka.set_attr(context, table_instance, size, size_instance)
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, adjective) == [color_instance, size_instance]
|
||||
|
||||
@@ -1355,8 +1443,8 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
adjective_instance = sheerka.new(adjective, body=color_instance)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(table_instance, color, blue) # set direct color value
|
||||
sheerka.set_attr(context, table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, color, blue) # set direct color value
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, color) == blue
|
||||
|
||||
@@ -1372,8 +1460,8 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, color, color_instance)
|
||||
sheerka.set_attr(table_instance, adjective, blue) # set direct color value
|
||||
sheerka.set_attr(context, table_instance, color, color_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, blue) # set direct color value
|
||||
|
||||
assert sheerka.smart_get_attr(table_instance, adjective) == blue
|
||||
|
||||
@@ -1397,7 +1485,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
adjective_instance = sheerka.new(adjective, body=color_instance)
|
||||
table_instance = sheerka.new(table)
|
||||
sheerka.set_attr(table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, adjective_instance)
|
||||
|
||||
res = sheerka.smart_get_attr(table_instance, color)
|
||||
assert sheerka.isinstance(res, BuiltinConcepts.NOT_FOUND)
|
||||
@@ -1417,7 +1505,7 @@ class TestSheerkaConceptManager(TestUsingMemoryBasedSheerka):
|
||||
table_instance = sheerka.new(table)
|
||||
color_instance = sheerka.new(color, body=red)
|
||||
adjective_instance = sheerka.new(adjective, body=color_instance)
|
||||
sheerka.set_attr(table_instance, adjective, adjective_instance)
|
||||
sheerka.set_attr(context, table_instance, adjective, adjective_instance)
|
||||
|
||||
res = sheerka.smart_get_attr(table_instance, size)
|
||||
assert sheerka.isinstance(res, BuiltinConcepts.NOT_FOUND)
|
||||
|
||||
Reference in New Issue
Block a user