maleo-identity 0.0.85__py3-none-any.whl → 0.1.24__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 (138) hide show
  1. maleo/identity/constants/api_key.py +13 -0
  2. maleo/identity/constants/organization.py +3 -10
  3. maleo/identity/constants/organization_registration_code.py +5 -17
  4. maleo/identity/constants/organization_relation.py +13 -0
  5. maleo/identity/constants/patient.py +7 -0
  6. maleo/identity/constants/user.py +3 -20
  7. maleo/identity/constants/user_medical_role.py +13 -0
  8. maleo/identity/constants/user_organization_role.py +5 -39
  9. maleo/identity/constants/user_profile.py +3 -21
  10. maleo/identity/constants/user_system_role.py +9 -8
  11. maleo/identity/enums/api_key.py +25 -0
  12. maleo/identity/enums/organization.py +16 -3
  13. maleo/identity/enums/organization_registration_code.py +9 -0
  14. maleo/identity/enums/organization_relation.py +22 -0
  15. maleo/identity/enums/patient.py +29 -0
  16. maleo/identity/enums/user.py +16 -7
  17. maleo/identity/enums/user_medical_role.py +22 -0
  18. maleo/identity/enums/user_organization_role.py +19 -12
  19. maleo/identity/enums/user_profile.py +7 -9
  20. maleo/identity/enums/user_system_role.py +30 -0
  21. maleo/identity/mixins/api_key.py +72 -0
  22. maleo/identity/mixins/common.py +29 -0
  23. maleo/identity/mixins/organization.py +68 -8
  24. maleo/identity/mixins/organization_registration_code.py +126 -9
  25. maleo/identity/mixins/organization_relation.py +80 -0
  26. maleo/identity/mixins/patient.py +65 -0
  27. maleo/identity/mixins/user.py +86 -24
  28. maleo/identity/mixins/user_medical_role.py +68 -0
  29. maleo/identity/mixins/user_organization_role.py +68 -4
  30. maleo/identity/mixins/user_profile.py +84 -53
  31. maleo/identity/mixins/user_system_role.py +72 -4
  32. maleo/identity/schemas/api_key.py +171 -0
  33. maleo/identity/schemas/common.py +335 -0
  34. maleo/identity/schemas/organization.py +311 -0
  35. maleo/identity/schemas/organization_registration_code.py +314 -0
  36. maleo/identity/schemas/organization_relation.py +315 -0
  37. maleo/identity/schemas/patient.py +349 -0
  38. maleo/identity/schemas/user.py +318 -0
  39. maleo/identity/schemas/user_medical_role.py +316 -0
  40. maleo/identity/schemas/user_organization_role.py +317 -0
  41. maleo/identity/schemas/user_profile.py +362 -0
  42. maleo/identity/schemas/user_system_role.py +339 -0
  43. maleo/identity/types/api_key.py +7 -0
  44. maleo/identity/types/organization.py +4 -0
  45. maleo/identity/types/organization_registration_code.py +4 -0
  46. maleo/identity/types/organization_relation.py +7 -0
  47. maleo/identity/types/patient.py +4 -0
  48. maleo/identity/types/user.py +4 -0
  49. maleo/identity/types/user_medical_role.py +7 -0
  50. maleo/identity/types/user_organization_role.py +7 -0
  51. maleo/identity/types/user_profile.py +4 -0
  52. maleo/identity/types/user_system_role.py +8 -0
  53. maleo/identity/utils/organization.py +32 -0
  54. maleo/identity/utils/user.py +32 -0
  55. maleo_identity-0.1.24.dist-info/METADATA +119 -0
  56. maleo_identity-0.1.24.dist-info/RECORD +66 -0
  57. maleo_identity-0.1.24.dist-info/licenses/LICENSE +57 -0
  58. maleo/identity/client/manager.py +0 -157
  59. maleo/identity/client/services/__init__.py +0 -0
  60. maleo/identity/client/services/organization.py +0 -1944
  61. maleo/identity/client/services/organization_registration_code.py +0 -470
  62. maleo/identity/client/services/organization_role.py +0 -276
  63. maleo/identity/client/services/user.py +0 -1559
  64. maleo/identity/client/services/user_organization.py +0 -276
  65. maleo/identity/client/services/user_organization_role.py +0 -278
  66. maleo/identity/client/services/user_profile.py +0 -276
  67. maleo/identity/client/services/user_system_role.py +0 -276
  68. maleo/identity/constants/organization_role.py +0 -35
  69. maleo/identity/constants/user_organization.py +0 -58
  70. maleo/identity/db.py +0 -4
  71. maleo/identity/dtos/__init__.py +0 -0
  72. maleo/identity/dtos/configuration.py +0 -15
  73. maleo/identity/dtos/data/__init__.py +0 -0
  74. maleo/identity/dtos/data/organization_registration_code.py +0 -15
  75. maleo/identity/dtos/data/user_profile.py +0 -29
  76. maleo/identity/dtos/settings.py +0 -17
  77. maleo/identity/enums/general.py +0 -5
  78. maleo/identity/enums/organization_role.py +0 -7
  79. maleo/identity/enums/user_organization.py +0 -14
  80. maleo/identity/mixins/organization_role.py +0 -15
  81. maleo/identity/mixins/user_organization.py +0 -6
  82. maleo/identity/models/__init__.py +0 -0
  83. maleo/identity/models/organization.py +0 -62
  84. maleo/identity/models/organization_registration_code.py +0 -33
  85. maleo/identity/models/organization_role.py +0 -37
  86. maleo/identity/models/user.py +0 -39
  87. maleo/identity/models/user_organization.py +0 -48
  88. maleo/identity/models/user_organization_role.py +0 -61
  89. maleo/identity/models/user_profile.py +0 -33
  90. maleo/identity/models/user_system_role.py +0 -26
  91. maleo/identity/schemas/data/__init__.py +0 -0
  92. maleo/identity/schemas/data/organization.py +0 -36
  93. maleo/identity/schemas/data/organization_registration_code.py +0 -27
  94. maleo/identity/schemas/data/organization_role.py +0 -32
  95. maleo/identity/schemas/data/user.py +0 -33
  96. maleo/identity/schemas/data/user_organization.py +0 -23
  97. maleo/identity/schemas/data/user_organization_role.py +0 -13
  98. maleo/identity/schemas/data/user_profile.py +0 -59
  99. maleo/identity/schemas/data/user_system_role.py +0 -25
  100. maleo/identity/schemas/metadata/__init__.py +0 -0
  101. maleo/identity/schemas/metadata/user.py +0 -6
  102. maleo/identity/schemas/parameter/__init__.py +0 -0
  103. maleo/identity/schemas/parameter/client/__init__.py +0 -0
  104. maleo/identity/schemas/parameter/client/organization.py +0 -74
  105. maleo/identity/schemas/parameter/client/organization_registration_code.py +0 -24
  106. maleo/identity/schemas/parameter/client/organization_role.py +0 -42
  107. maleo/identity/schemas/parameter/client/user.py +0 -44
  108. maleo/identity/schemas/parameter/client/user_organization.py +0 -62
  109. maleo/identity/schemas/parameter/client/user_organization_role.py +0 -49
  110. maleo/identity/schemas/parameter/client/user_profile.py +0 -28
  111. maleo/identity/schemas/parameter/client/user_system_role.py +0 -43
  112. maleo/identity/schemas/parameter/general/__init__.py +0 -0
  113. maleo/identity/schemas/parameter/general/organization.py +0 -43
  114. maleo/identity/schemas/parameter/general/organization_registration_code.py +0 -54
  115. maleo/identity/schemas/parameter/general/organization_role.py +0 -14
  116. maleo/identity/schemas/parameter/general/user.py +0 -101
  117. maleo/identity/schemas/parameter/general/user_organization.py +0 -18
  118. maleo/identity/schemas/parameter/general/user_organization_role.py +0 -15
  119. maleo/identity/schemas/parameter/general/user_profile.py +0 -70
  120. maleo/identity/schemas/parameter/general/user_system_role.py +0 -30
  121. maleo/identity/schemas/parameter/service/__init__.py +0 -0
  122. maleo/identity/schemas/parameter/service/organization.py +0 -60
  123. maleo/identity/schemas/parameter/service/organization_registration_code.py +0 -24
  124. maleo/identity/schemas/parameter/service/organization_role.py +0 -35
  125. maleo/identity/schemas/parameter/service/user.py +0 -47
  126. maleo/identity/schemas/parameter/service/user_organization_role.py +0 -36
  127. maleo/identity/schemas/parameter/service/user_profile.py +0 -28
  128. maleo/identity/schemas/parameter/service/user_system_role.py +0 -31
  129. maleo/identity/types/base/__init__.py +0 -0
  130. maleo/identity/types/base/organization.py +0 -5
  131. maleo/identity/types/base/organization_registration_code.py +0 -4
  132. maleo/identity/types/base/user.py +0 -5
  133. maleo/identity/types/base/user_profile.py +0 -5
  134. maleo_identity-0.0.85.dist-info/METADATA +0 -40
  135. maleo_identity-0.0.85.dist-info/RECORD +0 -105
  136. /maleo/identity/{client → utils}/__init__.py +0 -0
  137. {maleo_identity-0.0.85.dist-info → maleo_identity-0.1.24.dist-info}/WHEEL +0 -0
  138. {maleo_identity-0.0.85.dist-info → maleo_identity-0.1.24.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,362 @@
1
+ from pydantic import BaseModel, Field
2
+ from typing import Annotated, Generic, Literal, TypeVar, overload
3
+ from uuid import UUID
4
+ from maleo.enums.identity import (
5
+ OptBloodType,
6
+ BloodTypeMixin,
7
+ OptListOfBloodTypes,
8
+ BloodTypesMixin,
9
+ OptGender,
10
+ GenderMixin,
11
+ OptListOfGenders,
12
+ GendersMixin,
13
+ )
14
+ from maleo.enums.status import (
15
+ ListOfDataStatuses,
16
+ FULL_DATA_STATUSES,
17
+ )
18
+ from maleo.schemas.mixins.filter import convert as convert_filter
19
+ from maleo.schemas.mixins.identity import (
20
+ IdentifierMixin,
21
+ Ids,
22
+ UUIDs,
23
+ IntUserId,
24
+ IntUserIds,
25
+ IntOrganizationIds,
26
+ BirthDate,
27
+ )
28
+ from maleo.schemas.mixins.sort import convert as convert_sort
29
+ from maleo.schemas.operation.enums import ResourceOperationStatusUpdateType
30
+ from maleo.schemas.parameter import (
31
+ ReadSingleParameter as BaseReadSingleParameter,
32
+ ReadPaginatedMultipleParameter,
33
+ StatusUpdateParameter as BaseStatusUpdateParameter,
34
+ DeleteSingleParameter as BaseDeleteSingleParameter,
35
+ )
36
+ from maleo.types.datetime import OptDate
37
+ from maleo.types.dict import StrToAnyDict
38
+ from maleo.types.integer import OptListOfInts
39
+ from maleo.types.string import OptStr
40
+ from maleo.types.uuid import OptListOfUUIDs
41
+ from ..enums.user_profile import IdentifierType
42
+ from ..mixins.common import (
43
+ IdCard,
44
+ FullName,
45
+ BirthPlace,
46
+ )
47
+ from ..mixins.user_profile import (
48
+ LeadingTitle,
49
+ FirstName,
50
+ MiddleName,
51
+ LastName,
52
+ EndingTitle,
53
+ UserProfileIdentifier,
54
+ )
55
+ from ..types.user_profile import IdentifierValueType
56
+
57
+
58
+ class CreateParameter(
59
+ BloodTypeMixin[OptBloodType],
60
+ GenderMixin[OptGender],
61
+ BirthDate[OptDate],
62
+ BirthPlace[OptStr],
63
+ FullName[str],
64
+ EndingTitle[OptStr],
65
+ LastName[str],
66
+ MiddleName[OptStr],
67
+ FirstName[str],
68
+ LeadingTitle[OptStr],
69
+ IdCard[OptStr],
70
+ IntUserId[int],
71
+ ):
72
+ pass
73
+
74
+
75
+ class ReadMultipleParameter(
76
+ ReadPaginatedMultipleParameter,
77
+ BloodTypesMixin[OptListOfBloodTypes],
78
+ GendersMixin[OptListOfGenders],
79
+ UUIDs[OptListOfUUIDs],
80
+ Ids[OptListOfInts],
81
+ IntOrganizationIds[OptListOfInts],
82
+ IntUserIds[OptListOfInts],
83
+ ):
84
+ user_ids: Annotated[OptListOfInts, Field(None, description="User's IDs")] = None
85
+ organization_ids: Annotated[
86
+ OptListOfInts, Field(None, description="Organization's IDs")
87
+ ] = None
88
+ ids: Annotated[OptListOfInts, Field(None, description="Ids")] = None
89
+ uuids: Annotated[OptListOfUUIDs, Field(None, description="UUIDs")] = None
90
+ genders: Annotated[OptListOfGenders, Field(None, description="Genders")] = None
91
+ blood_types: Annotated[
92
+ OptListOfBloodTypes, Field(None, description="Blood Types")
93
+ ] = None
94
+
95
+ @property
96
+ def _query_param_fields(self) -> set[str]:
97
+ return {
98
+ "user_ids",
99
+ "organization_ids",
100
+ "ids",
101
+ "uuids",
102
+ "statuses",
103
+ "genders",
104
+ "blood_types",
105
+ "search",
106
+ "page",
107
+ "limit",
108
+ "use_cache",
109
+ }
110
+
111
+ def to_query_params(self) -> StrToAnyDict:
112
+ params = self.model_dump(
113
+ mode="json", include=self._query_param_fields, exclude_none=True
114
+ )
115
+ params["filters"] = convert_filter(self.date_filters)
116
+ params["sorts"] = convert_sort(self.sort_columns)
117
+ params = {k: v for k, v in params.items()}
118
+ return params
119
+
120
+
121
+ class ReadSingleParameter(BaseReadSingleParameter[UserProfileIdentifier]):
122
+ @classmethod
123
+ def from_identifier(
124
+ cls,
125
+ identifier: UserProfileIdentifier,
126
+ statuses: ListOfDataStatuses = FULL_DATA_STATUSES,
127
+ use_cache: bool = True,
128
+ ) -> "ReadSingleParameter":
129
+ return cls(identifier=identifier, statuses=statuses, use_cache=use_cache)
130
+
131
+ @overload
132
+ @classmethod
133
+ def new(
134
+ cls,
135
+ identifier_type: Literal[IdentifierType.ID, IdentifierType.USER_ID],
136
+ identifier_value: int,
137
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
138
+ use_cache: bool = True,
139
+ ) -> "ReadSingleParameter": ...
140
+ @overload
141
+ @classmethod
142
+ def new(
143
+ cls,
144
+ identifier_type: Literal[IdentifierType.UUID],
145
+ identifier_value: UUID,
146
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
147
+ use_cache: bool = True,
148
+ ) -> "ReadSingleParameter": ...
149
+ @overload
150
+ @classmethod
151
+ def new(
152
+ cls,
153
+ identifier_type: Literal[IdentifierType.ID_CARD],
154
+ identifier_value: str,
155
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
156
+ use_cache: bool = True,
157
+ ) -> "ReadSingleParameter": ...
158
+ @overload
159
+ @classmethod
160
+ def new(
161
+ cls,
162
+ identifier_type: IdentifierType,
163
+ identifier_value: IdentifierValueType,
164
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
165
+ use_cache: bool = True,
166
+ ) -> "ReadSingleParameter": ...
167
+ @classmethod
168
+ def new(
169
+ cls,
170
+ identifier_type: IdentifierType,
171
+ identifier_value: IdentifierValueType,
172
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
173
+ use_cache: bool = True,
174
+ ) -> "ReadSingleParameter":
175
+ return cls(
176
+ identifier=UserProfileIdentifier(
177
+ type=identifier_type,
178
+ value=identifier_value,
179
+ ),
180
+ statuses=statuses,
181
+ use_cache=use_cache,
182
+ )
183
+
184
+ def to_query_params(self) -> StrToAnyDict:
185
+ return self.model_dump(
186
+ mode="json", include={"statuses", "use_cache"}, exclude_none=True
187
+ )
188
+
189
+
190
+ class FullUpdateData(
191
+ BloodTypeMixin[OptBloodType],
192
+ GenderMixin[OptGender],
193
+ BirthDate[OptDate],
194
+ BirthPlace[OptStr],
195
+ EndingTitle[OptStr],
196
+ LastName[str],
197
+ MiddleName[OptStr],
198
+ FirstName[str],
199
+ LeadingTitle[OptStr],
200
+ IdCard[OptStr],
201
+ ):
202
+ pass
203
+
204
+
205
+ class PartialUpdateData(
206
+ BloodTypeMixin[OptBloodType],
207
+ GenderMixin[OptGender],
208
+ BirthDate[OptDate],
209
+ BirthPlace[OptStr],
210
+ EndingTitle[OptStr],
211
+ LastName[OptStr],
212
+ MiddleName[OptStr],
213
+ FirstName[OptStr],
214
+ LeadingTitle[OptStr],
215
+ IdCard[OptStr],
216
+ ):
217
+ pass
218
+
219
+
220
+ UpdateDataT = TypeVar("UpdateDataT", FullUpdateData, PartialUpdateData)
221
+
222
+
223
+ class UpdateDataMixin(BaseModel, Generic[UpdateDataT]):
224
+ data: UpdateDataT = Field(..., description="Update data")
225
+
226
+
227
+ class UpdateParameter(
228
+ UpdateDataMixin[UpdateDataT],
229
+ IdentifierMixin[UserProfileIdentifier],
230
+ Generic[UpdateDataT],
231
+ ):
232
+ @overload
233
+ @classmethod
234
+ def new(
235
+ cls,
236
+ identifier_type: Literal[IdentifierType.ID, IdentifierType.USER_ID],
237
+ identifier_value: int,
238
+ data: UpdateDataT,
239
+ ) -> "UpdateParameter": ...
240
+ @overload
241
+ @classmethod
242
+ def new(
243
+ cls,
244
+ identifier_type: Literal[IdentifierType.UUID],
245
+ identifier_value: UUID,
246
+ data: UpdateDataT,
247
+ ) -> "UpdateParameter": ...
248
+ @overload
249
+ @classmethod
250
+ def new(
251
+ cls,
252
+ identifier_type: Literal[IdentifierType.ID_CARD],
253
+ identifier_value: str,
254
+ data: UpdateDataT,
255
+ ) -> "UpdateParameter": ...
256
+ @overload
257
+ @classmethod
258
+ def new(
259
+ cls,
260
+ identifier_type: IdentifierType,
261
+ identifier_value: IdentifierValueType,
262
+ data: UpdateDataT,
263
+ ) -> "UpdateParameter": ...
264
+ @classmethod
265
+ def new(
266
+ cls,
267
+ identifier_type: IdentifierType,
268
+ identifier_value: IdentifierValueType,
269
+ data: UpdateDataT,
270
+ ) -> "UpdateParameter":
271
+ return cls(
272
+ identifier=UserProfileIdentifier(
273
+ type=identifier_type, value=identifier_value
274
+ ),
275
+ data=data,
276
+ )
277
+
278
+
279
+ class StatusUpdateParameter(
280
+ BaseStatusUpdateParameter[UserProfileIdentifier],
281
+ ):
282
+ @overload
283
+ @classmethod
284
+ def new(
285
+ cls,
286
+ identifier_type: Literal[IdentifierType.ID, IdentifierType.USER_ID],
287
+ identifier_value: int,
288
+ type: ResourceOperationStatusUpdateType,
289
+ ) -> "StatusUpdateParameter": ...
290
+ @overload
291
+ @classmethod
292
+ def new(
293
+ cls,
294
+ identifier_type: Literal[IdentifierType.UUID],
295
+ identifier_value: UUID,
296
+ type: ResourceOperationStatusUpdateType,
297
+ ) -> "StatusUpdateParameter": ...
298
+ @overload
299
+ @classmethod
300
+ def new(
301
+ cls,
302
+ identifier_type: Literal[IdentifierType.ID_CARD],
303
+ identifier_value: str,
304
+ type: ResourceOperationStatusUpdateType,
305
+ ) -> "StatusUpdateParameter": ...
306
+ @overload
307
+ @classmethod
308
+ def new(
309
+ cls,
310
+ identifier_type: IdentifierType,
311
+ identifier_value: IdentifierValueType,
312
+ type: ResourceOperationStatusUpdateType,
313
+ ) -> "StatusUpdateParameter": ...
314
+ @classmethod
315
+ def new(
316
+ cls,
317
+ identifier_type: IdentifierType,
318
+ identifier_value: IdentifierValueType,
319
+ type: ResourceOperationStatusUpdateType,
320
+ ) -> "StatusUpdateParameter":
321
+ return cls(
322
+ identifier=UserProfileIdentifier(
323
+ type=identifier_type, value=identifier_value
324
+ ),
325
+ type=type,
326
+ )
327
+
328
+
329
+ class DeleteSingleParameter(BaseDeleteSingleParameter[UserProfileIdentifier]):
330
+ @overload
331
+ @classmethod
332
+ def new(
333
+ cls,
334
+ identifier_type: Literal[IdentifierType.ID, IdentifierType.USER_ID],
335
+ identifier_value: int,
336
+ ) -> "DeleteSingleParameter": ...
337
+ @overload
338
+ @classmethod
339
+ def new(
340
+ cls, identifier_type: Literal[IdentifierType.UUID], identifier_value: UUID
341
+ ) -> "DeleteSingleParameter": ...
342
+ @overload
343
+ @classmethod
344
+ def new(
345
+ cls,
346
+ identifier_type: Literal[IdentifierType.ID_CARD],
347
+ identifier_value: str,
348
+ ) -> "DeleteSingleParameter": ...
349
+ @overload
350
+ @classmethod
351
+ def new(
352
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
353
+ ) -> "DeleteSingleParameter": ...
354
+ @classmethod
355
+ def new(
356
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
357
+ ) -> "DeleteSingleParameter":
358
+ return cls(
359
+ identifier=UserProfileIdentifier(
360
+ type=identifier_type, value=identifier_value
361
+ )
362
+ )
@@ -0,0 +1,339 @@
1
+ from pydantic import BaseModel, Field
2
+ from typing import Annotated, Generic, Literal, TypeVar, overload
3
+ from uuid import UUID
4
+ from maleo.enums.system import (
5
+ SystemRole,
6
+ OptSystemRole,
7
+ FullSystemRoleMixin,
8
+ OptListOfSystemRoles,
9
+ FullSystemRolesMixin,
10
+ )
11
+ from maleo.enums.status import (
12
+ ListOfDataStatuses,
13
+ FULL_DATA_STATUSES,
14
+ )
15
+ from maleo.schemas.mixins.filter import convert as convert_filter
16
+ from maleo.schemas.mixins.identity import (
17
+ IdentifierMixin,
18
+ Ids,
19
+ UUIDs,
20
+ IntUserId,
21
+ IntUserIds,
22
+ )
23
+ from maleo.schemas.mixins.sort import convert as convert_sort
24
+ from maleo.schemas.operation.enums import ResourceOperationStatusUpdateType
25
+ from maleo.schemas.parameter import (
26
+ ReadSingleParameter as BaseReadSingleParameter,
27
+ ReadPaginatedMultipleParameter,
28
+ StatusUpdateParameter as BaseStatusUpdateParameter,
29
+ DeleteSingleParameter as BaseDeleteSingleParameter,
30
+ )
31
+ from maleo.types.dict import StrToAnyDict
32
+ from maleo.types.integer import OptInt, OptListOfInts
33
+ from maleo.types.uuid import OptListOfUUIDs
34
+ from ..enums.user_system_role import IdentifierType, OptListOfExpandableFields
35
+ from ..mixins.user_system_role import Expand, UserSystemRoleIdentifier
36
+ from ..types.user_system_role import CompositeIdentifierType, IdentifierValueType
37
+
38
+
39
+ class StandardCreateData(FullSystemRoleMixin[SystemRole]):
40
+ pass
41
+
42
+
43
+ class FullCreateData(
44
+ StandardCreateData,
45
+ IntUserId[int],
46
+ ):
47
+ pass
48
+
49
+
50
+ class CreateParameter(Expand, FullCreateData):
51
+ pass
52
+
53
+
54
+ class ReadMultipleParameter(
55
+ Expand,
56
+ ReadPaginatedMultipleParameter,
57
+ FullSystemRolesMixin[OptListOfSystemRoles],
58
+ IntUserIds[OptListOfInts],
59
+ UUIDs[OptListOfUUIDs],
60
+ Ids[OptListOfInts],
61
+ ):
62
+ ids: Annotated[OptListOfInts, Field(None, description="Ids")] = None
63
+ uuids: Annotated[OptListOfUUIDs, Field(None, description="UUIDs")] = None
64
+ user_ids: Annotated[OptListOfInts, Field(None, description="User's IDs")] = None
65
+ system_roles: Annotated[
66
+ OptListOfSystemRoles, Field(None, description="System Roles")
67
+ ] = None
68
+
69
+ @property
70
+ def _query_param_fields(self) -> set[str]:
71
+ return {
72
+ "ids",
73
+ "uuids",
74
+ "statuses",
75
+ "user_ids",
76
+ "system_roles",
77
+ "search",
78
+ "page",
79
+ "limit",
80
+ "use_cache",
81
+ "expand",
82
+ }
83
+
84
+ def to_query_params(self) -> StrToAnyDict:
85
+ params = self.model_dump(
86
+ mode="json", include=self._query_param_fields, exclude_none=True
87
+ )
88
+ params["filters"] = convert_filter(self.date_filters)
89
+ params["sorts"] = convert_sort(self.sort_columns)
90
+ params = {k: v for k, v in params.items()}
91
+ return params
92
+
93
+
94
+ class ReadSingleParameter(Expand, BaseReadSingleParameter[UserSystemRoleIdentifier]):
95
+ @classmethod
96
+ def from_identifier(
97
+ cls,
98
+ identifier: UserSystemRoleIdentifier,
99
+ statuses: ListOfDataStatuses = FULL_DATA_STATUSES,
100
+ use_cache: bool = True,
101
+ expand: OptListOfExpandableFields = None,
102
+ ) -> "ReadSingleParameter":
103
+ return cls(
104
+ identifier=identifier, statuses=statuses, use_cache=use_cache, expand=expand
105
+ )
106
+
107
+ @overload
108
+ @classmethod
109
+ def new(
110
+ cls,
111
+ identifier_type: Literal[IdentifierType.ID],
112
+ identifier_value: int,
113
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
114
+ use_cache: bool = True,
115
+ expand: OptListOfExpandableFields = None,
116
+ ) -> "ReadSingleParameter": ...
117
+ @overload
118
+ @classmethod
119
+ def new(
120
+ cls,
121
+ identifier_type: Literal[IdentifierType.UUID],
122
+ identifier_value: UUID,
123
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
124
+ use_cache: bool = True,
125
+ expand: OptListOfExpandableFields = None,
126
+ ) -> "ReadSingleParameter": ...
127
+ @overload
128
+ @classmethod
129
+ def new(
130
+ cls,
131
+ identifier_type: Literal[IdentifierType.COMPOSITE],
132
+ identifier_value: CompositeIdentifierType,
133
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
134
+ use_cache: bool = True,
135
+ expand: OptListOfExpandableFields = None,
136
+ ) -> "ReadSingleParameter": ...
137
+ @overload
138
+ @classmethod
139
+ def new(
140
+ cls,
141
+ identifier_type: IdentifierType,
142
+ identifier_value: IdentifierValueType,
143
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
144
+ use_cache: bool = True,
145
+ expand: OptListOfExpandableFields = None,
146
+ ) -> "ReadSingleParameter": ...
147
+ @classmethod
148
+ def new(
149
+ cls,
150
+ identifier_type: IdentifierType,
151
+ identifier_value: IdentifierValueType,
152
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
153
+ use_cache: bool = True,
154
+ expand: OptListOfExpandableFields = None,
155
+ ) -> "ReadSingleParameter":
156
+ return cls(
157
+ identifier=UserSystemRoleIdentifier(
158
+ type=identifier_type, value=identifier_value
159
+ ),
160
+ statuses=statuses,
161
+ use_cache=use_cache,
162
+ expand=expand,
163
+ )
164
+
165
+ def to_query_params(self) -> StrToAnyDict:
166
+ return self.model_dump(
167
+ mode="json", include={"statuses", "use_cache", "expand"}, exclude_none=True
168
+ )
169
+
170
+
171
+ class FullUpdateData(
172
+ FullSystemRoleMixin[SystemRole],
173
+ IntUserId[int],
174
+ ):
175
+ pass
176
+
177
+
178
+ class PartialUpdateData(
179
+ FullSystemRoleMixin[OptSystemRole],
180
+ IntUserId[OptInt],
181
+ ):
182
+ pass
183
+
184
+
185
+ UpdateDataT = TypeVar("UpdateDataT", FullUpdateData, PartialUpdateData)
186
+
187
+
188
+ class UpdateDataMixin(BaseModel, Generic[UpdateDataT]):
189
+ data: UpdateDataT = Field(..., description="Update data")
190
+
191
+
192
+ class UpdateParameter(
193
+ Expand,
194
+ UpdateDataMixin[UpdateDataT],
195
+ IdentifierMixin[UserSystemRoleIdentifier],
196
+ Generic[UpdateDataT],
197
+ ):
198
+ @overload
199
+ @classmethod
200
+ def new(
201
+ cls,
202
+ identifier_type: Literal[IdentifierType.ID],
203
+ identifier_value: int,
204
+ data: UpdateDataT,
205
+ expand: OptListOfExpandableFields = None,
206
+ ) -> "UpdateParameter": ...
207
+ @overload
208
+ @classmethod
209
+ def new(
210
+ cls,
211
+ identifier_type: Literal[IdentifierType.UUID],
212
+ identifier_value: UUID,
213
+ data: UpdateDataT,
214
+ expand: OptListOfExpandableFields = None,
215
+ ) -> "UpdateParameter": ...
216
+ @overload
217
+ @classmethod
218
+ def new(
219
+ cls,
220
+ identifier_type: Literal[IdentifierType.COMPOSITE],
221
+ identifier_value: CompositeIdentifierType,
222
+ data: UpdateDataT,
223
+ expand: OptListOfExpandableFields = None,
224
+ ) -> "UpdateParameter": ...
225
+ @overload
226
+ @classmethod
227
+ def new(
228
+ cls,
229
+ identifier_type: IdentifierType,
230
+ identifier_value: IdentifierValueType,
231
+ data: UpdateDataT,
232
+ expand: OptListOfExpandableFields = None,
233
+ ) -> "UpdateParameter": ...
234
+ @classmethod
235
+ def new(
236
+ cls,
237
+ identifier_type: IdentifierType,
238
+ identifier_value: IdentifierValueType,
239
+ data: UpdateDataT,
240
+ expand: OptListOfExpandableFields = None,
241
+ ) -> "UpdateParameter":
242
+ return cls(
243
+ identifier=UserSystemRoleIdentifier(
244
+ type=identifier_type, value=identifier_value
245
+ ),
246
+ data=data,
247
+ expand=expand,
248
+ )
249
+
250
+
251
+ class StatusUpdateParameter(
252
+ Expand,
253
+ BaseStatusUpdateParameter[UserSystemRoleIdentifier],
254
+ ):
255
+ @overload
256
+ @classmethod
257
+ def new(
258
+ cls,
259
+ identifier_type: Literal[IdentifierType.ID],
260
+ identifier_value: int,
261
+ type: ResourceOperationStatusUpdateType,
262
+ expand: OptListOfExpandableFields = None,
263
+ ) -> "StatusUpdateParameter": ...
264
+ @overload
265
+ @classmethod
266
+ def new(
267
+ cls,
268
+ identifier_type: Literal[IdentifierType.UUID],
269
+ identifier_value: UUID,
270
+ type: ResourceOperationStatusUpdateType,
271
+ expand: OptListOfExpandableFields = None,
272
+ ) -> "StatusUpdateParameter": ...
273
+ @overload
274
+ @classmethod
275
+ def new(
276
+ cls,
277
+ identifier_type: Literal[IdentifierType.COMPOSITE],
278
+ identifier_value: CompositeIdentifierType,
279
+ type: ResourceOperationStatusUpdateType,
280
+ expand: OptListOfExpandableFields = None,
281
+ ) -> "StatusUpdateParameter": ...
282
+ @overload
283
+ @classmethod
284
+ def new(
285
+ cls,
286
+ identifier_type: IdentifierType,
287
+ identifier_value: IdentifierValueType,
288
+ type: ResourceOperationStatusUpdateType,
289
+ expand: OptListOfExpandableFields = None,
290
+ ) -> "StatusUpdateParameter": ...
291
+ @classmethod
292
+ def new(
293
+ cls,
294
+ identifier_type: IdentifierType,
295
+ identifier_value: IdentifierValueType,
296
+ type: ResourceOperationStatusUpdateType,
297
+ expand: OptListOfExpandableFields = None,
298
+ ) -> "StatusUpdateParameter":
299
+ return cls(
300
+ identifier=UserSystemRoleIdentifier(
301
+ type=identifier_type, value=identifier_value
302
+ ),
303
+ type=type,
304
+ expand=expand,
305
+ )
306
+
307
+
308
+ class DeleteSingleParameter(BaseDeleteSingleParameter[UserSystemRoleIdentifier]):
309
+ @overload
310
+ @classmethod
311
+ def new(
312
+ cls, identifier_type: Literal[IdentifierType.ID], identifier_value: int
313
+ ) -> "DeleteSingleParameter": ...
314
+ @overload
315
+ @classmethod
316
+ def new(
317
+ cls, identifier_type: Literal[IdentifierType.UUID], identifier_value: UUID
318
+ ) -> "DeleteSingleParameter": ...
319
+ @overload
320
+ @classmethod
321
+ def new(
322
+ cls,
323
+ identifier_type: Literal[IdentifierType.COMPOSITE],
324
+ identifier_value: CompositeIdentifierType,
325
+ ) -> "DeleteSingleParameter": ...
326
+ @overload
327
+ @classmethod
328
+ def new(
329
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
330
+ ) -> "DeleteSingleParameter": ...
331
+ @classmethod
332
+ def new(
333
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
334
+ ) -> "DeleteSingleParameter":
335
+ return cls(
336
+ identifier=UserSystemRoleIdentifier(
337
+ type=identifier_type, value=identifier_value
338
+ )
339
+ )
@@ -0,0 +1,7 @@
1
+ from typing import Tuple
2
+ from uuid import UUID
3
+ from maleo.types.integer import OptInt
4
+
5
+
6
+ CompositeIdentifierType = Tuple[int, OptInt]
7
+ IdentifierValueType = int | UUID | str | CompositeIdentifierType
@@ -0,0 +1,4 @@
1
+ from uuid import UUID
2
+
3
+
4
+ IdentifierValueType = int | UUID | str
@@ -0,0 +1,4 @@
1
+ from uuid import UUID
2
+
3
+
4
+ IdentifierValueType = int | UUID | str