OD parser: use ODAPI instead of 'OD' service + support ActionCode-typed attributes

This commit is contained in:
Joeri Exelmans 2024-11-05 13:58:40 +01:00
parent 16604d0f0b
commit 75d938d2be
2 changed files with 14 additions and 20 deletions

View file

@ -117,7 +117,7 @@ class ODAPI:
return self.get_value(self.get_slot(obj, attr_name))
# create or update slot value
def set_slot_value(self, obj: UUID, attr_name: str, new_value: any):
def set_slot_value(self, obj: UUID, attr_name: str, new_value: any, is_code=False):
obj_name = self.get_name(obj)
link_name = f"{obj_name}_{attr_name}"
@ -129,12 +129,14 @@ class ODAPI:
# if old_target != None:
self.bottom.delete_element(old_target) # this also deletes the slot-link
new_target = self.create_primitive_value(target_name, new_value)
new_target = self.create_primitive_value(target_name, new_value, is_code)
slot_type = self.cd.find_attribute_type(self.get_type_name(obj), attr_name)
new_link = self.od._create_link(link_name, slot_type, obj, new_target)
self.__recompute_mappings()
def create_primitive_value(self, name: str, value: any, is_code=False):
# watch out: in Python, 'bool' is subtype of 'int'
# so we must check for 'bool' first
if isinstance(value, bool):
tgt = self.create_boolean_value(name, value)
elif isinstance(value, int):
@ -160,4 +162,4 @@ class ODAPI:
return link_id
def create_object(self, object_name: Optional[str], class_name: str):
return self.od.create_object(object_name, class_name)
return self.od.create_object(object_name, class_name)