18
18
)
19
19
from use_case_executor .domain .flow .node_data .go_to_use_case_data import GoToUseCaseData
20
20
from use_case_executor .domain .flow .node_data .node_type import NodeType
21
+ from use_case_executor .domain .flow .node_data .target_use_case_data import (
22
+ TargetUseCaseData ,
23
+ )
21
24
from use_case_executor .domain .flow_execution import helpers
22
25
from use_case_executor .domain .flow_execution .execution_environment import (
23
26
ExecutionEnvironment ,
@@ -36,7 +39,7 @@ def render(self) -> dict:
36
39
37
40
38
41
@dataclasses .dataclass (kw_only = True )
39
- class QuickReply (BaseQuickReply ):
42
+ class GoToFlowQuickReply (BaseQuickReply ):
40
43
target_use_case_uuid : UUID
41
44
target_node_uuid : Optional [UUID ]
42
45
target_edge_uuid : Optional [UUID ]
@@ -62,11 +65,6 @@ def render(self) -> dict:
62
65
}
63
66
64
67
65
- @dataclasses .dataclass (kw_only = True )
66
- class GoToFlowQuickReply (QuickReply ):
67
- pass
68
-
69
-
70
68
@dataclasses .dataclass (kw_only = True )
71
69
class GoToAdvancedQuickReply (BaseQuickReply ):
72
70
target_intent_record_id : int
@@ -85,9 +83,6 @@ def render(self) -> dict:
85
83
}
86
84
87
85
88
- QuickReplyTypes = QuickReply | GoToFlowQuickReply | GoToAdvancedQuickReply
89
-
90
-
91
86
def render_answer_node_quick_replies (
92
87
answer_node : Node ,
93
88
execution_environment : ExecutionEnvironment ,
@@ -128,8 +123,8 @@ def _convert_and_order_answer_node_quick_replies(
128
123
language : str ,
129
124
use_case_uuid : UUID ,
130
125
has_go_back_quick_reply : bool ,
131
- ) -> list [QuickReplyTypes ]:
132
- quick_replies : list [QuickReplyTypes ] = []
126
+ ) -> list [BaseQuickReply ]:
127
+ quick_replies : list [BaseQuickReply ] = []
133
128
for quick_reply in sorted (
134
129
[
135
130
edge
@@ -146,7 +141,7 @@ def _convert_and_order_answer_node_quick_replies(
146
141
)
147
142
if quick_reply .target_node .type != NodeType .go_to_use_case :
148
143
quick_replies .append (
149
- QuickReply (
144
+ GoToFlowQuickReply (
150
145
title = title ,
151
146
target_use_case_uuid = use_case_uuid ,
152
147
target_node_uuid = quick_reply .target_node .uuid ,
@@ -157,30 +152,18 @@ def _convert_and_order_answer_node_quick_replies(
157
152
158
153
go_to_use_case_data = quick_reply .target_node .data
159
154
assert isinstance (go_to_use_case_data , GoToUseCaseData )
160
- if go_to_use_case_data .target_use_case_uuid is not None :
161
- assert go_to_use_case_data .target_intent_record_id is None
162
- quick_replies .append (
163
- GoToFlowQuickReply (
164
- title = title ,
165
- target_use_case_uuid = go_to_use_case_data .target_use_case_uuid ,
166
- target_node_uuid = None ,
167
- target_edge_uuid = None ,
168
- )
169
- )
170
- elif go_to_use_case_data .target_intent_record_id is not None :
171
- quick_replies .append (
172
- GoToAdvancedQuickReply (
173
- title = title ,
174
- target_intent_record_id = go_to_use_case_data .target_intent_record_id ,
175
- )
155
+ quick_replies .append (
156
+ _convert_target_use_case_data (
157
+ title = title ,
158
+ target_use_case_data = go_to_use_case_data ,
159
+ error_message = "the target use case is not filled" ,
176
160
)
177
- else :
178
- raise InvalidFlowConfiguration ("the target use case is not filled" )
161
+ )
179
162
180
163
if has_go_back_quick_reply :
181
164
assert answer_node .parent_node_uuid is not None
182
165
quick_replies .append (
183
- QuickReply (
166
+ GoToFlowQuickReply (
184
167
title = constants .GO_BACK_QUICK_REPLY_TITLE [language ],
185
168
target_use_case_uuid = use_case_uuid ,
186
169
target_node_uuid = answer_node .parent_node_uuid ,
@@ -194,54 +177,62 @@ def _convert_and_order_answer_node_quick_replies(
194
177
def _convert_handover_failure_quick_replies (
195
178
handover_failure_quick_replies : list [HandoverFailureQuickReply ],
196
179
language : str ,
197
- ) -> list [QuickReplyTypes ]:
198
- quick_replies : list [QuickReplyTypes ] = []
180
+ ) -> list [BaseQuickReply ]:
181
+ quick_replies : list [BaseQuickReply ] = []
199
182
for quick_reply in handover_failure_quick_replies :
200
183
title = helpers .get_translation_value (
201
184
translation_dict = quick_reply .title_translations ,
202
185
language = language ,
203
186
translation_field = "handover failure quick reply title" ,
204
187
)
205
- if quick_reply .target_use_case_uuid is not None :
206
- assert quick_reply .target_intent_record_id is None
207
- quick_replies .append (
208
- GoToFlowQuickReply (
209
- title = title ,
210
- target_use_case_uuid = quick_reply .target_use_case_uuid ,
211
- target_node_uuid = None ,
212
- target_edge_uuid = None ,
213
- )
214
- )
215
- elif quick_reply .target_intent_record_id is not None :
216
- quick_replies .append (
217
- GoToAdvancedQuickReply (
218
- title = title ,
219
- target_intent_record_id = quick_reply .target_intent_record_id ,
220
- )
221
- )
222
- else :
223
- raise InvalidFlowConfiguration (
224
- "the use case to send the customer to is not filled for an agent handover quick reply"
188
+ quick_replies .append (
189
+ _convert_target_use_case_data (
190
+ title = title ,
191
+ target_use_case_data = quick_reply ,
192
+ error_message = (
193
+ "the use case to send the customer to is not filled for an agent"
194
+ " handover quick reply"
195
+ ),
225
196
)
197
+ )
226
198
227
199
return quick_replies
228
200
229
201
202
+ def _convert_target_use_case_data (
203
+ title : str , target_use_case_data : TargetUseCaseData , error_message : str
204
+ ) -> BaseQuickReply :
205
+ if target_use_case_data .target_use_case_uuid is not None :
206
+ assert target_use_case_data .target_intent_record_id is None
207
+ return GoToFlowQuickReply (
208
+ title = title ,
209
+ target_use_case_uuid = target_use_case_data .target_use_case_uuid ,
210
+ target_node_uuid = None ,
211
+ target_edge_uuid = None ,
212
+ )
213
+ if target_use_case_data .target_intent_record_id is not None :
214
+ return GoToAdvancedQuickReply (
215
+ title = title ,
216
+ target_intent_record_id = target_use_case_data .target_intent_record_id ,
217
+ )
218
+ raise InvalidFlowConfiguration (error_message )
219
+
220
+
230
221
@inject
231
222
def _get_target_use_case_uuids_to_keep (
232
223
target_use_case_uuids : set [UUID ],
233
224
use_latest : bool ,
234
225
repository : Repository = Provide ["repository" ],
235
226
) -> set [UUID ]:
236
- if use_latest is True or not target_use_case_uuids :
227
+ if use_latest or not target_use_case_uuids :
237
228
return target_use_case_uuids
238
229
return repository .filter_use_case_uuids_without_production_version (
239
230
use_case_uuids = target_use_case_uuids
240
231
)
241
232
242
233
243
234
def _render_quick_replies (
244
- quick_replies : list [QuickReplyTypes ],
235
+ quick_replies : list [BaseQuickReply ],
245
236
use_latest : bool ,
246
237
) -> list [dict ]:
247
238
target_use_case_uuids_to_keep = _get_target_use_case_uuids_to_keep (
@@ -258,6 +249,6 @@ def _render_quick_replies(
258
249
if quick_reply .target_use_case_uuid in target_use_case_uuids_to_keep :
259
250
rendered_quick_replies .append (quick_reply .render ())
260
251
else :
261
- assert isinstance (quick_reply , ( QuickReply , GoToAdvancedQuickReply ) )
252
+ assert isinstance (quick_reply , GoToAdvancedQuickReply )
262
253
rendered_quick_replies .append (quick_reply .render ())
263
254
return rendered_quick_replies
0 commit comments