def parse_leg_order(self, data): in_tuple = False result = _legtool.vector_vector_int() current_tuple = _legtool.vector_int() current_item = '' for x in data: if x == '(': if in_tuple: return result in_tuple = True if x >= '0' and x <= '9': current_item += x else: if len(current_item): value = int(current_item) current_item = '' if in_tuple: current_tuple.append(value) else: this_tuple = _legtool.vector_int() this_tuple.append(value) result.append(this_tuple) if x == ')': if not in_tuple: return result result.append(current_tuple) current_tuple = _legtool.vector_int() in_tuple = False if len(current_item): value = int(current_item) this_tuple = _legtool.vector_int() this_tuple.append(value) result.append(this_tuple) return result
def validate_leg_order(self, data): """Accept data that is human entered. Return a string containing a valid leg ordering, which will consist of a comma separate list of leg numbers, or tuples of leg numbers.""" entered_values = [] try: entered_values = self.parse_leg_order(data) except: pass required_legs = set(self.ikconfig_tab.get_enabled_legs()) used_legs = {} actual_legs = [] for group in entered_values: for leg in group: required_legs -= set([leg]) for x in required_legs: this_group = _legtool.vector_int() this_group.append(x) entered_values.append(this_group) return self.stringify_leg_order(entered_values)