maleo-metadata-client 0.0.6__py3-none-any.whl → 0.0.8__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.

Potentially problematic release.


This version of maleo-metadata-client might be problematic. Click here for more details.

@@ -0,0 +1,304 @@
1
+ import json
2
+ from copy import deepcopy
3
+ from datetime import datetime, timezone
4
+ from typing import Literal, Union, overload
5
+ from uuid import UUID
6
+ from maleo.database.enums import Connection
7
+ from maleo.database.utils import build_cache_key
8
+ from maleo.enums.cardinality import Cardinality
9
+ from maleo.enums.connection import Header
10
+ from maleo.logging.enums import Level
11
+ from maleo.managers.client.maleo.config import MaleoMetadataClientConfig
12
+ from maleo.managers.client.maleo import MaleoClientService
13
+ from maleo.metadata.constants.system_role import SYSTEM_ROLE_RESOURCE
14
+ from maleo.metadata.schemas.system_role import (
15
+ ReadMultipleParameter,
16
+ ReadSingleParameter,
17
+ StandardSystemRoleSchema,
18
+ FullSystemRoleSchema,
19
+ )
20
+ from maleo.metadata.enums.system_role import Granularity, IdentifierType
21
+ from maleo.metadata.utils.system_role import get_schema_model
22
+ from maleo.schemas.connection import ConnectionContext
23
+ from maleo.schemas.exception.factory import Factory as MaleoExceptionFactory
24
+ from maleo.schemas.operation.action.resource import ReadResourceOperationAction
25
+ from maleo.schemas.operation.enums import OperationType, Target
26
+ from maleo.schemas.operation.mixins import Timestamp
27
+ from maleo.schemas.operation.resource import (
28
+ ReadMultipleResourceOperation,
29
+ ReadSingleResourceOperation,
30
+ )
31
+ from maleo.schemas.pagination import StrictPagination
32
+ from maleo.schemas.response import (
33
+ MultipleDataResponse,
34
+ ReadMultipleDataResponse,
35
+ SingleDataResponse,
36
+ ReadSingleDataResponse,
37
+ )
38
+ from maleo.schemas.security.authorization import (
39
+ OptionalAnyAuthorization,
40
+ AnyAuthorization,
41
+ Factory as AuthorizationFactory,
42
+ )
43
+ from maleo.schemas.security.impersonation import OptionalImpersonation
44
+ from maleo.types.dict import OptionalStringToStringDict
45
+ from maleo.utils.merger import merge_dicts
46
+
47
+
48
+ class SystemRoleClientService(MaleoClientService[MaleoMetadataClientConfig]):
49
+ resource = SYSTEM_ROLE_RESOURCE
50
+
51
+ @overload
52
+ async def read(
53
+ self,
54
+ cardinality: Literal[Cardinality.MULTIPLE],
55
+ granularity: Literal[Granularity.STANDARD],
56
+ *,
57
+ operation_id: UUID,
58
+ resource_operation_action: ReadResourceOperationAction,
59
+ connection_context: ConnectionContext,
60
+ authorization: AnyAuthorization,
61
+ impersonation: OptionalImpersonation = None,
62
+ parameters: ReadMultipleParameter,
63
+ headers: OptionalStringToStringDict = None,
64
+ ) -> ReadMultipleDataResponse[StandardSystemRoleSchema, StrictPagination, None]: ...
65
+ @overload
66
+ async def read(
67
+ self,
68
+ cardinality: Literal[Cardinality.MULTIPLE],
69
+ granularity: Literal[Granularity.FULL],
70
+ *,
71
+ operation_id: UUID,
72
+ resource_operation_action: ReadResourceOperationAction,
73
+ connection_context: ConnectionContext,
74
+ authorization: AnyAuthorization,
75
+ impersonation: OptionalImpersonation = None,
76
+ parameters: ReadMultipleParameter,
77
+ headers: OptionalStringToStringDict = None,
78
+ ) -> ReadMultipleDataResponse[FullSystemRoleSchema, StrictPagination, None]: ...
79
+ @overload
80
+ async def read(
81
+ self,
82
+ cardinality: Literal[Cardinality.SINGLE],
83
+ granularity: Literal[Granularity.STANDARD],
84
+ *,
85
+ operation_id: UUID,
86
+ resource_operation_action: ReadResourceOperationAction,
87
+ connection_context: ConnectionContext,
88
+ authorization: AnyAuthorization,
89
+ impersonation: OptionalImpersonation = None,
90
+ parameters: ReadSingleParameter,
91
+ headers: OptionalStringToStringDict = None,
92
+ ) -> ReadSingleDataResponse[StandardSystemRoleSchema, None]: ...
93
+ @overload
94
+ async def read(
95
+ self,
96
+ cardinality: Literal[Cardinality.SINGLE],
97
+ granularity: Literal[Granularity.FULL],
98
+ *,
99
+ operation_id: UUID,
100
+ resource_operation_action: ReadResourceOperationAction,
101
+ connection_context: ConnectionContext,
102
+ authorization: AnyAuthorization,
103
+ impersonation: OptionalImpersonation = None,
104
+ parameters: ReadSingleParameter,
105
+ headers: OptionalStringToStringDict = None,
106
+ ) -> ReadSingleDataResponse[FullSystemRoleSchema, None]: ...
107
+ async def read(
108
+ self,
109
+ cardinality: Cardinality,
110
+ granularity: Granularity,
111
+ *,
112
+ operation_id: UUID,
113
+ resource_operation_action: ReadResourceOperationAction,
114
+ connection_context: ConnectionContext,
115
+ authorization: OptionalAnyAuthorization = None,
116
+ impersonation: OptionalImpersonation = None,
117
+ parameters: Union[ReadMultipleParameter, ReadSingleParameter],
118
+ headers: OptionalStringToStringDict = None,
119
+ ) -> Union[
120
+ ReadMultipleDataResponse[StandardSystemRoleSchema, StrictPagination, None],
121
+ ReadMultipleDataResponse[FullSystemRoleSchema, StrictPagination, None],
122
+ ReadSingleDataResponse[StandardSystemRoleSchema, None],
123
+ ReadSingleDataResponse[FullSystemRoleSchema, None],
124
+ ]:
125
+ redis_client = self._redis.manager.client.get(Connection.ASYNC)
126
+ data_model_cls = get_schema_model(granularity)
127
+
128
+ executed_at = datetime.now(tz=timezone.utc)
129
+
130
+ # Define arguments being used in this function
131
+ positional_arguments = [cardinality, granularity]
132
+ keyword_arguments = {
133
+ "authorization": (
134
+ authorization.model_dump(mode="json")
135
+ if authorization is not None
136
+ else None
137
+ ),
138
+ "parameters": parameters.model_dump(mode="json"),
139
+ }
140
+
141
+ # Define full function string
142
+ ext = f"({json.dumps(positional_arguments)}|{json.dumps(keyword_arguments)})"
143
+
144
+ # Define full cache_key
145
+ cache_key = build_cache_key(ext, namespace=self._namespace)
146
+
147
+ if parameters.use_cache:
148
+ # Initialize cache operation context
149
+ operation_context = deepcopy(self._operation_context)
150
+ operation_context.target.type = Target.CACHE
151
+
152
+ redis_response_str = await redis_client.get(cache_key)
153
+
154
+ if redis_response_str is not None:
155
+ operation_timestamp = Timestamp.completed_now(executed_at)
156
+ if cardinality is Cardinality.MULTIPLE:
157
+ response = ReadMultipleDataResponse[
158
+ data_model_cls, StrictPagination, None
159
+ ].model_validate_json(redis_response_str)
160
+ ReadMultipleResourceOperation[
161
+ data_model_cls, StrictPagination, None
162
+ ](
163
+ application_context=self._application_context,
164
+ id=operation_id,
165
+ context=operation_context,
166
+ action=resource_operation_action,
167
+ resource=self.resource,
168
+ timestamp=operation_timestamp,
169
+ summary=f"Successfully retrieved {cardinality} {granularity} system roles from cache",
170
+ connection_context=connection_context,
171
+ authentication=None,
172
+ authorization=authorization,
173
+ impersonation=impersonation,
174
+ response=response,
175
+ ).log(
176
+ self._logger, Level.INFO
177
+ )
178
+ elif cardinality is Cardinality.SINGLE:
179
+ response = ReadSingleDataResponse[
180
+ data_model_cls, None
181
+ ].model_validate_json(redis_response_str)
182
+ ReadSingleResourceOperation[data_model_cls, None](
183
+ application_context=self._application_context,
184
+ id=operation_id,
185
+ context=operation_context,
186
+ action=resource_operation_action,
187
+ resource=self.resource,
188
+ timestamp=operation_timestamp,
189
+ summary=f"Successfully retrieved {cardinality} {granularity} system role from cache",
190
+ connection_context=connection_context,
191
+ authentication=None,
192
+ authorization=authorization,
193
+ impersonation=impersonation,
194
+ response=response,
195
+ ).log(self._logger, Level.INFO)
196
+
197
+ return response # type: ignore
198
+
199
+ operation_context = deepcopy(self._operation_context)
200
+ operation_context.target.type = Target.MICROSERVICE
201
+
202
+ async with self._http_client_manager.get() as http_client:
203
+ base_headers = {
204
+ Header.CONTENT_TYPE.value: "application/json",
205
+ Header.X_OPERATION_ID.value: str(operation_id),
206
+ }
207
+ if impersonation is not None:
208
+ base_headers[Header.X_USER_ID.value] = str(impersonation.user_id)
209
+ if impersonation.organization_id is not None:
210
+ base_headers[Header.X_ORGANIZATION_ID.value] = str(
211
+ impersonation.organization_id
212
+ )
213
+
214
+ if headers is not None:
215
+ headers = merge_dicts(base_headers, headers)
216
+ else:
217
+ headers = base_headers
218
+
219
+ if authorization is not None:
220
+ auth = AuthorizationFactory.httpx_auth(
221
+ scheme=authorization.scheme, authorization=authorization.credentials
222
+ )
223
+ else:
224
+ auth = None
225
+
226
+ if isinstance(parameters, ReadMultipleParameter):
227
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/"
228
+ elif isinstance(parameters, ReadSingleParameter):
229
+ if parameters.identifier is IdentifierType.ID:
230
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/{parameters.value}"
231
+ else:
232
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/{parameters.identifier}/{parameters.value}"
233
+
234
+ params = parameters.to_query_params()
235
+
236
+ response = await http_client.get(
237
+ url, params=params, headers=headers, auth=auth
238
+ )
239
+
240
+ operation_timestamp = Timestamp.completed_now(executed_at)
241
+
242
+ if response.is_error:
243
+ raise MaleoExceptionFactory.from_httpx(
244
+ response,
245
+ operation_type=OperationType.REQUEST,
246
+ application_context=self._application_context,
247
+ operation_id=operation_id,
248
+ operation_context=operation_context,
249
+ operation_action=resource_operation_action,
250
+ operation_timestamp=operation_timestamp,
251
+ connection_context=connection_context,
252
+ authentication=None,
253
+ authorization=authorization,
254
+ impersonation=impersonation,
255
+ logger=self._logger,
256
+ )
257
+
258
+ if isinstance(parameters, ReadMultipleParameter):
259
+ validated_response = MultipleDataResponse[
260
+ data_model_cls, StrictPagination, None
261
+ ].model_validate(response.json())
262
+ service_response = ReadMultipleDataResponse[
263
+ data_model_cls, StrictPagination, None
264
+ ].new(
265
+ data=validated_response.data,
266
+ pagination=validated_response.pagination,
267
+ )
268
+ ReadMultipleResourceOperation[data_model_cls, StrictPagination, None](
269
+ application_context=self._application_context,
270
+ id=operation_id,
271
+ context=operation_context,
272
+ action=resource_operation_action,
273
+ resource=SYSTEM_ROLE_RESOURCE,
274
+ timestamp=operation_timestamp,
275
+ summary=f"Successfully retrieved multiple {granularity} system roles from microservice",
276
+ connection_context=connection_context,
277
+ authentication=None,
278
+ authorization=authorization,
279
+ impersonation=impersonation,
280
+ response=service_response,
281
+ ).log(self._logger, Level.INFO)
282
+ elif isinstance(parameters, ReadSingleParameter):
283
+ validated_response = SingleDataResponse[
284
+ data_model_cls, None
285
+ ].model_validate(response.json())
286
+ service_response = ReadSingleDataResponse[data_model_cls, None].new(
287
+ data=validated_response.data,
288
+ )
289
+ ReadSingleResourceOperation[data_model_cls, None](
290
+ application_context=self._application_context,
291
+ id=operation_id,
292
+ context=operation_context,
293
+ action=resource_operation_action,
294
+ resource=SYSTEM_ROLE_RESOURCE,
295
+ timestamp=operation_timestamp,
296
+ summary=f"Successfully retrieved single {granularity} system role from microservice",
297
+ connection_context=connection_context,
298
+ authentication=None,
299
+ authorization=authorization,
300
+ impersonation=impersonation,
301
+ response=service_response,
302
+ ).log(self._logger, Level.INFO)
303
+
304
+ return service_response # type: ignore
@@ -0,0 +1,302 @@
1
+ import json
2
+ from copy import deepcopy
3
+ from datetime import datetime, timezone
4
+ from typing import Literal, Union, overload
5
+ from uuid import UUID
6
+ from maleo.database.enums import Connection
7
+ from maleo.database.utils import build_cache_key
8
+ from maleo.enums.cardinality import Cardinality
9
+ from maleo.enums.connection import Header
10
+ from maleo.logging.enums import Level
11
+ from maleo.managers.client.maleo.config import MaleoMetadataClientConfig
12
+ from maleo.managers.client.maleo import MaleoClientService
13
+ from maleo.metadata.constants.user_type import USER_TYPE_RESOURCE
14
+ from maleo.metadata.schemas.user_type import (
15
+ ReadMultipleParameter,
16
+ ReadSingleParameter,
17
+ StandardUserTypeSchema,
18
+ FullUserTypeSchema,
19
+ )
20
+ from maleo.metadata.enums.user_type import Granularity, IdentifierType
21
+ from maleo.metadata.utils.user_type import get_schema_model
22
+ from maleo.schemas.connection import ConnectionContext
23
+ from maleo.schemas.exception.factory import Factory as MaleoExceptionFactory
24
+ from maleo.schemas.operation.action.resource import ReadResourceOperationAction
25
+ from maleo.schemas.operation.enums import OperationType, Target
26
+ from maleo.schemas.operation.mixins import Timestamp
27
+ from maleo.schemas.operation.resource import (
28
+ ReadMultipleResourceOperation,
29
+ ReadSingleResourceOperation,
30
+ )
31
+ from maleo.schemas.pagination import StrictPagination
32
+ from maleo.schemas.response import (
33
+ MultipleDataResponse,
34
+ ReadMultipleDataResponse,
35
+ SingleDataResponse,
36
+ ReadSingleDataResponse,
37
+ )
38
+ from maleo.schemas.security.authorization import (
39
+ OptionalAnyAuthorization,
40
+ AnyAuthorization,
41
+ Factory as AuthorizationFactory,
42
+ )
43
+ from maleo.schemas.security.impersonation import OptionalImpersonation
44
+ from maleo.types.dict import OptionalStringToStringDict
45
+ from maleo.utils.merger import merge_dicts
46
+
47
+
48
+ class UserTypeClientService(MaleoClientService[MaleoMetadataClientConfig]):
49
+ resource = USER_TYPE_RESOURCE
50
+
51
+ @overload
52
+ async def read(
53
+ self,
54
+ cardinality: Literal[Cardinality.MULTIPLE],
55
+ granularity: Literal[Granularity.STANDARD],
56
+ *,
57
+ operation_id: UUID,
58
+ resource_operation_action: ReadResourceOperationAction,
59
+ connection_context: ConnectionContext,
60
+ authorization: AnyAuthorization,
61
+ impersonation: OptionalImpersonation = None,
62
+ parameters: ReadMultipleParameter,
63
+ headers: OptionalStringToStringDict = None,
64
+ ) -> ReadMultipleDataResponse[StandardUserTypeSchema, StrictPagination, None]: ...
65
+ @overload
66
+ async def read(
67
+ self,
68
+ cardinality: Literal[Cardinality.MULTIPLE],
69
+ granularity: Literal[Granularity.FULL],
70
+ *,
71
+ operation_id: UUID,
72
+ resource_operation_action: ReadResourceOperationAction,
73
+ connection_context: ConnectionContext,
74
+ authorization: AnyAuthorization,
75
+ impersonation: OptionalImpersonation = None,
76
+ parameters: ReadMultipleParameter,
77
+ headers: OptionalStringToStringDict = None,
78
+ ) -> ReadMultipleDataResponse[FullUserTypeSchema, StrictPagination, None]: ...
79
+ @overload
80
+ async def read(
81
+ self,
82
+ cardinality: Literal[Cardinality.SINGLE],
83
+ granularity: Literal[Granularity.STANDARD],
84
+ *,
85
+ operation_id: UUID,
86
+ resource_operation_action: ReadResourceOperationAction,
87
+ connection_context: ConnectionContext,
88
+ authorization: AnyAuthorization,
89
+ impersonation: OptionalImpersonation = None,
90
+ parameters: ReadSingleParameter,
91
+ headers: OptionalStringToStringDict = None,
92
+ ) -> ReadSingleDataResponse[StandardUserTypeSchema, None]: ...
93
+ @overload
94
+ async def read(
95
+ self,
96
+ cardinality: Literal[Cardinality.SINGLE],
97
+ granularity: Literal[Granularity.FULL],
98
+ *,
99
+ operation_id: UUID,
100
+ resource_operation_action: ReadResourceOperationAction,
101
+ connection_context: ConnectionContext,
102
+ authorization: AnyAuthorization,
103
+ impersonation: OptionalImpersonation = None,
104
+ parameters: ReadSingleParameter,
105
+ headers: OptionalStringToStringDict = None,
106
+ ) -> ReadSingleDataResponse[FullUserTypeSchema, None]: ...
107
+ async def read(
108
+ self,
109
+ cardinality: Cardinality,
110
+ granularity: Granularity,
111
+ *,
112
+ operation_id: UUID,
113
+ resource_operation_action: ReadResourceOperationAction,
114
+ connection_context: ConnectionContext,
115
+ authorization: OptionalAnyAuthorization = None,
116
+ impersonation: OptionalImpersonation = None,
117
+ parameters: Union[ReadMultipleParameter, ReadSingleParameter],
118
+ headers: OptionalStringToStringDict = None,
119
+ ) -> Union[
120
+ ReadMultipleDataResponse[StandardUserTypeSchema, StrictPagination, None],
121
+ ReadMultipleDataResponse[FullUserTypeSchema, StrictPagination, None],
122
+ ReadSingleDataResponse[StandardUserTypeSchema, None],
123
+ ReadSingleDataResponse[FullUserTypeSchema, None],
124
+ ]:
125
+ redis_client = self._redis.manager.client.get(Connection.ASYNC)
126
+ data_model_cls = get_schema_model(granularity)
127
+
128
+ executed_at = datetime.now(tz=timezone.utc)
129
+
130
+ # Define arguments being used in this function
131
+ positional_arguments = [cardinality, granularity]
132
+ keyword_arguments = {
133
+ "authorization": (
134
+ authorization.model_dump(mode="json")
135
+ if authorization is not None
136
+ else None
137
+ ),
138
+ "parameters": parameters.model_dump(mode="json"),
139
+ }
140
+
141
+ # Define full function string
142
+ ext = f"({json.dumps(positional_arguments)}|{json.dumps(keyword_arguments)})"
143
+
144
+ # Define full cache_key
145
+ cache_key = build_cache_key(ext, namespace=self._namespace)
146
+
147
+ if parameters.use_cache:
148
+ # Initialize cache operation context
149
+ operation_context = deepcopy(self._operation_context)
150
+ operation_context.target.type = Target.CACHE
151
+
152
+ redis_response_str = await redis_client.get(cache_key)
153
+
154
+ if redis_response_str is not None:
155
+ operation_timestamp = Timestamp.completed_now(executed_at)
156
+ if cardinality is Cardinality.MULTIPLE:
157
+ response = ReadMultipleDataResponse[
158
+ data_model_cls, StrictPagination, None
159
+ ].model_validate_json(redis_response_str)
160
+ ReadMultipleResourceOperation[
161
+ data_model_cls, StrictPagination, None
162
+ ](
163
+ application_context=self._application_context,
164
+ id=operation_id,
165
+ context=operation_context,
166
+ action=resource_operation_action,
167
+ resource=self.resource,
168
+ timestamp=operation_timestamp,
169
+ summary=f"Successfully retrieved {cardinality} {granularity} user types from cache",
170
+ connection_context=connection_context,
171
+ authentication=None,
172
+ authorization=authorization,
173
+ impersonation=impersonation,
174
+ response=response,
175
+ ).log(
176
+ self._logger, Level.INFO
177
+ )
178
+ elif cardinality is Cardinality.SINGLE:
179
+ response = ReadSingleDataResponse[
180
+ data_model_cls, None
181
+ ].model_validate_json(redis_response_str)
182
+ ReadSingleResourceOperation[data_model_cls, None](
183
+ application_context=self._application_context,
184
+ id=operation_id,
185
+ context=operation_context,
186
+ action=resource_operation_action,
187
+ resource=self.resource,
188
+ timestamp=operation_timestamp,
189
+ summary=f"Successfully retrieved {cardinality} {granularity} user type from cache",
190
+ connection_context=connection_context,
191
+ authentication=None,
192
+ authorization=authorization,
193
+ impersonation=impersonation,
194
+ response=response,
195
+ ).log(self._logger, Level.INFO)
196
+
197
+ return response # type: ignore
198
+
199
+ operation_context = deepcopy(self._operation_context)
200
+ operation_context.target.type = Target.MICROSERVICE
201
+
202
+ async with self._http_client_manager.get() as http_client:
203
+ base_headers = {
204
+ Header.CONTENT_TYPE.value: "application/json",
205
+ Header.X_OPERATION_ID.value: str(operation_id),
206
+ }
207
+ if impersonation is not None:
208
+ base_headers[Header.X_USER_ID.value] = str(impersonation.user_id)
209
+ if impersonation.user_id is not None:
210
+ base_headers[Header.X_USER_ID.value] = str(impersonation.user_id)
211
+
212
+ if headers is not None:
213
+ headers = merge_dicts(base_headers, headers)
214
+ else:
215
+ headers = base_headers
216
+
217
+ if authorization is not None:
218
+ auth = AuthorizationFactory.httpx_auth(
219
+ scheme=authorization.scheme, authorization=authorization.credentials
220
+ )
221
+ else:
222
+ auth = None
223
+
224
+ if isinstance(parameters, ReadMultipleParameter):
225
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/"
226
+ elif isinstance(parameters, ReadSingleParameter):
227
+ if parameters.identifier is IdentifierType.ID:
228
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/{parameters.value}"
229
+ else:
230
+ url = f"{self._config.url}/v1/{self.resource.identifiers[-1].slug}/{parameters.identifier}/{parameters.value}"
231
+
232
+ params = parameters.to_query_params()
233
+
234
+ response = await http_client.get(
235
+ url, params=params, headers=headers, auth=auth
236
+ )
237
+
238
+ operation_timestamp = Timestamp.completed_now(executed_at)
239
+
240
+ if response.is_error:
241
+ raise MaleoExceptionFactory.from_httpx(
242
+ response,
243
+ operation_type=OperationType.REQUEST,
244
+ application_context=self._application_context,
245
+ operation_id=operation_id,
246
+ operation_context=operation_context,
247
+ operation_action=resource_operation_action,
248
+ operation_timestamp=operation_timestamp,
249
+ connection_context=connection_context,
250
+ authentication=None,
251
+ authorization=authorization,
252
+ impersonation=impersonation,
253
+ logger=self._logger,
254
+ )
255
+
256
+ if isinstance(parameters, ReadMultipleParameter):
257
+ validated_response = MultipleDataResponse[
258
+ data_model_cls, StrictPagination, None
259
+ ].model_validate(response.json())
260
+ service_response = ReadMultipleDataResponse[
261
+ data_model_cls, StrictPagination, None
262
+ ].new(
263
+ data=validated_response.data,
264
+ pagination=validated_response.pagination,
265
+ )
266
+ ReadMultipleResourceOperation[data_model_cls, StrictPagination, None](
267
+ application_context=self._application_context,
268
+ id=operation_id,
269
+ context=operation_context,
270
+ action=resource_operation_action,
271
+ resource=USER_TYPE_RESOURCE,
272
+ timestamp=operation_timestamp,
273
+ summary=f"Successfully retrieved multiple {granularity} user types from microservice",
274
+ connection_context=connection_context,
275
+ authentication=None,
276
+ authorization=authorization,
277
+ impersonation=impersonation,
278
+ response=service_response,
279
+ ).log(self._logger, Level.INFO)
280
+ elif isinstance(parameters, ReadSingleParameter):
281
+ validated_response = SingleDataResponse[
282
+ data_model_cls, None
283
+ ].model_validate(response.json())
284
+ service_response = ReadSingleDataResponse[data_model_cls, None].new(
285
+ data=validated_response.data,
286
+ )
287
+ ReadSingleResourceOperation[data_model_cls, None](
288
+ application_context=self._application_context,
289
+ id=operation_id,
290
+ context=operation_context,
291
+ action=resource_operation_action,
292
+ resource=USER_TYPE_RESOURCE,
293
+ timestamp=operation_timestamp,
294
+ summary=f"Successfully retrieved single {granularity} user type from microservice",
295
+ connection_context=connection_context,
296
+ authentication=None,
297
+ authorization=authorization,
298
+ impersonation=impersonation,
299
+ response=service_response,
300
+ ).log(self._logger, Level.INFO)
301
+
302
+ return service_response # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maleo-metadata-client
3
- Version: 0.0.6
3
+ Version: 0.0.8
4
4
  Summary: MaleoMetadata client package
5
5
  Author-email: Agra Bima Yuda <agra@nexmedis.com>
6
6
  License: MIT
@@ -51,15 +51,15 @@ Requires-Dist: idna>=3.10
51
51
  Requires-Dist: importlib_metadata>=8.7.0
52
52
  Requires-Dist: iniconfig>=2.1.0
53
53
  Requires-Dist: maleo-crypto>=0.0.28
54
- Requires-Dist: maleo-database>=0.1.40
54
+ Requires-Dist: maleo-database>=0.1.42
55
55
  Requires-Dist: maleo-enums>=0.0.28
56
- Requires-Dist: maleo-google>=0.0.100
57
- Requires-Dist: maleo-infra>=0.1.40
56
+ Requires-Dist: maleo-google>=0.1.12
57
+ Requires-Dist: maleo-infra>=0.1.42
58
58
  Requires-Dist: maleo-logging>=0.0.28
59
- Requires-Dist: maleo-managers>=0.0.80
60
- Requires-Dist: maleo-metadata>=0.3.30
61
- Requires-Dist: maleo-middlewares>=0.0.100
62
- Requires-Dist: maleo-schemas>=0.1.40
59
+ Requires-Dist: maleo-managers>=0.0.92
60
+ Requires-Dist: maleo-metadata>=0.3.32
61
+ Requires-Dist: maleo-middlewares>=0.1.12
62
+ Requires-Dist: maleo-schemas>=0.1.42
63
63
  Requires-Dist: maleo-types>=0.0.8
64
64
  Requires-Dist: maleo-utils>=0.0.28
65
65
  Requires-Dist: motor>=3.7.1
@@ -0,0 +1,16 @@
1
+ maleo/metadata/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ maleo/metadata/client/manager.py,sha256=tjrLp09sKOnEzcEK3_Iwk7HaU2D8BOLS868WJtSEvUE,3273
3
+ maleo/metadata/client/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ maleo/metadata/client/services/blood_type.py,sha256=CkLM9QGSAsT6c0VK2GIanpN2pADrG43yIFTQK_aKp78,13504
5
+ maleo/metadata/client/services/gender.py,sha256=MCPjfvRfeMZ79mucHok8Lbdzfe3LVgmXHJ_V4RFvSs4,13423
6
+ maleo/metadata/client/services/medical_role.py,sha256=PlrD8Iunue7HVW1E9nurdNh_63frpCc2KDKzxS4p2Ek,15493
7
+ maleo/metadata/client/services/medical_service.py,sha256=JpbImtoPrQdwRBXeRJSVeR_btbu7nBJWiREXvygTdPE,13633
8
+ maleo/metadata/client/services/organization_type.py,sha256=_XWzCWM-upXzo0E8VYqXEU18jvC8CHWrbF_BugihkxA,13715
9
+ maleo/metadata/client/services/service.py,sha256=ZU8oMgFEH8S4EM8fojfiWOzac_JHqCsbCv5Bv52DSyw,13446
10
+ maleo/metadata/client/services/system_role.py,sha256=gIlveNto5EExd0ppxHQc3RMndmrp6MQ7XjU3ANDbhkw,13527
11
+ maleo/metadata/client/services/user_type.py,sha256=DcQ5dWVQbhCaCTNKIXA_VxY3YiDJlvK1ORTu_zDZOz0,13411
12
+ maleo_metadata_client-0.0.8.dist-info/licenses/LICENSE,sha256=aftGsecnk7TWVX-7KW94FqK4Syy6YSZ8PZEF7EcIp3M,2621
13
+ maleo_metadata_client-0.0.8.dist-info/METADATA,sha256=3NrsvMbxkOpuXnoM5QCQ0ZwLt7MCEjYMjT6DN4Ok_TI,4305
14
+ maleo_metadata_client-0.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ maleo_metadata_client-0.0.8.dist-info/top_level.txt,sha256=3Tpd1siVsfYoeI9FEOJNYnffx_shzZ3wsPpTvz5bljc,6
16
+ maleo_metadata_client-0.0.8.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- maleo/metadata/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- maleo/metadata/client/manager.py,sha256=KAkjNC0ds8bCVB6KxB24iR0oDXywmjvFT7Ti-6wvy1s,623
3
- maleo/metadata/client/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- maleo/metadata/client/services/blood_type.py,sha256=aubNNMXIKth7ieKQV_K2gtscxDn92K6W7DGOUgQ6Ol8,14183
5
- maleo_metadata_client-0.0.6.dist-info/licenses/LICENSE,sha256=aftGsecnk7TWVX-7KW94FqK4Syy6YSZ8PZEF7EcIp3M,2621
6
- maleo_metadata_client-0.0.6.dist-info/METADATA,sha256=F6n33LtlfwoxCDcSMqTnE4ERO6NKNmA5BPU7ykdqn_U,4307
7
- maleo_metadata_client-0.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
- maleo_metadata_client-0.0.6.dist-info/top_level.txt,sha256=3Tpd1siVsfYoeI9FEOJNYnffx_shzZ3wsPpTvz5bljc,6
9
- maleo_metadata_client-0.0.6.dist-info/RECORD,,