nexo-schemas 0.0.16__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.
Files changed (69) hide show
  1. nexo/schemas/__init__.py +0 -0
  2. nexo/schemas/application.py +292 -0
  3. nexo/schemas/connection.py +134 -0
  4. nexo/schemas/data.py +27 -0
  5. nexo/schemas/document.py +237 -0
  6. nexo/schemas/error/__init__.py +476 -0
  7. nexo/schemas/error/constants.py +50 -0
  8. nexo/schemas/error/descriptor.py +354 -0
  9. nexo/schemas/error/enums.py +40 -0
  10. nexo/schemas/error/metadata.py +15 -0
  11. nexo/schemas/error/spec.py +312 -0
  12. nexo/schemas/exception/__init__.py +0 -0
  13. nexo/schemas/exception/exc.py +911 -0
  14. nexo/schemas/exception/factory.py +1928 -0
  15. nexo/schemas/exception/handlers.py +110 -0
  16. nexo/schemas/google.py +14 -0
  17. nexo/schemas/key/__init__.py +0 -0
  18. nexo/schemas/key/rsa.py +131 -0
  19. nexo/schemas/metadata.py +21 -0
  20. nexo/schemas/mixins/__init__.py +0 -0
  21. nexo/schemas/mixins/filter.py +140 -0
  22. nexo/schemas/mixins/general.py +65 -0
  23. nexo/schemas/mixins/hierarchy.py +19 -0
  24. nexo/schemas/mixins/identity.py +387 -0
  25. nexo/schemas/mixins/parameter.py +50 -0
  26. nexo/schemas/mixins/service.py +40 -0
  27. nexo/schemas/mixins/sort.py +111 -0
  28. nexo/schemas/mixins/timestamp.py +192 -0
  29. nexo/schemas/model.py +240 -0
  30. nexo/schemas/operation/__init__.py +0 -0
  31. nexo/schemas/operation/action/__init__.py +9 -0
  32. nexo/schemas/operation/action/base.py +14 -0
  33. nexo/schemas/operation/action/resource.py +371 -0
  34. nexo/schemas/operation/action/status.py +8 -0
  35. nexo/schemas/operation/action/system.py +6 -0
  36. nexo/schemas/operation/action/websocket.py +6 -0
  37. nexo/schemas/operation/base.py +289 -0
  38. nexo/schemas/operation/constants.py +18 -0
  39. nexo/schemas/operation/context.py +68 -0
  40. nexo/schemas/operation/dependency.py +26 -0
  41. nexo/schemas/operation/enums.py +168 -0
  42. nexo/schemas/operation/extractor.py +36 -0
  43. nexo/schemas/operation/mixins.py +53 -0
  44. nexo/schemas/operation/request.py +1066 -0
  45. nexo/schemas/operation/resource.py +839 -0
  46. nexo/schemas/operation/system.py +55 -0
  47. nexo/schemas/operation/websocket.py +55 -0
  48. nexo/schemas/pagination.py +67 -0
  49. nexo/schemas/parameter.py +60 -0
  50. nexo/schemas/payload.py +116 -0
  51. nexo/schemas/resource.py +64 -0
  52. nexo/schemas/response.py +1041 -0
  53. nexo/schemas/security/__init__.py +0 -0
  54. nexo/schemas/security/api_key.py +63 -0
  55. nexo/schemas/security/authentication.py +848 -0
  56. nexo/schemas/security/authorization.py +922 -0
  57. nexo/schemas/security/enums.py +32 -0
  58. nexo/schemas/security/impersonation.py +179 -0
  59. nexo/schemas/security/token.py +402 -0
  60. nexo/schemas/security/types.py +17 -0
  61. nexo/schemas/success/__init__.py +0 -0
  62. nexo/schemas/success/descriptor.py +100 -0
  63. nexo/schemas/success/enums.py +23 -0
  64. nexo/schemas/user_agent.py +46 -0
  65. nexo_schemas-0.0.16.dist-info/METADATA +87 -0
  66. nexo_schemas-0.0.16.dist-info/RECORD +69 -0
  67. nexo_schemas-0.0.16.dist-info/WHEEL +5 -0
  68. nexo_schemas-0.0.16.dist-info/licenses/LICENSE +21 -0
  69. nexo_schemas-0.0.16.dist-info/top_level.txt +1 -0
@@ -0,0 +1,839 @@
1
+ from copy import deepcopy
2
+ from pydantic import Field
3
+ from typing import Annotated, Generic, Literal, Type, overload
4
+ from uuid import UUID
5
+ from nexo.types.boolean import BoolT
6
+ from ..application import OptApplicationContext
7
+ from ..connection import OptConnectionContext
8
+ from ..data import ModelDataT
9
+ from ..error import OptAnyErrorT, AnyErrorT
10
+ from ..metadata import ModelMetadataT
11
+ from ..pagination import PaginationT
12
+ from ..resource import Resource
13
+ from ..response import (
14
+ ResponseT,
15
+ ErrorResponseT,
16
+ SuccessResponseT,
17
+ NoDataResponse,
18
+ CreateSingleDataResponse,
19
+ ReadSingleDataResponse,
20
+ UpdateSingleDataResponse,
21
+ DeleteSingleDataResponse,
22
+ CreateMultipleDataResponse,
23
+ ReadMultipleDataResponse,
24
+ UpdateMultipleDataResponse,
25
+ DeleteMultipleDataResponse,
26
+ )
27
+ from ..security.authentication import OptAnyAuthentication
28
+ from ..security.authorization import OptAnyAuthorization
29
+ from ..security.impersonation import OptImpersonation
30
+ from .action.resource import (
31
+ AnyResourceOperationActionT,
32
+ CreateResourceOperationAction,
33
+ ReadResourceOperationAction,
34
+ UpdateResourceOperationAction,
35
+ DeleteResourceOperationAction,
36
+ ResourceOperationActions,
37
+ AnyResourceOperationAction,
38
+ OptAnyResourceOperationAction,
39
+ ResourceOperationActionFactory,
40
+ )
41
+ from .base import BaseOperation
42
+ from .context import Context as OperationContext
43
+ from .enums import (
44
+ OperationType,
45
+ ResourceOperationType,
46
+ OptResourceOperationType,
47
+ OptResourceOperationUpdateType,
48
+ OptResourceOperationDataUpdateType,
49
+ OptResourceOperationStatusUpdateType,
50
+ )
51
+ from .mixins import Timestamp
52
+
53
+
54
+ class ResourceOperation(
55
+ BaseOperation[
56
+ AnyResourceOperationActionT,
57
+ Resource,
58
+ BoolT,
59
+ OptAnyErrorT,
60
+ OptConnectionContext,
61
+ ResponseT,
62
+ None,
63
+ ],
64
+ Generic[
65
+ AnyResourceOperationActionT,
66
+ BoolT,
67
+ OptAnyErrorT,
68
+ ResponseT,
69
+ ],
70
+ ):
71
+ type: OperationType = OperationType.RESOURCE
72
+ response_context: None = None
73
+
74
+
75
+ class FailedResourceOperation(
76
+ ResourceOperation[
77
+ AnyResourceOperationActionT,
78
+ Literal[False],
79
+ AnyErrorT,
80
+ ErrorResponseT,
81
+ ],
82
+ Generic[
83
+ AnyResourceOperationActionT,
84
+ AnyErrorT,
85
+ ErrorResponseT,
86
+ ],
87
+ ):
88
+ success: Literal[False] = False
89
+
90
+
91
+ class CreateFailedResourceOperation(
92
+ FailedResourceOperation[
93
+ CreateResourceOperationAction,
94
+ AnyErrorT,
95
+ ErrorResponseT,
96
+ ],
97
+ Generic[
98
+ AnyErrorT,
99
+ ErrorResponseT,
100
+ ],
101
+ ):
102
+ action: Annotated[
103
+ CreateResourceOperationAction,
104
+ Field(CreateResourceOperationAction(), description="Action"),
105
+ ] = CreateResourceOperationAction()
106
+
107
+
108
+ class ReadFailedResourceOperation(
109
+ FailedResourceOperation[
110
+ ReadResourceOperationAction,
111
+ AnyErrorT,
112
+ ErrorResponseT,
113
+ ],
114
+ Generic[
115
+ AnyErrorT,
116
+ ErrorResponseT,
117
+ ],
118
+ ):
119
+ action: Annotated[
120
+ ReadResourceOperationAction,
121
+ Field(ReadResourceOperationAction(), description="Action"),
122
+ ] = ReadResourceOperationAction()
123
+
124
+
125
+ class UpdateFailedResourceOperation(
126
+ FailedResourceOperation[
127
+ UpdateResourceOperationAction,
128
+ AnyErrorT,
129
+ ErrorResponseT,
130
+ ],
131
+ Generic[
132
+ AnyErrorT,
133
+ ErrorResponseT,
134
+ ],
135
+ ):
136
+ action: Annotated[
137
+ UpdateResourceOperationAction,
138
+ Field(UpdateResourceOperationAction(), description="Action"),
139
+ ] = UpdateResourceOperationAction()
140
+
141
+
142
+ class DeleteFailedResourceOperation(
143
+ FailedResourceOperation[
144
+ DeleteResourceOperationAction,
145
+ AnyErrorT,
146
+ ErrorResponseT,
147
+ ],
148
+ Generic[
149
+ AnyErrorT,
150
+ ErrorResponseT,
151
+ ],
152
+ ):
153
+ action: Annotated[
154
+ DeleteResourceOperationAction,
155
+ Field(DeleteResourceOperationAction(), description="Action"),
156
+ ] = DeleteResourceOperationAction()
157
+
158
+
159
+ class SuccessfulResourceOperation(
160
+ ResourceOperation[
161
+ AnyResourceOperationActionT,
162
+ Literal[True],
163
+ None,
164
+ SuccessResponseT,
165
+ ],
166
+ Generic[
167
+ AnyResourceOperationActionT,
168
+ SuccessResponseT,
169
+ ],
170
+ ):
171
+ success: Literal[True] = True
172
+ error: None = None
173
+
174
+
175
+ class NoDataResourceOperation(
176
+ SuccessfulResourceOperation[
177
+ AnyResourceOperationActionT,
178
+ NoDataResponse[ModelMetadataT],
179
+ ],
180
+ Generic[
181
+ AnyResourceOperationActionT,
182
+ ModelMetadataT,
183
+ ],
184
+ ):
185
+ pass
186
+
187
+
188
+ class CreateSingleResourceOperation(
189
+ SuccessfulResourceOperation[
190
+ CreateResourceOperationAction,
191
+ CreateSingleDataResponse[ModelDataT, ModelMetadataT],
192
+ ],
193
+ Generic[
194
+ ModelDataT,
195
+ ModelMetadataT,
196
+ ],
197
+ ):
198
+ action: Annotated[
199
+ CreateResourceOperationAction,
200
+ Field(CreateResourceOperationAction(), description="Action"),
201
+ ] = CreateResourceOperationAction()
202
+
203
+
204
+ class ReadSingleResourceOperation(
205
+ SuccessfulResourceOperation[
206
+ ReadResourceOperationAction,
207
+ ReadSingleDataResponse[ModelDataT, ModelMetadataT],
208
+ ],
209
+ Generic[
210
+ ModelDataT,
211
+ ModelMetadataT,
212
+ ],
213
+ ):
214
+ action: Annotated[
215
+ ReadResourceOperationAction,
216
+ Field(ReadResourceOperationAction(), description="Action"),
217
+ ] = ReadResourceOperationAction()
218
+
219
+
220
+ class UpdateSingleResourceOperation(
221
+ SuccessfulResourceOperation[
222
+ UpdateResourceOperationAction,
223
+ UpdateSingleDataResponse[ModelDataT, ModelMetadataT],
224
+ ],
225
+ Generic[
226
+ ModelDataT,
227
+ ModelMetadataT,
228
+ ],
229
+ ):
230
+ action: Annotated[
231
+ UpdateResourceOperationAction,
232
+ Field(UpdateResourceOperationAction(), description="Action"),
233
+ ] = UpdateResourceOperationAction()
234
+
235
+
236
+ class DeleteSingleResourceOperation(
237
+ SuccessfulResourceOperation[
238
+ DeleteResourceOperationAction,
239
+ DeleteSingleDataResponse[ModelDataT, ModelMetadataT],
240
+ ],
241
+ Generic[
242
+ ModelDataT,
243
+ ModelMetadataT,
244
+ ],
245
+ ):
246
+ action: Annotated[
247
+ DeleteResourceOperationAction,
248
+ Field(DeleteResourceOperationAction(), description="Action"),
249
+ ] = DeleteResourceOperationAction()
250
+
251
+
252
+ class CreateMultipleResourceOperation(
253
+ SuccessfulResourceOperation[
254
+ CreateResourceOperationAction,
255
+ CreateMultipleDataResponse[ModelDataT, PaginationT, ModelMetadataT],
256
+ ],
257
+ Generic[
258
+ ModelDataT,
259
+ PaginationT,
260
+ ModelMetadataT,
261
+ ],
262
+ ):
263
+ action: Annotated[
264
+ CreateResourceOperationAction,
265
+ Field(CreateResourceOperationAction(), description="Action"),
266
+ ] = CreateResourceOperationAction()
267
+
268
+
269
+ class ReadMultipleResourceOperation(
270
+ SuccessfulResourceOperation[
271
+ ReadResourceOperationAction,
272
+ ReadMultipleDataResponse[ModelDataT, PaginationT, ModelMetadataT],
273
+ ],
274
+ Generic[
275
+ ModelDataT,
276
+ PaginationT,
277
+ ModelMetadataT,
278
+ ],
279
+ ):
280
+ action: Annotated[
281
+ ReadResourceOperationAction,
282
+ Field(ReadResourceOperationAction(), description="Action"),
283
+ ] = ReadResourceOperationAction()
284
+
285
+
286
+ class UpdateMultipleResourceOperation(
287
+ SuccessfulResourceOperation[
288
+ UpdateResourceOperationAction,
289
+ UpdateMultipleDataResponse[ModelDataT, PaginationT, ModelMetadataT],
290
+ ],
291
+ Generic[
292
+ ModelDataT,
293
+ PaginationT,
294
+ ModelMetadataT,
295
+ ],
296
+ ):
297
+ action: Annotated[
298
+ UpdateResourceOperationAction,
299
+ Field(UpdateResourceOperationAction(), description="Action"),
300
+ ] = UpdateResourceOperationAction()
301
+
302
+
303
+ class DeleteMultipleResourceOperation(
304
+ SuccessfulResourceOperation[
305
+ DeleteResourceOperationAction,
306
+ DeleteMultipleDataResponse[ModelDataT, PaginationT, ModelMetadataT],
307
+ ],
308
+ Generic[
309
+ ModelDataT,
310
+ PaginationT,
311
+ ModelMetadataT,
312
+ ],
313
+ ):
314
+ action: Annotated[
315
+ DeleteResourceOperationAction,
316
+ Field(DeleteResourceOperationAction(), description="Action"),
317
+ ] = DeleteResourceOperationAction()
318
+
319
+
320
+ class FailedResourceOperationFactory(Generic[AnyErrorT, ErrorResponseT]):
321
+ @overload
322
+ @classmethod
323
+ def operation_cls_from_action(cls, action: CreateResourceOperationAction) -> Type[
324
+ CreateFailedResourceOperation[
325
+ AnyErrorT,
326
+ ErrorResponseT,
327
+ ]
328
+ ]: ...
329
+ @overload
330
+ @classmethod
331
+ def operation_cls_from_action(cls, action: ReadResourceOperationAction) -> Type[
332
+ ReadFailedResourceOperation[
333
+ AnyErrorT,
334
+ ErrorResponseT,
335
+ ]
336
+ ]: ...
337
+ @overload
338
+ @classmethod
339
+ def operation_cls_from_action(cls, action: UpdateResourceOperationAction) -> Type[
340
+ UpdateFailedResourceOperation[
341
+ AnyErrorT,
342
+ ErrorResponseT,
343
+ ]
344
+ ]: ...
345
+ @overload
346
+ @classmethod
347
+ def operation_cls_from_action(cls, action: DeleteResourceOperationAction) -> Type[
348
+ DeleteFailedResourceOperation[
349
+ AnyErrorT,
350
+ ErrorResponseT,
351
+ ]
352
+ ]: ...
353
+ @overload
354
+ @classmethod
355
+ def operation_cls_from_action(cls, action: AnyResourceOperationAction) -> (
356
+ Type[
357
+ CreateFailedResourceOperation[
358
+ AnyErrorT,
359
+ ErrorResponseT,
360
+ ]
361
+ ]
362
+ | Type[
363
+ ReadFailedResourceOperation[
364
+ AnyErrorT,
365
+ ErrorResponseT,
366
+ ]
367
+ ]
368
+ | Type[
369
+ UpdateFailedResourceOperation[
370
+ AnyErrorT,
371
+ ErrorResponseT,
372
+ ]
373
+ ]
374
+ | Type[
375
+ DeleteFailedResourceOperation[
376
+ AnyErrorT,
377
+ ErrorResponseT,
378
+ ]
379
+ ]
380
+ ): ...
381
+ @classmethod
382
+ def operation_cls_from_action(cls, action: AnyResourceOperationAction) -> (
383
+ Type[
384
+ CreateFailedResourceOperation[
385
+ AnyErrorT,
386
+ ErrorResponseT,
387
+ ]
388
+ ]
389
+ | Type[
390
+ ReadFailedResourceOperation[
391
+ AnyErrorT,
392
+ ErrorResponseT,
393
+ ]
394
+ ]
395
+ | Type[
396
+ UpdateFailedResourceOperation[
397
+ AnyErrorT,
398
+ ErrorResponseT,
399
+ ]
400
+ ]
401
+ | Type[
402
+ DeleteFailedResourceOperation[
403
+ AnyErrorT,
404
+ ErrorResponseT,
405
+ ]
406
+ ]
407
+ ):
408
+ if isinstance(action, CreateResourceOperationAction):
409
+ operation_cls = CreateFailedResourceOperation[
410
+ AnyErrorT,
411
+ ErrorResponseT,
412
+ ]
413
+ elif isinstance(action, ReadResourceOperationAction):
414
+ operation_cls = ReadFailedResourceOperation[
415
+ AnyErrorT,
416
+ ErrorResponseT,
417
+ ]
418
+ elif isinstance(action, UpdateResourceOperationAction):
419
+ operation_cls = UpdateFailedResourceOperation[
420
+ AnyErrorT,
421
+ ErrorResponseT,
422
+ ]
423
+ elif isinstance(action, DeleteResourceOperationAction):
424
+ operation_cls = DeleteFailedResourceOperation[
425
+ AnyErrorT,
426
+ ErrorResponseT,
427
+ ]
428
+ return operation_cls
429
+
430
+ @overload
431
+ @classmethod
432
+ def operation_cls_from_type(
433
+ cls,
434
+ type_: Literal[ResourceOperationType.CREATE],
435
+ ) -> Type[
436
+ CreateFailedResourceOperation[
437
+ AnyErrorT,
438
+ ErrorResponseT,
439
+ ]
440
+ ]: ...
441
+ @overload
442
+ @classmethod
443
+ def operation_cls_from_type(
444
+ cls,
445
+ type_: Literal[ResourceOperationType.READ],
446
+ ) -> Type[
447
+ ReadFailedResourceOperation[
448
+ AnyErrorT,
449
+ ErrorResponseT,
450
+ ]
451
+ ]: ...
452
+ @overload
453
+ @classmethod
454
+ def operation_cls_from_type(
455
+ cls,
456
+ type_: Literal[ResourceOperationType.UPDATE],
457
+ ) -> Type[
458
+ UpdateFailedResourceOperation[
459
+ AnyErrorT,
460
+ ErrorResponseT,
461
+ ]
462
+ ]: ...
463
+ @overload
464
+ @classmethod
465
+ def operation_cls_from_type(
466
+ cls,
467
+ type_: Literal[ResourceOperationType.DELETE],
468
+ ) -> Type[
469
+ DeleteFailedResourceOperation[
470
+ AnyErrorT,
471
+ ErrorResponseT,
472
+ ]
473
+ ]: ...
474
+ @classmethod
475
+ def operation_cls_from_type(
476
+ cls,
477
+ type_: ResourceOperationType,
478
+ ) -> (
479
+ Type[
480
+ CreateFailedResourceOperation[
481
+ AnyErrorT,
482
+ ErrorResponseT,
483
+ ]
484
+ ]
485
+ | Type[
486
+ ReadFailedResourceOperation[
487
+ AnyErrorT,
488
+ ErrorResponseT,
489
+ ]
490
+ ]
491
+ | Type[
492
+ UpdateFailedResourceOperation[
493
+ AnyErrorT,
494
+ ErrorResponseT,
495
+ ]
496
+ ]
497
+ | Type[
498
+ DeleteFailedResourceOperation[
499
+ AnyErrorT,
500
+ ErrorResponseT,
501
+ ]
502
+ ]
503
+ ):
504
+ if type_ is ResourceOperationType.CREATE:
505
+ operation_cls = CreateFailedResourceOperation[
506
+ AnyErrorT,
507
+ ErrorResponseT,
508
+ ]
509
+ elif type_ is ResourceOperationType.READ:
510
+ operation_cls = ReadFailedResourceOperation[
511
+ AnyErrorT,
512
+ ErrorResponseT,
513
+ ]
514
+ elif type_ is ResourceOperationType.UPDATE:
515
+ operation_cls = UpdateFailedResourceOperation[
516
+ AnyErrorT,
517
+ ErrorResponseT,
518
+ ]
519
+ elif type_ is ResourceOperationType.DELETE:
520
+ operation_cls = DeleteFailedResourceOperation[
521
+ AnyErrorT,
522
+ ErrorResponseT,
523
+ ]
524
+ return operation_cls
525
+
526
+ @overload
527
+ @classmethod
528
+ def generate(
529
+ cls,
530
+ action: CreateResourceOperationAction,
531
+ *,
532
+ application_context: OptApplicationContext = None,
533
+ id: UUID,
534
+ context: OperationContext,
535
+ resource: Resource,
536
+ timestamp: Timestamp,
537
+ summary: str,
538
+ error: AnyErrorT,
539
+ connection_context: OptConnectionContext = None,
540
+ authentication: OptAnyAuthentication = None,
541
+ authorization: OptAnyAuthorization = None,
542
+ impersonation: OptImpersonation = None,
543
+ response: ErrorResponseT,
544
+ ) -> CreateFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
545
+ @overload
546
+ @classmethod
547
+ def generate(
548
+ cls,
549
+ action: ReadResourceOperationAction,
550
+ *,
551
+ application_context: OptApplicationContext = None,
552
+ id: UUID,
553
+ context: OperationContext,
554
+ resource: Resource,
555
+ timestamp: Timestamp,
556
+ summary: str,
557
+ error: AnyErrorT,
558
+ connection_context: OptConnectionContext = None,
559
+ authentication: OptAnyAuthentication = None,
560
+ authorization: OptAnyAuthorization = None,
561
+ impersonation: OptImpersonation = None,
562
+ response: ErrorResponseT,
563
+ ) -> ReadFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
564
+ @overload
565
+ @classmethod
566
+ def generate(
567
+ cls,
568
+ action: UpdateResourceOperationAction,
569
+ *,
570
+ application_context: OptApplicationContext = None,
571
+ id: UUID,
572
+ context: OperationContext,
573
+ resource: Resource,
574
+ timestamp: Timestamp,
575
+ summary: str,
576
+ error: AnyErrorT,
577
+ connection_context: OptConnectionContext = None,
578
+ authentication: OptAnyAuthentication = None,
579
+ authorization: OptAnyAuthorization = None,
580
+ impersonation: OptImpersonation = None,
581
+ response: ErrorResponseT,
582
+ ) -> UpdateFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
583
+ @overload
584
+ @classmethod
585
+ def generate(
586
+ cls,
587
+ action: DeleteResourceOperationAction,
588
+ *,
589
+ application_context: OptApplicationContext = None,
590
+ id: UUID,
591
+ context: OperationContext,
592
+ resource: Resource,
593
+ timestamp: Timestamp,
594
+ summary: str,
595
+ error: AnyErrorT,
596
+ connection_context: OptConnectionContext = None,
597
+ authentication: OptAnyAuthentication = None,
598
+ authorization: OptAnyAuthorization = None,
599
+ impersonation: OptImpersonation = None,
600
+ response: ErrorResponseT,
601
+ ) -> DeleteFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
602
+ @overload
603
+ @classmethod
604
+ def generate(
605
+ cls,
606
+ action: AnyResourceOperationAction,
607
+ *,
608
+ application_context: OptApplicationContext = None,
609
+ id: UUID,
610
+ context: OperationContext,
611
+ resource: Resource,
612
+ timestamp: Timestamp,
613
+ summary: str,
614
+ error: AnyErrorT,
615
+ connection_context: OptConnectionContext = None,
616
+ authentication: OptAnyAuthentication = None,
617
+ authorization: OptAnyAuthorization = None,
618
+ impersonation: OptImpersonation = None,
619
+ response: ErrorResponseT,
620
+ ) -> (
621
+ CreateFailedResourceOperation[
622
+ AnyErrorT,
623
+ ErrorResponseT,
624
+ ]
625
+ | ReadFailedResourceOperation[
626
+ AnyErrorT,
627
+ ErrorResponseT,
628
+ ]
629
+ | UpdateFailedResourceOperation[
630
+ AnyErrorT,
631
+ ErrorResponseT,
632
+ ]
633
+ | DeleteFailedResourceOperation[
634
+ AnyErrorT,
635
+ ErrorResponseT,
636
+ ]
637
+ ): ...
638
+ @overload
639
+ @classmethod
640
+ def generate(
641
+ cls,
642
+ *,
643
+ type_: Literal[ResourceOperationType.CREATE],
644
+ application_context: OptApplicationContext = None,
645
+ id: UUID,
646
+ context: OperationContext,
647
+ resource: Resource,
648
+ timestamp: Timestamp,
649
+ summary: str,
650
+ error: AnyErrorT,
651
+ connection_context: OptConnectionContext = None,
652
+ authentication: OptAnyAuthentication = None,
653
+ authorization: OptAnyAuthorization = None,
654
+ impersonation: OptImpersonation = None,
655
+ response: ErrorResponseT,
656
+ ) -> CreateFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
657
+ @overload
658
+ @classmethod
659
+ def generate(
660
+ cls,
661
+ *,
662
+ type_: Literal[ResourceOperationType.READ],
663
+ application_context: OptApplicationContext = None,
664
+ id: UUID,
665
+ context: OperationContext,
666
+ resource: Resource,
667
+ timestamp: Timestamp,
668
+ summary: str,
669
+ error: AnyErrorT,
670
+ connection_context: OptConnectionContext = None,
671
+ authentication: OptAnyAuthentication = None,
672
+ authorization: OptAnyAuthorization = None,
673
+ impersonation: OptImpersonation = None,
674
+ response: ErrorResponseT,
675
+ ) -> ReadFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
676
+ @overload
677
+ @classmethod
678
+ def generate(
679
+ cls,
680
+ *,
681
+ type_: Literal[ResourceOperationType.UPDATE],
682
+ update_type: OptResourceOperationUpdateType = ...,
683
+ data_update_type: OptResourceOperationDataUpdateType = ...,
684
+ status_update_type: OptResourceOperationStatusUpdateType = ...,
685
+ application_context: OptApplicationContext = None,
686
+ id: UUID,
687
+ context: OperationContext,
688
+ resource: Resource,
689
+ timestamp: Timestamp,
690
+ summary: str,
691
+ error: AnyErrorT,
692
+ connection_context: OptConnectionContext = None,
693
+ authentication: OptAnyAuthentication = None,
694
+ authorization: OptAnyAuthorization = None,
695
+ impersonation: OptImpersonation = None,
696
+ response: ErrorResponseT,
697
+ ) -> UpdateFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
698
+ @overload
699
+ @classmethod
700
+ def generate(
701
+ cls,
702
+ *,
703
+ type_: Literal[ResourceOperationType.DELETE],
704
+ application_context: OptApplicationContext = None,
705
+ id: UUID,
706
+ context: OperationContext,
707
+ resource: Resource,
708
+ timestamp: Timestamp,
709
+ summary: str,
710
+ error: AnyErrorT,
711
+ connection_context: OptConnectionContext = None,
712
+ authentication: OptAnyAuthentication = None,
713
+ authorization: OptAnyAuthorization = None,
714
+ impersonation: OptImpersonation = None,
715
+ response: ErrorResponseT,
716
+ ) -> DeleteFailedResourceOperation[AnyErrorT, ErrorResponseT]: ...
717
+ @overload
718
+ @classmethod
719
+ def generate(
720
+ cls,
721
+ *,
722
+ type_: ResourceOperationType,
723
+ update_type: OptResourceOperationUpdateType = None,
724
+ data_update_type: OptResourceOperationDataUpdateType = None,
725
+ status_update_type: OptResourceOperationStatusUpdateType = None,
726
+ application_context: OptApplicationContext = None,
727
+ id: UUID,
728
+ context: OperationContext,
729
+ resource: Resource,
730
+ timestamp: Timestamp,
731
+ summary: str,
732
+ error: AnyErrorT,
733
+ connection_context: OptConnectionContext = None,
734
+ authentication: OptAnyAuthentication = None,
735
+ authorization: OptAnyAuthorization = None,
736
+ impersonation: OptImpersonation = None,
737
+ response: ErrorResponseT,
738
+ ) -> (
739
+ CreateFailedResourceOperation[
740
+ AnyErrorT,
741
+ ErrorResponseT,
742
+ ]
743
+ | ReadFailedResourceOperation[
744
+ AnyErrorT,
745
+ ErrorResponseT,
746
+ ]
747
+ | UpdateFailedResourceOperation[
748
+ AnyErrorT,
749
+ ErrorResponseT,
750
+ ]
751
+ | DeleteFailedResourceOperation[
752
+ AnyErrorT,
753
+ ErrorResponseT,
754
+ ]
755
+ ): ...
756
+ @classmethod
757
+ def generate(
758
+ cls,
759
+ action: OptAnyResourceOperationAction = None,
760
+ *,
761
+ type_: OptResourceOperationType = None,
762
+ update_type: OptResourceOperationUpdateType = None,
763
+ data_update_type: OptResourceOperationDataUpdateType = None,
764
+ status_update_type: OptResourceOperationStatusUpdateType = None,
765
+ application_context: OptApplicationContext = None,
766
+ id: UUID,
767
+ context: OperationContext,
768
+ resource: Resource,
769
+ timestamp: Timestamp,
770
+ summary: str,
771
+ error: AnyErrorT,
772
+ connection_context: OptConnectionContext = None,
773
+ authentication: OptAnyAuthentication = None,
774
+ authorization: OptAnyAuthorization = None,
775
+ impersonation: OptImpersonation = None,
776
+ response: ErrorResponseT,
777
+ ) -> (
778
+ CreateFailedResourceOperation[
779
+ AnyErrorT,
780
+ ErrorResponseT,
781
+ ]
782
+ | ReadFailedResourceOperation[
783
+ AnyErrorT,
784
+ ErrorResponseT,
785
+ ]
786
+ | UpdateFailedResourceOperation[
787
+ AnyErrorT,
788
+ ErrorResponseT,
789
+ ]
790
+ | DeleteFailedResourceOperation[
791
+ AnyErrorT,
792
+ ErrorResponseT,
793
+ ]
794
+ ):
795
+ if (action is None and type_ is None) or (
796
+ action is not None and type_ is not None
797
+ ):
798
+ raise ValueError("Only either 'action' or 'type' must be given")
799
+
800
+ common_kwargs = {
801
+ "id": id,
802
+ "context": context,
803
+ "resource": resource,
804
+ "timestamp": timestamp,
805
+ "summary": summary,
806
+ "error": error,
807
+ "connection_context": connection_context,
808
+ "authentication": authentication,
809
+ "authorization": authorization,
810
+ "impersonation": impersonation,
811
+ "response": response,
812
+ }
813
+
814
+ if application_context is not None:
815
+ common_kwargs["application_context"] = application_context
816
+
817
+ if action is not None:
818
+ if not isinstance(action, ResourceOperationActions):
819
+ raise ValueError(f"Invalid 'action' type: '{type(action)}'")
820
+
821
+ kwargs = deepcopy(common_kwargs)
822
+ kwargs["action"] = action
823
+
824
+ return cls.operation_cls_from_action(action).model_validate(kwargs)
825
+
826
+ if type_ is not None:
827
+ action = ResourceOperationActionFactory.generate(
828
+ type_,
829
+ update_type=update_type,
830
+ data_update_type=data_update_type,
831
+ status_update_type=status_update_type,
832
+ )
833
+ kwargs = deepcopy(common_kwargs)
834
+ kwargs["action"] = action
835
+ return cls.operation_cls_from_type(type_).model_validate(kwargs)
836
+
837
+ # This should never happen due to initial validation,
838
+ # but type checker needs to see all paths covered
839
+ raise ValueError("Neither 'action' nor 'type' provided")