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,316 @@
1
+ from pydantic import BaseModel, Field
2
+ from typing import Annotated, Generic, Literal, TypeVar, overload
3
+ from uuid import UUID
4
+ from maleo.enums.medical import (
5
+ MedicalRole,
6
+ OptMedicalRole,
7
+ FullMedicalRoleMixin,
8
+ OptListOfMedicalRoles,
9
+ FullMedicalRolesMixin,
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
+ IntOrganizationId,
23
+ IntOrganizationIds,
24
+ )
25
+ from maleo.schemas.mixins.sort import convert as convert_sort
26
+ from maleo.schemas.operation.enums import ResourceOperationStatusUpdateType
27
+ from maleo.schemas.parameter import (
28
+ ReadSingleParameter as BaseReadSingleParameter,
29
+ ReadPaginatedMultipleParameter,
30
+ StatusUpdateParameter as BaseStatusUpdateParameter,
31
+ DeleteSingleParameter as BaseDeleteSingleParameter,
32
+ )
33
+ from maleo.types.dict import StrToAnyDict
34
+ from maleo.types.integer import OptInt, OptListOfInts
35
+ from maleo.types.uuid import OptListOfUUIDs
36
+ from ..enums.user_medical_role import IdentifierType
37
+ from ..mixins.user_medical_role import UserMedicalRoleIdentifier
38
+ from ..types.user_medical_role import CompositeIdentifierType, IdentifierValueType
39
+
40
+
41
+ class CreateParameter(
42
+ FullMedicalRoleMixin[MedicalRole],
43
+ IntOrganizationId[int],
44
+ IntUserId[int],
45
+ ):
46
+ pass
47
+
48
+
49
+ class ReadMultipleParameter(
50
+ ReadPaginatedMultipleParameter,
51
+ FullMedicalRolesMixin[OptListOfMedicalRoles],
52
+ IntOrganizationIds[OptListOfInts],
53
+ IntUserIds[OptListOfInts],
54
+ UUIDs[OptListOfUUIDs],
55
+ Ids[OptListOfInts],
56
+ ):
57
+ ids: Annotated[OptListOfInts, Field(None, description="Ids")] = None
58
+ uuids: Annotated[OptListOfUUIDs, Field(None, description="UUIDs")] = None
59
+ user_ids: Annotated[OptListOfInts, Field(None, description="User's IDs")] = None
60
+ organization_ids: Annotated[
61
+ OptListOfInts, Field(None, description="Organization's IDs")
62
+ ] = None
63
+ medical_roles: Annotated[
64
+ OptListOfMedicalRoles, Field(None, description="Medical Roles")
65
+ ] = None
66
+
67
+ @property
68
+ def _query_param_fields(self) -> set[str]:
69
+ return {
70
+ "ids",
71
+ "uuids",
72
+ "statuses",
73
+ "user_ids",
74
+ "organization_ids",
75
+ "medical_roles",
76
+ "search",
77
+ "page",
78
+ "limit",
79
+ "use_cache",
80
+ }
81
+
82
+ def to_query_params(self) -> StrToAnyDict:
83
+ params = self.model_dump(
84
+ mode="json", include=self._query_param_fields, exclude_none=True
85
+ )
86
+ params["filters"] = convert_filter(self.date_filters)
87
+ params["sorts"] = convert_sort(self.sort_columns)
88
+ params = {k: v for k, v in params.items()}
89
+ return params
90
+
91
+
92
+ class ReadSingleParameter(BaseReadSingleParameter[UserMedicalRoleIdentifier]):
93
+ @classmethod
94
+ def from_identifier(
95
+ cls,
96
+ identifier: UserMedicalRoleIdentifier,
97
+ statuses: ListOfDataStatuses = FULL_DATA_STATUSES,
98
+ use_cache: bool = True,
99
+ ) -> "ReadSingleParameter":
100
+ return cls(identifier=identifier, statuses=statuses, use_cache=use_cache)
101
+
102
+ @overload
103
+ @classmethod
104
+ def new(
105
+ cls,
106
+ identifier_type: Literal[IdentifierType.ID],
107
+ identifier_value: int,
108
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
109
+ use_cache: bool = True,
110
+ ) -> "ReadSingleParameter": ...
111
+ @overload
112
+ @classmethod
113
+ def new(
114
+ cls,
115
+ identifier_type: Literal[IdentifierType.UUID],
116
+ identifier_value: UUID,
117
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
118
+ use_cache: bool = True,
119
+ ) -> "ReadSingleParameter": ...
120
+ @overload
121
+ @classmethod
122
+ def new(
123
+ cls,
124
+ identifier_type: Literal[IdentifierType.COMPOSITE],
125
+ identifier_value: CompositeIdentifierType,
126
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
127
+ use_cache: bool = True,
128
+ ) -> "ReadSingleParameter": ...
129
+ @overload
130
+ @classmethod
131
+ def new(
132
+ cls,
133
+ identifier_type: IdentifierType,
134
+ identifier_value: IdentifierValueType,
135
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
136
+ use_cache: bool = True,
137
+ ) -> "ReadSingleParameter": ...
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
+ ) -> "ReadSingleParameter":
146
+ return cls(
147
+ identifier=UserMedicalRoleIdentifier(
148
+ type=identifier_type, value=identifier_value
149
+ ),
150
+ statuses=statuses,
151
+ use_cache=use_cache,
152
+ )
153
+
154
+ def to_query_params(self) -> StrToAnyDict:
155
+ return self.model_dump(
156
+ mode="json", include={"statuses", "use_cache"}, exclude_none=True
157
+ )
158
+
159
+
160
+ class FullUpdateData(
161
+ FullMedicalRoleMixin[MedicalRole],
162
+ IntOrganizationId[int],
163
+ IntUserId[int],
164
+ ):
165
+ pass
166
+
167
+
168
+ class PartialUpdateData(
169
+ FullMedicalRoleMixin[OptMedicalRole],
170
+ IntOrganizationId[OptInt],
171
+ IntUserId[OptInt],
172
+ ):
173
+ pass
174
+
175
+
176
+ UpdateDataT = TypeVar("UpdateDataT", FullUpdateData, PartialUpdateData)
177
+
178
+
179
+ class UpdateDataMixin(BaseModel, Generic[UpdateDataT]):
180
+ data: UpdateDataT = Field(..., description="Update data")
181
+
182
+
183
+ class UpdateParameter(
184
+ UpdateDataMixin[UpdateDataT],
185
+ IdentifierMixin[UserMedicalRoleIdentifier],
186
+ Generic[UpdateDataT],
187
+ ):
188
+ @overload
189
+ @classmethod
190
+ def new(
191
+ cls,
192
+ identifier_type: Literal[IdentifierType.ID],
193
+ identifier_value: int,
194
+ data: UpdateDataT,
195
+ ) -> "UpdateParameter": ...
196
+ @overload
197
+ @classmethod
198
+ def new(
199
+ cls,
200
+ identifier_type: Literal[IdentifierType.UUID],
201
+ identifier_value: UUID,
202
+ data: UpdateDataT,
203
+ ) -> "UpdateParameter": ...
204
+ @overload
205
+ @classmethod
206
+ def new(
207
+ cls,
208
+ identifier_type: Literal[IdentifierType.COMPOSITE],
209
+ identifier_value: CompositeIdentifierType,
210
+ data: UpdateDataT,
211
+ ) -> "UpdateParameter": ...
212
+ @overload
213
+ @classmethod
214
+ def new(
215
+ cls,
216
+ identifier_type: IdentifierType,
217
+ identifier_value: IdentifierValueType,
218
+ data: UpdateDataT,
219
+ ) -> "UpdateParameter": ...
220
+ @classmethod
221
+ def new(
222
+ cls,
223
+ identifier_type: IdentifierType,
224
+ identifier_value: IdentifierValueType,
225
+ data: UpdateDataT,
226
+ ) -> "UpdateParameter":
227
+ return cls(
228
+ identifier=UserMedicalRoleIdentifier(
229
+ type=identifier_type, value=identifier_value
230
+ ),
231
+ data=data,
232
+ )
233
+
234
+
235
+ class StatusUpdateParameter(
236
+ BaseStatusUpdateParameter[UserMedicalRoleIdentifier],
237
+ ):
238
+ @overload
239
+ @classmethod
240
+ def new(
241
+ cls,
242
+ identifier_type: Literal[IdentifierType.ID],
243
+ identifier_value: int,
244
+ type: ResourceOperationStatusUpdateType,
245
+ ) -> "StatusUpdateParameter": ...
246
+ @overload
247
+ @classmethod
248
+ def new(
249
+ cls,
250
+ identifier_type: Literal[IdentifierType.UUID],
251
+ identifier_value: UUID,
252
+ type: ResourceOperationStatusUpdateType,
253
+ ) -> "StatusUpdateParameter": ...
254
+ @overload
255
+ @classmethod
256
+ def new(
257
+ cls,
258
+ identifier_type: Literal[IdentifierType.COMPOSITE],
259
+ identifier_value: CompositeIdentifierType,
260
+ type: ResourceOperationStatusUpdateType,
261
+ ) -> "StatusUpdateParameter": ...
262
+ @overload
263
+ @classmethod
264
+ def new(
265
+ cls,
266
+ identifier_type: IdentifierType,
267
+ identifier_value: IdentifierValueType,
268
+ type: ResourceOperationStatusUpdateType,
269
+ ) -> "StatusUpdateParameter": ...
270
+ @classmethod
271
+ def new(
272
+ cls,
273
+ identifier_type: IdentifierType,
274
+ identifier_value: IdentifierValueType,
275
+ type: ResourceOperationStatusUpdateType,
276
+ ) -> "StatusUpdateParameter":
277
+ return cls(
278
+ identifier=UserMedicalRoleIdentifier(
279
+ type=identifier_type, value=identifier_value
280
+ ),
281
+ type=type,
282
+ )
283
+
284
+
285
+ class DeleteSingleParameter(BaseDeleteSingleParameter[UserMedicalRoleIdentifier]):
286
+ @overload
287
+ @classmethod
288
+ def new(
289
+ cls, identifier_type: Literal[IdentifierType.ID], identifier_value: int
290
+ ) -> "DeleteSingleParameter": ...
291
+ @overload
292
+ @classmethod
293
+ def new(
294
+ cls, identifier_type: Literal[IdentifierType.UUID], identifier_value: UUID
295
+ ) -> "DeleteSingleParameter": ...
296
+ @overload
297
+ @classmethod
298
+ def new(
299
+ cls,
300
+ identifier_type: Literal[IdentifierType.COMPOSITE],
301
+ identifier_value: CompositeIdentifierType,
302
+ ) -> "DeleteSingleParameter": ...
303
+ @overload
304
+ @classmethod
305
+ def new(
306
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
307
+ ) -> "DeleteSingleParameter": ...
308
+ @classmethod
309
+ def new(
310
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
311
+ ) -> "DeleteSingleParameter":
312
+ return cls(
313
+ identifier=UserMedicalRoleIdentifier(
314
+ type=identifier_type, value=identifier_value
315
+ )
316
+ )
@@ -0,0 +1,317 @@
1
+ from pydantic import BaseModel, Field
2
+ from typing import Annotated, Generic, Literal, TypeVar, overload
3
+ from uuid import UUID
4
+ from maleo.enums.organization import (
5
+ OrganizationRole,
6
+ OptOrganizationRole,
7
+ FullOrganizationRoleMixin,
8
+ OptListOfOrganizationRoles,
9
+ FullOrganizationRolesMixin,
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
+ IntOrganizationId,
23
+ IntOrganizationIds,
24
+ )
25
+ from maleo.schemas.mixins.sort import convert as convert_sort
26
+ from maleo.schemas.operation.enums import ResourceOperationStatusUpdateType
27
+ from maleo.schemas.parameter import (
28
+ ReadSingleParameter as BaseReadSingleParameter,
29
+ ReadPaginatedMultipleParameter,
30
+ StatusUpdateParameter as BaseStatusUpdateParameter,
31
+ DeleteSingleParameter as BaseDeleteSingleParameter,
32
+ )
33
+ from maleo.types.dict import StrToAnyDict
34
+ from maleo.types.integer import OptInt, OptListOfInts
35
+ from maleo.types.uuid import OptListOfUUIDs
36
+ from ..enums.user_organization_role import IdentifierType
37
+ from ..mixins.user_organization_role import UserOrganizationRoleIdentifier
38
+ from ..types.user_organization_role import CompositeIdentifierType, IdentifierValueType
39
+
40
+
41
+ class CreateParameter(
42
+ FullOrganizationRoleMixin[OrganizationRole],
43
+ IntOrganizationId[int],
44
+ IntUserId[int],
45
+ ):
46
+ pass
47
+
48
+
49
+ class ReadMultipleParameter(
50
+ ReadPaginatedMultipleParameter,
51
+ FullOrganizationRolesMixin[OptListOfOrganizationRoles],
52
+ IntOrganizationIds[OptListOfInts],
53
+ IntUserIds[OptListOfInts],
54
+ UUIDs[OptListOfUUIDs],
55
+ Ids[OptListOfInts],
56
+ ):
57
+ ids: Annotated[OptListOfInts, Field(None, description="Ids")] = None
58
+ uuids: Annotated[OptListOfUUIDs, Field(None, description="UUIDs")] = None
59
+ user_ids: Annotated[OptListOfInts, Field(None, description="User's IDs")] = None
60
+ organization_ids: Annotated[
61
+ OptListOfInts, Field(None, description="Organization's IDs")
62
+ ] = None
63
+ organization_roles: Annotated[
64
+ OptListOfOrganizationRoles, Field(None, description="Organization Roles")
65
+ ] = None
66
+
67
+ @property
68
+ def _query_param_fields(self) -> set[str]:
69
+ return {
70
+ "ids",
71
+ "uuids",
72
+ "statuses",
73
+ "user_ids",
74
+ "organization_ids",
75
+ "organization_roles",
76
+ "search",
77
+ "page",
78
+ "limit",
79
+ "use_cache",
80
+ }
81
+
82
+ def to_query_params(self) -> StrToAnyDict:
83
+ params = self.model_dump(
84
+ mode="json", include=self._query_param_fields, exclude_none=True
85
+ )
86
+ params["filters"] = convert_filter(self.date_filters)
87
+ params["sorts"] = convert_sort(self.sort_columns)
88
+ params = {k: v for k, v in params.items()}
89
+ return params
90
+
91
+
92
+ class ReadSingleParameter(BaseReadSingleParameter[UserOrganizationRoleIdentifier]):
93
+ @classmethod
94
+ def from_identifier(
95
+ cls,
96
+ identifier: UserOrganizationRoleIdentifier,
97
+ statuses: ListOfDataStatuses = FULL_DATA_STATUSES,
98
+ use_cache: bool = True,
99
+ ) -> "ReadSingleParameter":
100
+ return cls(identifier=identifier, statuses=statuses, use_cache=use_cache)
101
+
102
+ @overload
103
+ @classmethod
104
+ def new(
105
+ cls,
106
+ identifier_type: Literal[IdentifierType.ID],
107
+ identifier_value: int,
108
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
109
+ use_cache: bool = True,
110
+ ) -> "ReadSingleParameter": ...
111
+ @overload
112
+ @classmethod
113
+ def new(
114
+ cls,
115
+ identifier_type: Literal[IdentifierType.UUID],
116
+ identifier_value: UUID,
117
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
118
+ use_cache: bool = True,
119
+ ) -> "ReadSingleParameter": ...
120
+ @overload
121
+ @classmethod
122
+ def new(
123
+ cls,
124
+ identifier_type: Literal[IdentifierType.COMPOSITE],
125
+ identifier_value: CompositeIdentifierType,
126
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
127
+ use_cache: bool = True,
128
+ ) -> "ReadSingleParameter": ...
129
+ @overload
130
+ @classmethod
131
+ def new(
132
+ cls,
133
+ identifier_type: IdentifierType,
134
+ identifier_value: IdentifierValueType,
135
+ statuses: ListOfDataStatuses = list(FULL_DATA_STATUSES),
136
+ use_cache: bool = True,
137
+ ) -> "ReadSingleParameter": ...
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
+ ) -> "ReadSingleParameter":
146
+ return cls(
147
+ identifier=UserOrganizationRoleIdentifier(
148
+ type=identifier_type,
149
+ value=identifier_value,
150
+ ),
151
+ statuses=statuses,
152
+ use_cache=use_cache,
153
+ )
154
+
155
+ def to_query_params(self) -> StrToAnyDict:
156
+ return self.model_dump(
157
+ mode="json", include={"statuses", "use_cache"}, exclude_none=True
158
+ )
159
+
160
+
161
+ class FullUpdateData(
162
+ FullOrganizationRoleMixin[OrganizationRole],
163
+ IntOrganizationId[int],
164
+ IntUserId[int],
165
+ ):
166
+ pass
167
+
168
+
169
+ class PartialUpdateData(
170
+ FullOrganizationRoleMixin[OptOrganizationRole],
171
+ IntOrganizationId[OptInt],
172
+ IntUserId[OptInt],
173
+ ):
174
+ pass
175
+
176
+
177
+ UpdateDataT = TypeVar("UpdateDataT", FullUpdateData, PartialUpdateData)
178
+
179
+
180
+ class UpdateDataMixin(BaseModel, Generic[UpdateDataT]):
181
+ data: UpdateDataT = Field(..., description="Update data")
182
+
183
+
184
+ class UpdateParameter(
185
+ UpdateDataMixin[UpdateDataT],
186
+ IdentifierMixin[UserOrganizationRoleIdentifier],
187
+ Generic[UpdateDataT],
188
+ ):
189
+ @overload
190
+ @classmethod
191
+ def new(
192
+ cls,
193
+ identifier_type: Literal[IdentifierType.ID],
194
+ identifier_value: int,
195
+ data: UpdateDataT,
196
+ ) -> "UpdateParameter": ...
197
+ @overload
198
+ @classmethod
199
+ def new(
200
+ cls,
201
+ identifier_type: Literal[IdentifierType.UUID],
202
+ identifier_value: UUID,
203
+ data: UpdateDataT,
204
+ ) -> "UpdateParameter": ...
205
+ @overload
206
+ @classmethod
207
+ def new(
208
+ cls,
209
+ identifier_type: Literal[IdentifierType.COMPOSITE],
210
+ identifier_value: CompositeIdentifierType,
211
+ data: UpdateDataT,
212
+ ) -> "UpdateParameter": ...
213
+ @overload
214
+ @classmethod
215
+ def new(
216
+ cls,
217
+ identifier_type: IdentifierType,
218
+ identifier_value: IdentifierValueType,
219
+ data: UpdateDataT,
220
+ ) -> "UpdateParameter": ...
221
+ @classmethod
222
+ def new(
223
+ cls,
224
+ identifier_type: IdentifierType,
225
+ identifier_value: IdentifierValueType,
226
+ data: UpdateDataT,
227
+ ) -> "UpdateParameter":
228
+ return cls(
229
+ identifier=UserOrganizationRoleIdentifier(
230
+ type=identifier_type, value=identifier_value
231
+ ),
232
+ data=data,
233
+ )
234
+
235
+
236
+ class StatusUpdateParameter(
237
+ BaseStatusUpdateParameter[UserOrganizationRoleIdentifier],
238
+ ):
239
+ @overload
240
+ @classmethod
241
+ def new(
242
+ cls,
243
+ identifier_type: Literal[IdentifierType.ID],
244
+ identifier_value: int,
245
+ type: ResourceOperationStatusUpdateType,
246
+ ) -> "StatusUpdateParameter": ...
247
+ @overload
248
+ @classmethod
249
+ def new(
250
+ cls,
251
+ identifier_type: Literal[IdentifierType.UUID],
252
+ identifier_value: UUID,
253
+ type: ResourceOperationStatusUpdateType,
254
+ ) -> "StatusUpdateParameter": ...
255
+ @overload
256
+ @classmethod
257
+ def new(
258
+ cls,
259
+ identifier_type: Literal[IdentifierType.COMPOSITE],
260
+ identifier_value: CompositeIdentifierType,
261
+ type: ResourceOperationStatusUpdateType,
262
+ ) -> "StatusUpdateParameter": ...
263
+ @overload
264
+ @classmethod
265
+ def new(
266
+ cls,
267
+ identifier_type: IdentifierType,
268
+ identifier_value: IdentifierValueType,
269
+ type: ResourceOperationStatusUpdateType,
270
+ ) -> "StatusUpdateParameter": ...
271
+ @classmethod
272
+ def new(
273
+ cls,
274
+ identifier_type: IdentifierType,
275
+ identifier_value: IdentifierValueType,
276
+ type: ResourceOperationStatusUpdateType,
277
+ ) -> "StatusUpdateParameter":
278
+ return cls(
279
+ identifier=UserOrganizationRoleIdentifier(
280
+ type=identifier_type, value=identifier_value
281
+ ),
282
+ type=type,
283
+ )
284
+
285
+
286
+ class DeleteSingleParameter(BaseDeleteSingleParameter[UserOrganizationRoleIdentifier]):
287
+ @overload
288
+ @classmethod
289
+ def new(
290
+ cls, identifier_type: Literal[IdentifierType.ID], identifier_value: int
291
+ ) -> "DeleteSingleParameter": ...
292
+ @overload
293
+ @classmethod
294
+ def new(
295
+ cls, identifier_type: Literal[IdentifierType.UUID], identifier_value: UUID
296
+ ) -> "DeleteSingleParameter": ...
297
+ @overload
298
+ @classmethod
299
+ def new(
300
+ cls,
301
+ identifier_type: Literal[IdentifierType.COMPOSITE],
302
+ identifier_value: CompositeIdentifierType,
303
+ ) -> "DeleteSingleParameter": ...
304
+ @overload
305
+ @classmethod
306
+ def new(
307
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
308
+ ) -> "DeleteSingleParameter": ...
309
+ @classmethod
310
+ def new(
311
+ cls, identifier_type: IdentifierType, identifier_value: IdentifierValueType
312
+ ) -> "DeleteSingleParameter":
313
+ return cls(
314
+ identifier=UserOrganizationRoleIdentifier(
315
+ type=identifier_type, value=identifier_value
316
+ )
317
+ )