dsw-models 4.27.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dsw/models/__init__.py +0 -0
- dsw/models/build_info.py +17 -0
- dsw/models/common.py +19 -0
- dsw/models/document_template/__init__.py +0 -0
- dsw/models/document_template/metadata.py +45 -0
- dsw/models/knowledge_model/__init__.py +0 -0
- dsw/models/knowledge_model/common.py +162 -0
- dsw/models/knowledge_model/events.py +607 -0
- dsw/models/knowledge_model/flat.py +230 -0
- dsw/models/knowledge_model/package.py +34 -0
- dsw/models/knowledge_model/tree.py +177 -0
- dsw/models/project/__init__.py +0 -0
- dsw/models/project/common.py +14 -0
- dsw/models/project/events.py +100 -0
- dsw/models/project/files.py +15 -0
- dsw/models/project/replies.py +94 -0
- dsw/models/py.typed +0 -0
- dsw_models-4.27.0.dist-info/METADATA +43 -0
- dsw_models-4.27.0.dist-info/RECORD +20 -0
- dsw_models-4.27.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
# pylint: disable=too-many-arguments, too-many-locals, too-many-lines
|
|
2
|
+
import datetime
|
|
3
|
+
import typing
|
|
4
|
+
from uuid import UUID
|
|
5
|
+
|
|
6
|
+
import pydantic
|
|
7
|
+
|
|
8
|
+
from .common import (
|
|
9
|
+
BaseModel,
|
|
10
|
+
MetricMeasure,
|
|
11
|
+
QuestionValidation,
|
|
12
|
+
TAnnotations,
|
|
13
|
+
THeaders,
|
|
14
|
+
TQuestionValueType,
|
|
15
|
+
TypeHintExchange,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
T = typing.TypeVar('T')
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class EditEventField[T](BaseModel):
|
|
23
|
+
changed: bool
|
|
24
|
+
value: T | None
|
|
25
|
+
|
|
26
|
+
@pydantic.model_serializer(mode='wrap')
|
|
27
|
+
def _serialize(self, handler):
|
|
28
|
+
if not self.changed:
|
|
29
|
+
return {'changed': False}
|
|
30
|
+
# default serialization includes both fields; we only keep what we want
|
|
31
|
+
data = handler(self)
|
|
32
|
+
return {'changed': True, 'value': data.get('value')}
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def no_change(cls) -> typing.Self:
|
|
36
|
+
return cls(changed=False, value=None)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def change(cls, value: T) -> typing.Self:
|
|
40
|
+
return cls(changed=True, value=value)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class BaseEventContent(BaseModel):
|
|
44
|
+
event_type: str
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class BaseAddEventContent(BaseEventContent):
|
|
48
|
+
annotations: TAnnotations
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class BaseEditEventContent(BaseEventContent):
|
|
52
|
+
annotations: EditEventField[TAnnotations]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# Knowledge Model
|
|
56
|
+
class AddKnowledgeModelEventContent(BaseAddEventContent):
|
|
57
|
+
event_type: typing.Literal['AddKnowledgeModelEvent'] = 'AddKnowledgeModelEvent'
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class EditKnowledgeModelEventContent(BaseEditEventContent):
|
|
61
|
+
event_type: typing.Literal['EditKnowledgeModelEvent'] = 'EditKnowledgeModelEvent'
|
|
62
|
+
chapter_uuids: EditEventField[list[UUID]]
|
|
63
|
+
integration_uuids: EditEventField[list[UUID]]
|
|
64
|
+
metric_uuids: EditEventField[list[UUID]]
|
|
65
|
+
phase_uuids: EditEventField[list[UUID]]
|
|
66
|
+
resource_collection_uuids: EditEventField[list[UUID]]
|
|
67
|
+
tag_uuids: EditEventField[list[UUID]]
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# Chapter
|
|
71
|
+
class AddChapterEventContent(BaseAddEventContent):
|
|
72
|
+
event_type: typing.Literal['AddChapterEvent'] = 'AddChapterEvent'
|
|
73
|
+
title: str
|
|
74
|
+
text: str | None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class EditChapterEventContent(BaseEditEventContent):
|
|
78
|
+
event_type: typing.Literal['EditChapterEvent'] = 'EditChapterEvent'
|
|
79
|
+
title: EditEventField[str]
|
|
80
|
+
text: EditEventField[str | None]
|
|
81
|
+
question_uuids: EditEventField[list[UUID]]
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class DeleteChapterEventContent(BaseEventContent):
|
|
85
|
+
event_type: typing.Literal['DeleteChapterEvent'] = 'DeleteChapterEvent'
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# Question
|
|
89
|
+
class _AddQuestionEventContent(BaseAddEventContent):
|
|
90
|
+
event_type: typing.Literal['AddQuestionEvent'] = 'AddQuestionEvent'
|
|
91
|
+
question_type: str
|
|
92
|
+
title: str
|
|
93
|
+
text: str | None
|
|
94
|
+
required_phase_uuid: UUID | None
|
|
95
|
+
tag_uuids: list[UUID]
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class AddOptionsQuestionEventContent(_AddQuestionEventContent):
|
|
99
|
+
question_type: typing.Literal['OptionsQuestion'] = 'OptionsQuestion'
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class AddMultiChoiceQuestionEventContent(_AddQuestionEventContent):
|
|
103
|
+
question_type: typing.Literal['MultiChoiceQuestion'] = 'MultiChoiceQuestion'
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class AddListQuestionEventContent(_AddQuestionEventContent):
|
|
107
|
+
question_type: typing.Literal['ListQuestion'] = 'ListQuestion'
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class AddValueQuestionEventContent(_AddQuestionEventContent):
|
|
111
|
+
question_type: typing.Literal['ValueQuestion'] = 'ValueQuestion'
|
|
112
|
+
value_type: TQuestionValueType
|
|
113
|
+
validations: list[QuestionValidation]
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class AddIntegrationQuestionEventContent(_AddQuestionEventContent):
|
|
117
|
+
question_type: typing.Literal['IntegrationQuestion'] = 'IntegrationQuestion'
|
|
118
|
+
integration_uuid: UUID
|
|
119
|
+
variables: dict[str, str]
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class AddItemSelectQuestionEventContent(_AddQuestionEventContent):
|
|
123
|
+
question_type: typing.Literal['ItemSelectQuestion'] = 'ItemSelectQuestion'
|
|
124
|
+
list_question_uuid: UUID
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class AddFileQuestionEventContent(_AddQuestionEventContent):
|
|
128
|
+
question_type: typing.Literal['FileQuestion'] = 'FileQuestion'
|
|
129
|
+
max_size: int | None
|
|
130
|
+
file_types: str | None
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
AddQuestionEventContent = typing.Annotated[
|
|
134
|
+
AddOptionsQuestionEventContent |
|
|
135
|
+
AddMultiChoiceQuestionEventContent |
|
|
136
|
+
AddListQuestionEventContent |
|
|
137
|
+
AddValueQuestionEventContent |
|
|
138
|
+
AddIntegrationQuestionEventContent |
|
|
139
|
+
AddItemSelectQuestionEventContent |
|
|
140
|
+
AddFileQuestionEventContent,
|
|
141
|
+
pydantic.Field(discriminator='question_type'),
|
|
142
|
+
]
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class _EditQuestionEventContent(BaseEditEventContent):
|
|
146
|
+
event_type: typing.Literal['EditQuestionEvent'] = 'EditQuestionEvent'
|
|
147
|
+
question_type: str
|
|
148
|
+
title: EditEventField[str]
|
|
149
|
+
text: EditEventField[str | None]
|
|
150
|
+
required_phase_uuid: EditEventField[UUID | None]
|
|
151
|
+
tag_uuids: EditEventField[list[UUID]]
|
|
152
|
+
expert_uuids: EditEventField[list[UUID]]
|
|
153
|
+
reference_uuids: EditEventField[list[UUID]]
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class EditOptionsQuestionEventContent(_EditQuestionEventContent):
|
|
157
|
+
question_type: typing.Literal['OptionsQuestion'] = 'OptionsQuestion'
|
|
158
|
+
answer_uuids: EditEventField[list[UUID]]
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class EditMultiChoiceQuestionEventContent(_EditQuestionEventContent):
|
|
162
|
+
question_type: typing.Literal['MultiChoiceQuestion'] = 'MultiChoiceQuestion'
|
|
163
|
+
choice_uuids: EditEventField[list[UUID]]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class EditListQuestionEventContent(_EditQuestionEventContent):
|
|
167
|
+
question_type: typing.Literal['ListQuestion'] = 'ListQuestion'
|
|
168
|
+
item_template_question_uuids: EditEventField[list[UUID]]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class EditValueQuestionEventContent(_EditQuestionEventContent):
|
|
172
|
+
question_type: typing.Literal['ValueQuestion'] = 'ValueQuestion'
|
|
173
|
+
value_type: EditEventField[TQuestionValueType]
|
|
174
|
+
validations: EditEventField[list[QuestionValidation]]
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class EditIntegrationQuestionEventContent(_EditQuestionEventContent):
|
|
178
|
+
question_type: typing.Literal['IntegrationQuestion'] = 'IntegrationQuestion'
|
|
179
|
+
integration_uuid: EditEventField[UUID]
|
|
180
|
+
variables: EditEventField[dict[str, str]]
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
class EditItemSelectQuestionEventContent(_EditQuestionEventContent):
|
|
184
|
+
question_type: typing.Literal['ItemSelectQuestion'] = 'ItemSelectQuestion'
|
|
185
|
+
list_question_uuid: EditEventField[UUID]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class EditFileQuestionEventContent(_EditQuestionEventContent):
|
|
189
|
+
question_type: typing.Literal['FileQuestion'] = 'FileQuestion'
|
|
190
|
+
max_size: EditEventField[int | None]
|
|
191
|
+
file_types: EditEventField[str | None]
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
EditQuestionEventContent = typing.Annotated[
|
|
195
|
+
EditOptionsQuestionEventContent |
|
|
196
|
+
EditMultiChoiceQuestionEventContent |
|
|
197
|
+
EditListQuestionEventContent |
|
|
198
|
+
EditValueQuestionEventContent |
|
|
199
|
+
EditIntegrationQuestionEventContent |
|
|
200
|
+
EditItemSelectQuestionEventContent |
|
|
201
|
+
EditFileQuestionEventContent,
|
|
202
|
+
pydantic.Field(discriminator='question_type'),
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class DeleteQuestionEventContent(BaseEventContent):
|
|
207
|
+
event_type: typing.Literal['DeleteQuestionEvent'] = 'DeleteQuestionEvent'
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# Answer
|
|
211
|
+
class AddAnswerEventContent(BaseAddEventContent):
|
|
212
|
+
event_type: typing.Literal['AddAnswerEvent'] = 'AddAnswerEvent'
|
|
213
|
+
label: str
|
|
214
|
+
advice: str | None
|
|
215
|
+
metric_measures: list[MetricMeasure]
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class EditAnswerEventContent(BaseEditEventContent):
|
|
219
|
+
event_type: typing.Literal['EditAnswerEvent'] = 'EditAnswerEvent'
|
|
220
|
+
label: EditEventField[str]
|
|
221
|
+
advice: EditEventField[str | None]
|
|
222
|
+
metric_measures: EditEventField[list[MetricMeasure]]
|
|
223
|
+
follow_up_uuids: EditEventField[list[UUID]]
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class DeleteAnswerEventContent(BaseEventContent):
|
|
227
|
+
event_type: typing.Literal['DeleteAnswerEvent'] = 'DeleteAnswerEvent'
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
# Choice
|
|
231
|
+
class AddChoiceEventContent(BaseAddEventContent):
|
|
232
|
+
event_type: typing.Literal['AddChoiceEvent'] = 'AddChoiceEvent'
|
|
233
|
+
label: str
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class EditChoiceEventContent(BaseEditEventContent):
|
|
237
|
+
event_type: typing.Literal['EditChoiceEvent'] = 'EditChoiceEvent'
|
|
238
|
+
label: EditEventField[str]
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class DeleteChoiceEventContent(BaseEventContent):
|
|
242
|
+
event_type: typing.Literal['DeleteChoiceEvent'] = 'DeleteChoiceEvent'
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
# Reference
|
|
246
|
+
class _AddReferenceEventContent(BaseAddEventContent):
|
|
247
|
+
event_type: typing.Literal['AddReferenceEvent'] = 'AddReferenceEvent'
|
|
248
|
+
reference_type: str
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class AddResourcePageReferenceEventContent(_AddReferenceEventContent):
|
|
252
|
+
reference_type: typing.Literal['ResourcePageReference'] = 'ResourcePageReference'
|
|
253
|
+
resource_page_uuid: UUID | None
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
class AddURLReferenceEventContent(_AddReferenceEventContent):
|
|
257
|
+
reference_type: typing.Literal['URLReference'] = 'URLReference'
|
|
258
|
+
url: str
|
|
259
|
+
label: str
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class AddCrossReferenceEventContent(_AddReferenceEventContent):
|
|
263
|
+
reference_type: typing.Literal['CrossReference'] = 'CrossReference'
|
|
264
|
+
target_uuid: UUID | None
|
|
265
|
+
description: str
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
AddReferenceEventContent = typing.Annotated[
|
|
269
|
+
AddResourcePageReferenceEventContent |
|
|
270
|
+
AddURLReferenceEventContent |
|
|
271
|
+
AddCrossReferenceEventContent,
|
|
272
|
+
pydantic.Field(discriminator='reference_type'),
|
|
273
|
+
]
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class _EditReferenceEventContent(BaseEditEventContent):
|
|
277
|
+
event_type: typing.Literal['EditReferenceEvent'] = 'EditReferenceEvent'
|
|
278
|
+
reference_type: str
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
class EditResourcePageReferenceEventContent(_EditReferenceEventContent):
|
|
282
|
+
reference_type: typing.Literal['ResourcePageReference'] = 'ResourcePageReference'
|
|
283
|
+
resource_page_uuid: EditEventField[UUID]
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
class EditURLReferenceEventContent(_EditReferenceEventContent):
|
|
287
|
+
reference_type: typing.Literal['URLReference'] = 'URLReference'
|
|
288
|
+
url: EditEventField[str]
|
|
289
|
+
label: EditEventField[str]
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
class EditCrossReferenceEventContent(_EditReferenceEventContent):
|
|
293
|
+
reference_type: typing.Literal['CrossReference'] = 'CrossReference'
|
|
294
|
+
target_uuid: EditEventField[UUID]
|
|
295
|
+
description: EditEventField[str]
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
EditReferenceEventContent = typing.Annotated[
|
|
299
|
+
EditResourcePageReferenceEventContent |
|
|
300
|
+
EditURLReferenceEventContent |
|
|
301
|
+
EditCrossReferenceEventContent,
|
|
302
|
+
pydantic.Field(discriminator='reference_type'),
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
class DeleteReferenceEventContent(BaseEventContent):
|
|
307
|
+
event_type: typing.Literal['DeleteReferenceEvent'] = 'DeleteReferenceEvent'
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
# Expert
|
|
311
|
+
class AddExpertEventContent(BaseAddEventContent):
|
|
312
|
+
event_type: typing.Literal['AddExpertEvent'] = 'AddExpertEvent'
|
|
313
|
+
name: str
|
|
314
|
+
email: str
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
class EditExpertEventContent(BaseEditEventContent):
|
|
318
|
+
event_type: typing.Literal['EditExpertEvent'] = 'EditExpertEvent'
|
|
319
|
+
name: EditEventField[str]
|
|
320
|
+
email: EditEventField[str]
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
class DeleteExpertEventContent(BaseEventContent):
|
|
324
|
+
event_type: typing.Literal['DeleteExpertEvent'] = 'DeleteExpertEvent'
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
# Integration
|
|
328
|
+
class _AddIntegrationEventContent(BaseAddEventContent):
|
|
329
|
+
event_type: typing.Literal['AddIntegrationEvent'] = 'AddIntegrationEvent'
|
|
330
|
+
integration_type: str
|
|
331
|
+
name: str
|
|
332
|
+
variables: list[str]
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
class AddApiIntegrationEventContent(_AddIntegrationEventContent):
|
|
336
|
+
integration_type: typing.Literal['ApiIntegration'] = 'ApiIntegration'
|
|
337
|
+
allow_custom_reply: bool
|
|
338
|
+
request_method: str
|
|
339
|
+
request_url: str
|
|
340
|
+
request_headers: THeaders
|
|
341
|
+
request_body: str | None
|
|
342
|
+
request_allow_empty_search: bool
|
|
343
|
+
response_list_field: str | None
|
|
344
|
+
response_item_template: str
|
|
345
|
+
response_item_template_for_selection: str | None
|
|
346
|
+
test_q: str
|
|
347
|
+
test_variables: dict[str, str]
|
|
348
|
+
test_response: TypeHintExchange | None
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
class AddApiLegacyIntegrationEventContent(_AddIntegrationEventContent):
|
|
352
|
+
integration_type: typing.Literal['ApiLegacyIntegration'] = 'ApiLegacyIntegration'
|
|
353
|
+
id: str
|
|
354
|
+
logo: str | None
|
|
355
|
+
item_url: str | None
|
|
356
|
+
request_body: str | None
|
|
357
|
+
request_empty_search: bool
|
|
358
|
+
request_headers: THeaders
|
|
359
|
+
request_method: str
|
|
360
|
+
request_url: str
|
|
361
|
+
response_item_id: str | None
|
|
362
|
+
response_item_template: str
|
|
363
|
+
response_list_field: str | None
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
class AddWidgetIntegrationEventContent(_AddIntegrationEventContent):
|
|
367
|
+
integration_type: typing.Literal['WidgetIntegration'] = 'WidgetIntegration'
|
|
368
|
+
id: str
|
|
369
|
+
logo: str | None
|
|
370
|
+
widget_url: str
|
|
371
|
+
item_url: str | None
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
AddIntegrationEventContent = typing.Annotated[
|
|
375
|
+
AddApiIntegrationEventContent |
|
|
376
|
+
AddApiLegacyIntegrationEventContent |
|
|
377
|
+
AddWidgetIntegrationEventContent,
|
|
378
|
+
pydantic.Field(discriminator='integration_type'),
|
|
379
|
+
]
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
class _EditIntegrationEventContent(BaseEditEventContent):
|
|
383
|
+
event_type: typing.Literal['EditIntegrationEvent'] = 'EditIntegrationEvent'
|
|
384
|
+
integration_type: str
|
|
385
|
+
name: EditEventField[str]
|
|
386
|
+
variables: EditEventField[list[str]]
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
class EditApiIntegrationEventContent(_EditIntegrationEventContent):
|
|
390
|
+
integration_type: typing.Literal['ApiIntegration'] = 'ApiIntegration'
|
|
391
|
+
allow_custom_reply: EditEventField[bool]
|
|
392
|
+
request_method: EditEventField[str]
|
|
393
|
+
request_url: EditEventField[str]
|
|
394
|
+
request_headers: EditEventField[THeaders]
|
|
395
|
+
request_body: EditEventField[str | None]
|
|
396
|
+
request_allow_empty_search: EditEventField[bool]
|
|
397
|
+
response_list_field: EditEventField[str | None]
|
|
398
|
+
response_item_template: EditEventField[str]
|
|
399
|
+
response_item_template_for_selection: EditEventField[str | None]
|
|
400
|
+
test_q: EditEventField[str]
|
|
401
|
+
test_variables: EditEventField[dict[str, str]]
|
|
402
|
+
test_response: EditEventField[TypeHintExchange | None]
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
class EditApiLegacyIntegrationEventContent(_EditIntegrationEventContent):
|
|
406
|
+
integration_type: typing.Literal['ApiLegacyIntegration'] = 'ApiLegacyIntegration'
|
|
407
|
+
id: EditEventField[str]
|
|
408
|
+
logo: EditEventField[str | None]
|
|
409
|
+
item_url: EditEventField[str | None]
|
|
410
|
+
request_body: EditEventField[str | None]
|
|
411
|
+
request_empty_search: EditEventField[bool]
|
|
412
|
+
request_headers: EditEventField[THeaders]
|
|
413
|
+
request_method: EditEventField[str]
|
|
414
|
+
request_url: EditEventField[str]
|
|
415
|
+
response_item_id: EditEventField[str]
|
|
416
|
+
response_item_template: EditEventField[str]
|
|
417
|
+
response_list_field: EditEventField[str | None]
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
class EditWidgetIntegrationEventContent(_EditIntegrationEventContent):
|
|
421
|
+
integration_type: typing.Literal['WidgetIntegration'] = 'WidgetIntegration'
|
|
422
|
+
id: EditEventField[str]
|
|
423
|
+
logo: EditEventField[str | None]
|
|
424
|
+
widget_url: EditEventField[str]
|
|
425
|
+
item_url: EditEventField[str | None]
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
EditIntegrationEventContent = typing.Annotated[
|
|
429
|
+
EditApiIntegrationEventContent |
|
|
430
|
+
EditApiLegacyIntegrationEventContent |
|
|
431
|
+
EditWidgetIntegrationEventContent,
|
|
432
|
+
pydantic.Field(discriminator='integration_type'),
|
|
433
|
+
]
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
class DeleteIntegrationEventContent(BaseEventContent):
|
|
437
|
+
event_type: typing.Literal['DeleteIntegrationEvent'] = 'DeleteIntegrationEvent'
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
# Tag
|
|
441
|
+
class AddTagEventContent(BaseAddEventContent):
|
|
442
|
+
event_type: typing.Literal['AddTagEvent'] = 'AddTagEvent'
|
|
443
|
+
name: str
|
|
444
|
+
description: str | None
|
|
445
|
+
color: str
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
class EditTagEventContent(BaseEditEventContent):
|
|
449
|
+
event_type: typing.Literal['EditTagEvent'] = 'EditTagEvent'
|
|
450
|
+
name: EditEventField[str]
|
|
451
|
+
description: EditEventField[str | None]
|
|
452
|
+
color: EditEventField[str]
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
class DeleteTagEventContent(BaseEventContent):
|
|
456
|
+
event_type: typing.Literal['DeleteTagEvent'] = 'DeleteTagEvent'
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
# Metric
|
|
460
|
+
class AddMetricEventContent(BaseAddEventContent):
|
|
461
|
+
event_type: typing.Literal['AddMetricEvent'] = 'AddMetricEvent'
|
|
462
|
+
title: str
|
|
463
|
+
abbreviation: str | None
|
|
464
|
+
description: str | None
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
class EditMetricEventContent(BaseEditEventContent):
|
|
468
|
+
event_type: typing.Literal['EditMetricEvent'] = 'EditMetricEvent'
|
|
469
|
+
title: EditEventField[str]
|
|
470
|
+
abbreviation: EditEventField[str | None]
|
|
471
|
+
description: EditEventField[str | None]
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
class DeleteMetricEventContent(BaseEventContent):
|
|
475
|
+
event_type: typing.Literal['DeleteMetricEvent'] = 'DeleteMetricEvent'
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
# Phase
|
|
479
|
+
class AddPhaseEventContent(BaseAddEventContent):
|
|
480
|
+
event_type: typing.Literal['AddPhaseEvent'] = 'AddPhaseEvent'
|
|
481
|
+
title: str
|
|
482
|
+
description: str | None
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
class EditPhaseEventContent(BaseEditEventContent):
|
|
486
|
+
event_type: typing.Literal['EditPhaseEvent'] = 'EditPhaseEvent'
|
|
487
|
+
title: EditEventField[str]
|
|
488
|
+
description: EditEventField[str | None]
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
class DeletePhaseEventContent(BaseEventContent):
|
|
492
|
+
event_type: typing.Literal['DeletePhaseEvent'] = 'DeletePhaseEvent'
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
# Resource Collection
|
|
496
|
+
class AddResourceCollectionEventContent(BaseAddEventContent):
|
|
497
|
+
event_type: typing.Literal['AddResourceCollectionEvent'] = 'AddResourceCollectionEvent'
|
|
498
|
+
title: str
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
class EditResourceCollectionEventContent(BaseEditEventContent):
|
|
502
|
+
event_type: typing.Literal['EditResourceCollectionEvent'] = 'EditResourceCollectionEvent'
|
|
503
|
+
title: EditEventField[str]
|
|
504
|
+
resource_page_uuids: EditEventField[list[UUID]]
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
class DeleteResourceCollectionEventContent(BaseEventContent):
|
|
508
|
+
event_type: typing.Literal['DeleteResourceCollectionEvent'] = 'DeleteResourceCollectionEvent'
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
# Resource Page
|
|
512
|
+
class AddResourcePageEventContent(BaseAddEventContent):
|
|
513
|
+
event_type: typing.Literal['AddResourcePageEvent'] = 'AddResourcePageEvent'
|
|
514
|
+
title: str
|
|
515
|
+
content: str
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
class EditResourcePageEventContent(BaseEditEventContent):
|
|
519
|
+
event_type: typing.Literal['EditResourcePageEvent'] = 'EditResourcePageEvent'
|
|
520
|
+
title: EditEventField[str]
|
|
521
|
+
content: EditEventField[str]
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
class DeleteResourcePageEventContent(BaseEventContent):
|
|
525
|
+
event_type: typing.Literal['DeleteResourcePageEvent'] = 'DeleteResourcePageEvent'
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
# Move events
|
|
529
|
+
class _MoveQuestionEventContent(BaseEventContent):
|
|
530
|
+
target_uuid: UUID
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
class MoveQuestionEventContent(_MoveQuestionEventContent):
|
|
534
|
+
event_type: typing.Literal['MoveQuestionEvent'] = 'MoveQuestionEvent'
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
class MoveAnswerEventContent(_MoveQuestionEventContent):
|
|
538
|
+
event_type: typing.Literal['MoveAnswerEvent'] = 'MoveAnswerEvent'
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
class MoveChoiceEventContent(_MoveQuestionEventContent):
|
|
542
|
+
event_type: typing.Literal['MoveChoiceEvent'] = 'MoveChoiceEvent'
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
class MoveReferenceEventContent(_MoveQuestionEventContent):
|
|
546
|
+
event_type: typing.Literal['MoveReferenceEvent'] = 'MoveReferenceEvent'
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
class MoveExpertEventContent(_MoveQuestionEventContent):
|
|
550
|
+
event_type: typing.Literal['MoveExpertEvent'] = 'MoveExpertEvent'
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
# Event
|
|
554
|
+
EventContent = typing.Annotated[
|
|
555
|
+
AddKnowledgeModelEventContent |
|
|
556
|
+
EditKnowledgeModelEventContent |
|
|
557
|
+
AddChapterEventContent |
|
|
558
|
+
EditChapterEventContent |
|
|
559
|
+
DeleteChapterEventContent |
|
|
560
|
+
AddQuestionEventContent |
|
|
561
|
+
EditQuestionEventContent |
|
|
562
|
+
DeleteQuestionEventContent |
|
|
563
|
+
AddAnswerEventContent |
|
|
564
|
+
EditAnswerEventContent |
|
|
565
|
+
DeleteAnswerEventContent |
|
|
566
|
+
AddChoiceEventContent |
|
|
567
|
+
EditChoiceEventContent |
|
|
568
|
+
DeleteChoiceEventContent |
|
|
569
|
+
AddReferenceEventContent |
|
|
570
|
+
EditReferenceEventContent |
|
|
571
|
+
DeleteReferenceEventContent |
|
|
572
|
+
AddExpertEventContent |
|
|
573
|
+
EditExpertEventContent |
|
|
574
|
+
DeleteExpertEventContent |
|
|
575
|
+
AddIntegrationEventContent |
|
|
576
|
+
EditIntegrationEventContent |
|
|
577
|
+
DeleteIntegrationEventContent |
|
|
578
|
+
AddTagEventContent |
|
|
579
|
+
EditTagEventContent |
|
|
580
|
+
DeleteTagEventContent |
|
|
581
|
+
AddMetricEventContent |
|
|
582
|
+
EditMetricEventContent |
|
|
583
|
+
DeleteMetricEventContent |
|
|
584
|
+
AddPhaseEventContent |
|
|
585
|
+
EditPhaseEventContent |
|
|
586
|
+
DeletePhaseEventContent |
|
|
587
|
+
AddResourceCollectionEventContent |
|
|
588
|
+
EditResourceCollectionEventContent |
|
|
589
|
+
DeleteResourceCollectionEventContent |
|
|
590
|
+
AddResourcePageEventContent |
|
|
591
|
+
EditResourcePageEventContent |
|
|
592
|
+
DeleteResourcePageEventContent |
|
|
593
|
+
MoveQuestionEventContent |
|
|
594
|
+
MoveAnswerEventContent |
|
|
595
|
+
MoveChoiceEventContent |
|
|
596
|
+
MoveReferenceEventContent |
|
|
597
|
+
MoveExpertEventContent,
|
|
598
|
+
pydantic.Field(discriminator='event_type'),
|
|
599
|
+
]
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
class Event(BaseModel):
|
|
603
|
+
uuid: UUID
|
|
604
|
+
entity_uuid: UUID
|
|
605
|
+
parent_uuid: UUID
|
|
606
|
+
created_at: datetime.datetime
|
|
607
|
+
content: EventContent
|