Fixed concept token parsing
This commit is contained in:
@@ -799,9 +799,6 @@ class Sheerka(Concept):
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(a, BuiltinConcepts): # common KSI error ;-)
|
|
||||||
raise SyntaxError("Remember that the first parameter of isinstance MUST be a concept")
|
|
||||||
|
|
||||||
if not isinstance(a, Concept):
|
if not isinstance(a, Concept):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -150,12 +150,7 @@ class SheerkaSetsManager(BaseService):
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(a, BuiltinConcepts): # common KSI error ;-)
|
|
||||||
raise SyntaxError("Remember that the first parameter of isinstance MUST be a concept")
|
|
||||||
|
|
||||||
ensure_concept(a, b)
|
ensure_concept(a, b)
|
||||||
# if not (isinstance(a, Concept) and isinstance(b, Concept)):
|
|
||||||
# return False
|
|
||||||
|
|
||||||
# TODO, first check the 'isa' property of a
|
# TODO, first check the 'isa' property of a
|
||||||
if not (a.id and b.id):
|
if not (a.id and b.id):
|
||||||
|
|||||||
+4
-1
@@ -331,7 +331,10 @@ def unstr_concept(concept_repr):
|
|||||||
:param concept_repr:
|
:param concept_repr:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
if not (concept_repr and isinstance(concept_repr, str) and concept_repr.startswith("c:")):
|
if not (concept_repr and
|
||||||
|
isinstance(concept_repr, str) and
|
||||||
|
concept_repr.startswith("c:") and
|
||||||
|
concept_repr.endswith(":")):
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
i = 2
|
i = 2
|
||||||
|
|||||||
+16
-12
@@ -4,7 +4,7 @@ import pytest
|
|||||||
from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept, UserInputConcept
|
from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept, UserInputConcept
|
||||||
from core.concept import Concept, PROPERTIES_TO_SERIALIZE, ConceptParts
|
from core.concept import Concept, PROPERTIES_TO_SERIALIZE, ConceptParts
|
||||||
from core.sheerka.Sheerka import Sheerka, BASE_NODE_PARSER_CLASS
|
from core.sheerka.Sheerka import Sheerka, BASE_NODE_PARSER_CLASS
|
||||||
from core.tokenizer import Token, TokenKind, Tokenizer
|
from core.tokenizer import Token, TokenKind
|
||||||
|
|
||||||
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
@@ -276,30 +276,35 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka):
|
|||||||
assert not sheerka.is_success(sheerka.new(BuiltinConcepts.TOO_MANY_SUCCESS))
|
assert not sheerka.is_success(sheerka.new(BuiltinConcepts.TOO_MANY_SUCCESS))
|
||||||
|
|
||||||
@pytest.mark.parametrize("concept, expected", [
|
@pytest.mark.parametrize("concept, expected", [
|
||||||
(None, None),
|
# by name
|
||||||
("foo", ["foo", "foo2"]),
|
("foo", ["foo", "foo2"]),
|
||||||
("bar", "bar"),
|
("bar", "bar"),
|
||||||
("plus", "plus"),
|
("plus", "plus"),
|
||||||
("a mult b", "mult"),
|
("a mult b", "mult"),
|
||||||
("unknown", None),
|
|
||||||
|
|
||||||
# by tuple
|
# by tuple
|
||||||
((None, None), None),
|
|
||||||
(("foo", None), ["foo", "foo2"]),
|
(("foo", None), ["foo", "foo2"]),
|
||||||
(("foo", "1002"), "foo2"),
|
(("foo", "1002"), "foo2"),
|
||||||
((None, "1001"), "foo"),
|
((None, "1001"), "foo"),
|
||||||
(("plus", None), "plus"),
|
(("plus", None), "plus"),
|
||||||
(("1001", None), "1001"),
|
(("1001", None), "1001"),
|
||||||
(("unknown", None), None),
|
|
||||||
((None, "unknown"), None),
|
|
||||||
#
|
|
||||||
# by token
|
# by token
|
||||||
(Token(TokenKind.CONCEPT, (None, None), 0, 0, 0), None),
|
|
||||||
(Token(TokenKind.CONCEPT, ("foo", None), 0, 0, 0), ["foo", "foo2"]),
|
(Token(TokenKind.CONCEPT, ("foo", None), 0, 0, 0), ["foo", "foo2"]),
|
||||||
|
|
||||||
# by concept token str
|
# by concept token str
|
||||||
("c:foo:", ["foo", "foo2"]),
|
("c:foo:", ["foo", "foo2"]),
|
||||||
|
|
||||||
|
# I cannot resolve
|
||||||
|
(None, None),
|
||||||
|
("unknown", None),
|
||||||
|
((None, None), None),
|
||||||
|
(("unknown", None), None),
|
||||||
|
((None, "unknown"), None),
|
||||||
|
(Token(TokenKind.CONCEPT, (None, None), 0, 0, 0), None),
|
||||||
("c:unknown:", None),
|
("c:unknown:", None),
|
||||||
|
("c:foo:.id", None),
|
||||||
|
("c:foo: + 1", None),
|
||||||
|
|
||||||
])
|
])
|
||||||
def test_i_can_resolve_concept(self, concept, expected):
|
def test_i_can_resolve_concept(self, concept, expected):
|
||||||
@@ -315,10 +320,8 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka):
|
|||||||
cmap = {k: concepts[i] for i, k in enumerate(["foo", "foo2", "bar", "plus", "mult", "1001"])}
|
cmap = {k: concepts[i] for i, k in enumerate(["foo", "foo2", "bar", "plus", "mult", "1001"])}
|
||||||
cmap[None] = None
|
cmap[None] = None
|
||||||
|
|
||||||
if isinstance(expected, list):
|
real_expected = [cmap[e] for e in expected] if isinstance(expected, list) else cmap[expected]
|
||||||
assert sheerka.resolve(concept) == [cmap[e] for e in expected]
|
assert sheerka.resolve(concept) == real_expected
|
||||||
else:
|
|
||||||
assert sheerka.resolve(concept) == cmap[expected]
|
|
||||||
|
|
||||||
def test_i_can_resolve_when_searching_by_definition(self):
|
def test_i_can_resolve_when_searching_by_definition(self):
|
||||||
sheerka, context, plus = self.init_concepts(
|
sheerka, context, plus = self.init_concepts(
|
||||||
@@ -328,6 +331,7 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka):
|
|||||||
|
|
||||||
assert sheerka.resolve("a plus b") == plus
|
assert sheerka.resolve("a plus b") == plus
|
||||||
|
|
||||||
|
|
||||||
class TestSheerkaUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
class TestSheerkaUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
||||||
|
|
||||||
def test_root_folder_is_created_after_initialization(self):
|
def test_root_folder_is_created_after_initialization(self):
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ def test_i_can_escape():
|
|||||||
("c:key|id:", "key", "id"),
|
("c:key|id:", "key", "id"),
|
||||||
("c:|id:", None, "id"),
|
("c:|id:", None, "id"),
|
||||||
("c:key|:", "key", None),
|
("c:key|:", "key", None),
|
||||||
|
("c:key|id:x", None, None),
|
||||||
])
|
])
|
||||||
def test_i_can_unstr_concept(text, expected_key, expected_id):
|
def test_i_can_unstr_concept(text, expected_key, expected_id):
|
||||||
k, i = core.utils.unstr_concept(text)
|
k, i = core.utils.unstr_concept(text)
|
||||||
|
|||||||
Reference in New Issue
Block a user