94 tree = ET.parse(file_path)
97 random_utterances = []
103 if el.tag ==
'default-voice':
104 default_voice = el.attrib[
'name']
106 elif el.tag ==
'random-utterances':
110 elif el.tag ==
'soundboard':
115 assert el.tag ==
'react-to'
116 indi_id = el.attrib[
'indi-id']
117 for transition
in el:
118 assert transition.tag ==
'transition'
119 if 'low' in transition.attrib:
120 value = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'low'])
121 value_2 = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'high'])
122 operation = Operation.BETWEEN
123 elif 'value' in transition.attrib:
124 value = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'value'])
126 operation = purepyindi2.parse_string_into_enum(transition.attrib.get(
'op',
'eq'), Operation)
131 if 'debounce_sec' in transition.attrib:
132 debounce_sec = float(transition.attrib[
'debounce_sec'])
134 debounce_sec = DEFAULT_DEBOUNCE_SEC
135 trans =
Transition(op=operation, value=value, value_2=value_2, debounce_sec=debounce_sec)
136 if trans
in transitions:
137 raise RuntimeError(f
"Multiply defined for {indi_id} {operation=} {value=}")
138 transitions[trans] = []
139 for utterance
in transition:
140 assert utterance.tag
in (
'speak',
'file')
142 reactions.append(
Reaction(indi_id=indi_id, transitions=transitions))
145 default_voice=default_voice,
146 random_utterances=random_utterances,
147 soundboard=soundboard,