Added first version of DebugManager. Implemented draft of the rule engine

This commit is contained in:
2020-11-20 13:41:45 +01:00
parent cd066881b4
commit 315f8ea09b
156 changed files with 8388 additions and 2852 deletions
+50 -13
View File
@@ -1,6 +1,7 @@
import pytest
from core.builtin_concepts import BuiltinConcepts
from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF
from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF, ALL_ATTRIBUTES, get_concept_attrs
@pytest.mark.parametrize("name, variables, expected", [
@@ -24,7 +25,7 @@ from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF
def test_i_can_compute_the_key(name, variables, expected):
concept = Concept(name)
for var_name in variables:
concept.metadata.variables.append((var_name, None))
concept.get_metadata().variables.append((var_name, None))
concept.init_key()
assert concept.key == expected
@@ -33,17 +34,17 @@ def test_i_can_compute_the_key(name, variables, expected):
def test_i_can_compute_the_key_when_from_definition():
# if definition is not defined, use the name
concept = Concept()
concept.metadata.name = "hello a"
concept.metadata.variables = [("a", None)]
concept.get_metadata().name = "hello a"
concept.get_metadata().variables = [("a", None)]
concept.init_key()
assert concept.key == "hello __var__0"
# if definition is defined, use it
concept = Concept()
concept.metadata.name = "greetings"
concept.metadata.definition = "hello a"
concept.metadata.definition_type = DEFINITION_TYPE_DEF
concept.metadata.variables = [("a", None)]
concept.get_metadata().name = "greetings"
concept.get_metadata().definition = "hello a"
concept.get_metadata().definition_type = DEFINITION_TYPE_DEF
concept.get_metadata().variables = [("a", None)]
concept.init_key()
assert concept.key == "hello __var__0"
@@ -52,7 +53,7 @@ def test_key_does_not_use_variable_when_definition_is_set():
concept = Concept("plus").def_var('plus')
concept.init_key()
assert concept.metadata.key == "plus"
assert concept.get_metadata().key == "plus"
def test_i_can_serialize():
@@ -181,6 +182,8 @@ def test_i_can_compare_concepts():
def test_i_can_detect_concept_differences():
ALL_ATTRIBUTES.clear()
assert Concept(name="concept_name") != Concept()
assert Concept(is_builtin=True) != Concept()
assert Concept(is_unique=True) != Concept()
@@ -197,14 +200,18 @@ def test_i_can_detect_concept_differences():
assert Concept().add_prop("a", "b") != Concept()
assert Concept().set_value("a", "b") != Concept()
def test_compiled_is_not_used_when_comparing_concepts():
ALL_ATTRIBUTES.clear()
concept = Concept()
concept.compiled["foo"] = "value"
concept.get_compiled()["foo"] = "value"
assert concept == Concept() # compiled is not used in the comparison
def test_i_can_compare_concept_with_circular_reference():
foo = Concept("foo")
foo.metadata.body = foo
foo.get_metadata().body = foo
assert foo == foo
@@ -213,7 +220,7 @@ def test_i_can_compare_concept_with_sophisticated_circular_reference():
foo = Concept("foo")
bar = Concept("foo", body=foo)
baz = Concept("foo", body=bar)
foo.metadata.body = baz
foo.get_metadata().body = baz
assert foo != bar
@@ -222,12 +229,14 @@ def test_i_can_compare_concept_with_sophisticated_circular_reference_in_other_me
foo = Concept("foo")
bar = Concept("foo", pre=foo)
baz = Concept("foo", pre=bar)
foo.metadata.pre = baz
foo.get_metadata().pre = baz
assert foo != bar
def test_i_can_update_from():
ALL_ATTRIBUTES.clear()
template = Concept(
name="concept_name",
is_builtin=True,
@@ -242,6 +251,9 @@ def test_i_can_update_from():
desc="this this the desc",
id="123456"
).def_var("a", "10").def_var("b", None)
template.add_prop(BuiltinConcepts.ISA, Concept("foo").def_var("x", "value_x"))
template.add_prop(BuiltinConcepts.HASA, Concept("bar").def_var("x", "value_x"))
template.set_prop(BuiltinConcepts.AUTO_EVAL, True)
# make sure origin is preserved
setattr(template, "##origin##", "digest")
@@ -257,3 +269,28 @@ def test_i_can_update_from():
assert concept == template
assert getattr(concept, "##origin##") == "digest"
def test_i_can_manage_concepts_attributes():
ALL_ATTRIBUTES.clear()
concept = Concept("foo")
assert get_concept_attrs(concept) == []
assert concept.values() == {}
concept.set_value(ConceptParts.BODY, "I have a body!")
assert concept.values() == {"#body#": "I have a body!"}
def test_attributes_are_generated_once_for_all():
ALL_ATTRIBUTES.clear()
concept = Concept("foo")
concept.get_metadata().id = "id"
concept.set_value("key1", "value1")
concept.set_value("key2", "value2")
assert get_concept_attrs(concept) == ["key1", "key2"]
assert concept.values() == {"key1": "value1", "key2": "value2"}
concept.set_value("key3", "value3") # too late for it !
assert get_concept_attrs(concept) == ["key1", "key2"]
assert concept.values() == {"key1": "value1", "key2": "value2"}