Fixed #48 : RelationalExpressionParser: Implement relational operator parser
Fixed #49 : ExpressionParser: Implement ExpressionParser Fixed #50 : Implement ReteConditionExprVisitor Fixed #51 : Implement PythonConditionExprVisitor Fixed #52 : SheerkaConceptManager: I can get and set concept property
This commit is contained in:
@@ -118,6 +118,8 @@ class SheerkaConceptManager(BaseService):
|
||||
self.sheerka.bind_service_method(self.set_id_if_needed, True)
|
||||
self.sheerka.bind_service_method(self.set_attr, True)
|
||||
self.sheerka.bind_service_method(self.get_attr, False)
|
||||
self.sheerka.bind_service_method(self.set_property, True, as_name="set_prop")
|
||||
self.sheerka.bind_service_method(self.get_property, False, as_name="get_prop")
|
||||
self.sheerka.bind_service_method(self.get_by_key, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.get_by_name, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.get_by_hash, False, visible=False)
|
||||
@@ -285,15 +287,15 @@ class SheerkaConceptManager(BaseService):
|
||||
|
||||
# to_add is a dictionary
|
||||
# to_add = {
|
||||
# 'meta' : {<key, value>} of metadata to update,
|
||||
# 'props' : {<key, value>} of properties to add/update,
|
||||
# 'variables': {<key, value>} of variables to add/update,
|
||||
# 'meta' : {<key>: <value>} of metadata to update,
|
||||
# 'props' : {<key>: <value>} of properties to add/update,
|
||||
# 'variables': {<key>: <value>} of variables to add/update,
|
||||
# }
|
||||
# if the <key> already exists, the entry is updated, otherwise a new value is created
|
||||
# for props, if the <key> already exists, a new entry is added to the set
|
||||
#
|
||||
# to_remove = {
|
||||
# 'props' : {<key, [value]>} entries to remove. 'value' can be a list or a single entry
|
||||
# 'props' : {<key>: [value]} entries to remove. 'value' can be a list or a single entry
|
||||
# 'variables': [<key>] list of keys to remove
|
||||
# }
|
||||
#
|
||||
@@ -401,7 +403,7 @@ class SheerkaConceptManager(BaseService):
|
||||
if (old_value := concept.get_value(attr)) is not NotInit:
|
||||
if old_value == value:
|
||||
return self.sheerka.ret(self.NAME, True, self.sheerka.new(BuiltinConcepts.SUCCESS))
|
||||
|
||||
|
||||
if isinstance(old_value, list):
|
||||
old_value.append(value)
|
||||
value = old_value
|
||||
@@ -429,6 +431,49 @@ class SheerkaConceptManager(BaseService):
|
||||
return self.sheerka.new(BuiltinConcepts.NOT_FOUND, body={"#concept": concept, "#attr": attribute})
|
||||
return value
|
||||
|
||||
def get_property(self, concept, prop):
|
||||
"""
|
||||
Returns the value of a concept property
|
||||
:param concept:
|
||||
:param prop:
|
||||
:return:
|
||||
"""
|
||||
ensure_concept()
|
||||
if not self.sheerka.is_success(concept):
|
||||
return concept
|
||||
|
||||
if isinstance(prop, Concept) and prop.get_metadata().is_builtin:
|
||||
prop = prop.key
|
||||
|
||||
if (value := concept.get_prop(prop)) is None:
|
||||
return self.sheerka.new(BuiltinConcepts.NOT_FOUND, body={"#concept": concept, "#prop": prop})
|
||||
return value
|
||||
|
||||
def set_property(self, context, concept, prop, value, all_concepts=False):
|
||||
"""
|
||||
Set the value of a concept property
|
||||
The concept is modified
|
||||
:param context:
|
||||
:param concept:
|
||||
:param prop:
|
||||
:param value:
|
||||
:param all_concepts: if True, updates the definitions of the concept
|
||||
:return:
|
||||
"""
|
||||
ensure_concept()
|
||||
if not self.sheerka.is_success(concept):
|
||||
return concept
|
||||
|
||||
if isinstance(prop, Concept) and prop.get_metadata().is_builtin:
|
||||
prop = prop.key
|
||||
|
||||
if all_concepts:
|
||||
return self.modify_concept(context, concept, to_add={'props': {prop: value}}, modify_source=True)
|
||||
|
||||
else:
|
||||
concept.set_prop(prop, value)
|
||||
return self.sheerka.ret(self.NAME, True, self.sheerka.new(BuiltinConcepts.SUCCESS))
|
||||
|
||||
def set_id_if_needed(self, obj: Concept, is_builtin: bool):
|
||||
"""
|
||||
Set the key for the concept if needed
|
||||
@@ -649,7 +694,7 @@ class SheerkaConceptManager(BaseService):
|
||||
|
||||
if "props" in to_add:
|
||||
for k, v in to_add["props"].items():
|
||||
concept.add_prop(k, v)
|
||||
concept.set_prop(k, v)
|
||||
|
||||
if "variables" in to_add:
|
||||
for k, v in to_add["variables"].items():
|
||||
|
||||
Reference in New Issue
Block a user