97 tree = ET.parse(file_path)
100 random_utterances = []
107 if el.tag ==
'default-voice':
108 default_voice = el.attrib[
'name']
110 elif el.tag ==
'random-utterances':
114 elif el.tag ==
'soundboard':
119 elif el.tag ==
'walk-ups':
121 assert wup.tag ==
'walk-up'
122 email = wup.attrib[
'email'].replace(
'.',
'-dot-').replace(
'@',
'-at-')
124 for utterance
in wup:
125 assert utterance.tag
in (
'speak',
'file')
128 assert el.tag ==
'react-to'
129 indi_id = el.attrib[
'indi-id']
130 for transition
in el:
131 assert transition.tag ==
'transition'
132 if 'low' in transition.attrib:
133 value = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'low'])
134 value_2 = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'high'])
135 operation = Operation.BETWEEN
136 elif 'value' in transition.attrib:
137 value = purepyindi2.parse_string_into_any_indi_value(transition.attrib[
'value'])
139 operation = purepyindi2.parse_string_into_enum(transition.attrib.get(
'op',
'eq'), Operation)
144 if 'debounce_sec' in transition.attrib:
145 debounce_sec = float(transition.attrib[
'debounce_sec'])
147 debounce_sec = DEFAULT_DEBOUNCE_SEC
148 trans =
Transition(indi_id=indi_id, op=operation, value=value, value_2=value_2, debounce_sec=debounce_sec)
149 if trans
in transitions:
150 raise RuntimeError(f
"Multiply defined for {indi_id} {operation=} {value=}")
151 transitions[trans] = []
152 for utterance
in transition:
153 assert utterance.tag
in (
'speak',
'file')
155 reactions.append(
Reaction(indi_id=indi_id, transitions=transitions))
158 default_voice=default_voice,
159 random_utterances=random_utterances,
160 soundboard=soundboard,