| """ Defines additional helper methods for the Identifier class for accessing child values | |
| This module is not intended to be imported directly, | |
| Importing the pysoarlib module will cause these to be added to the Identifier class | |
| Note that the methods will use CamelCase, so get_child_str => GetChildStr | |
| """ | |
| _INTEGER_VAL = "int" | |
| _FLOAT_VAL = "double" | |
| _STRING_VAL = "string" | |
| def get_child_str(self, attribute): | |
| """ Given id and attribute, returns value for WME as string (self ^attribute value) """ | |
| wme = self.FindByAttribute(attribute, 0) | |
| if wme == None or len(wme.GetValueAsString()) == 0: | |
| return None | |
| return wme.GetValueAsString() | |
| def get_child_int(self, attribute): | |
| """ Given id and attribute, returns integer value for WME (self ^attribute value) """ | |
| wme = self.FindByAttribute(attribute, 0) | |
| if wme == None or wme.GetValueType() != _INTEGER_VAL: | |
| return None | |
| return wme.ConvertToIntElement().GetValue() | |
| def get_child_float(self, attribute): | |
| """ Given id and attribute, returns float value for WME (self ^attribute value) """ | |
| wme = self.FindByAttribute(attribute, 0) | |
| if wme == None or wme.GetValueType() != _FLOAT_VAL: | |
| return None | |
| return wme.ConvertToFloatElement().GetValue() | |
| def get_child_id(self, attribute): | |
| """ Given id and attribute, returns identifier value of WME (self ^attribute child_id) """ | |
| wme = self.FindByAttribute(attribute, 0) | |
| if wme == None or not wme.IsIdentifier(): | |
| return None | |
| return wme.ConvertToIdentifier() | |
| def get_all_child_ids(self, attribute=None): | |
| """ Given id and attribute, returns a list of child identifiers from all WME's matching (self ^attribute child_id) | |
| If no attribute is specified, all child identifiers are returned | |
| """ | |
| child_ids = [] | |
| for index in range(self.GetNumberChildren()): | |
| wme = self.GetChild(index) | |
| if not wme.IsIdentifier(): | |
| continue | |
| if attribute == None or wme.GetAttribute() == attribute: | |
| child_ids.append(wme.ConvertToIdentifier()) | |
| return child_ids | |
| def get_all_child_values(self, attribute=None): | |
| """ Given id and attribute, returns a list of strings of non-identifier values from all WME's matching (self ^attribute value) | |
| If no attribute is specified, all child values (non-identifiers) are returned | |
| """ | |
| child_values = [] | |
| for index in range(self.GetNumberChildren()): | |
| wme = self.GetChild(index) | |
| if wme.IsIdentifier(): | |
| continue | |
| if attribute == None or wme.GetAttribute() == attribute: | |
| child_values.append(wme.GetValueAsString()) | |
| return child_values | |
| def get_all_child_wmes(self): | |
| """ Returns a list of (attr, val) tuples representing all wmes rooted at this identifier | |
| val will either be an Identifier or a string, depending on its type """ | |
| wmes = [] | |
| for index in range(self.GetNumberChildren()): | |
| wme = self.GetChild(index) | |
| if wme.IsIdentifier(): | |
| wmes.append( (wme.GetAttribute(), wme.ConvertToIdentifier()) ) | |
| else: | |
| wmes.append( (wme.GetAttribute(), wme.GetValueAsString()) ) | |
| return wmes | |