5
5
# pylint: disable=unused-argument,no-self-use
6
6
7
7
from marshmallow import fields
8
- from marshmallow .decorators import post_load
8
+ from marshmallow .decorators import post_load , pre_dump
9
9
10
10
from azure .ai .ml ._schema .core .fields import NestedField , StringTransformedEnum
11
11
from azure .ai .ml ._schema .core .schema_meta import PatchedSchemaMeta
@@ -40,6 +40,12 @@ class IdentitySchema(metaclass=PatchedSchemaMeta):
40
40
keys = fields .Str (required = True ), values = NestedField (UserAssignedIdentitySchema , allow_none = True ), allow_none = True
41
41
)
42
42
43
+ @pre_dump
44
+ def predump (self , data , ** kwargs ):
45
+ if data and isinstance (data , IdentityConfiguration ):
46
+ data .user_assigned_identities = self .uai_list2dict (data .user_assigned_identities )
47
+ return data
48
+
43
49
@post_load
44
50
def make (self , data , ** kwargs ):
45
51
data ["user_assigned_identities" ] = self .uai_dict2list (data .pop ("user_assigned_identities" ))
@@ -55,3 +61,17 @@ def uai_dict2list(self, uai_dict):
55
61
p_id = meta .principal_id
56
62
res .append (ManagedIdentityConfiguration (resource_id = resource_id , client_id = c_id , principal_id = p_id ))
57
63
return res
64
+
65
+ def uai_list2dict (self , uai_list ):
66
+ res = {}
67
+ if uai_list and isinstance (uai_list , list ):
68
+ for uai in uai_list :
69
+ if not isinstance (uai , ManagedIdentityConfiguration ):
70
+ continue
71
+ meta = {}
72
+ if uai .client_id :
73
+ meta ["client_id" ] = uai .client_id
74
+ if uai .principal_id :
75
+ meta ["principal_id" ] = uai .principal_id
76
+ res [uai .resource_id ] = meta
77
+ return res if res else None
0 commit comments