22from splitapiclient .util .exceptions import HTTPResponseError , \
33 UnknownApiClientError
44from splitapiclient .util .logger import LOGGER
5+ from splitapiclient .util .helpers import as_dict
6+ from splitapiclient .util .bulk_result import BulkOperationResult
57
68
79class IdentityMicroClient :
@@ -86,22 +88,14 @@ def save(self, identity):
8688 :returns: newly created Identity
8789 :rtype: Identity
8890 '''
89- try :
90- data = identity .to_dict () if isinstance (identity , Identity ) else identity
91- response = self ._http_client .make_request (
92- self ._endpoint ['create' ],
93- data ,
94- key = data .get ('key' ),
95- trafficTypeId = data .get ('trafficTypeId' ),
96- environmentId = data .get ('environmentId' ),
97- )
98- except HTTPResponseError as e :
99- LOGGER .error ('Call to Split API failed. Identity not created.' )
100- raise e
101- except Exception as e :
102- LOGGER .debug (e )
103- raise UnknownApiClientError ()
104-
91+ data = as_dict (identity )
92+ response = self ._http_client .make_request (
93+ self ._endpoint ['create' ],
94+ data ,
95+ key = data .get ('key' ),
96+ trafficTypeId = data .get ('trafficTypeId' ),
97+ environmentId = data .get ('environmentId' ),
98+ )
10599 return Identity (response , self ._http_client )
106100
107101 def save_all (self , identities ):
@@ -116,42 +110,29 @@ def save_all(self, identities):
116110 for the failed item togegther with a status code and a message
117111 :rtype: tuple
118112 '''
119- # TODO: Validate!
120- try :
121- # convert Identity objects to dict if necessary
122- to_save = [
123- i .to_dict () if isinstance (i , Identity ) else i
124- for i in identities
125- ]
126- response = self ._http_client .make_request (
127- self ._endpoint ['create_many' ],
128- to_save ,
129- trafficTypeId = to_save [0 ]['trafficTypeId' ],
130- environmentId = to_save [0 ]['environmentId' ]
131- )
132-
133- successful = [
134- Identity (i , self ._http_client )
135- for i in response ['objects' ]
136- ]
137-
138- failed = [
139- {
140- 'object' : Identity (i ['object' ], self ._http_client ),
141- 'status' : i ['status' ],
142- 'message' : i ['message' ],
143- }
144- for i in response ['failed' ]
145- ]
146-
147- return successful , failed
148-
149- except HTTPResponseError as e :
150- LOGGER .error ('Call to Split API failed. Identities not created.' )
151- raise e
152- except Exception as e :
153- LOGGER .debug (e )
154- raise UnknownApiClientError ()
113+ to_save = [as_dict (i ) for i in identities ]
114+ response = self ._http_client .make_request (
115+ self ._endpoint ['create_many' ],
116+ to_save ,
117+ trafficTypeId = to_save [0 ].get ('trafficTypeId' ),
118+ environmentId = to_save [0 ].get ('environmentId' )
119+ )
120+
121+ successful = [
122+ Identity (i , self ._http_client )
123+ for i in response .get ('objects' , [])
124+ ]
125+
126+ failed = [
127+ {
128+ 'object' : Identity (i ['object' ], self ._http_client ),
129+ 'status' : i ['status' ],
130+ 'message' : i ['message' ],
131+ }
132+ for i in response .get ('failed' , [])
133+ ]
134+
135+ return BulkOperationResult (successful , failed , response .get ('metadata' ))
155136
156137 def update (self , identity ):
157138 '''
@@ -163,22 +144,14 @@ def update(self, identity):
163144 :returns: updated Identity
164145 :rtype: Identity
165146 '''
166- try :
167- data = identity .to_dict () if isinstance (identity , Identity ) else identity
168- response = self ._http_client .make_request (
169- self ._endpoint ['update' ],
170- data ,
171- key = data .get ('key' ),
172- trafficTypeId = data .get ('trafficTypeId' ),
173- environmentId = data .get ('environmentId' ),
174- )
175- except HTTPResponseError as e :
176- LOGGER .error ('Call to Split API failed. Identity not created.' )
177- raise e
178- except Exception as e :
179- LOGGER .debug (e )
180- raise UnknownApiClientError ()
181-
147+ data = as_dict (identity )
148+ response = self ._http_client .make_request (
149+ self ._endpoint ['update' ],
150+ data ,
151+ key = data .get ('key' ),
152+ trafficTypeId = data .get ('trafficTypeId' ),
153+ environmentId = data .get ('environmentId' ),
154+ )
182155 return Identity (response , self ._http_client )
183156
184157 def patch (self , identity ):
@@ -191,35 +164,15 @@ def patch(self, identity):
191164 :returns: patched Identity
192165 :rtype: Identity
193166 '''
194- try :
195- data = identity .to_dict () if isinstance (identity , Identity ) else identity
196- response = self ._http_client .make_request (
197- self ._endpoint ['patch' ],
198- data ,
199- key = data .get ('key' ),
200- trafficTypeId = data .get ('trafficTypeId' ),
201- environmentId = data .get ('environmentId' ),
202- )
203- except HTTPResponseError as e :
204- LOGGER .error ('Call to Split API failed. Identity not created.' )
205- raise e
206- except Exception as e :
207- LOGGER .debug (e )
208- raise UnknownApiClientError ()
209-
210- return Identity (response , self ._http_client )
211-
212- def delete_by_instance (self , identity ):
213- '''
214- Delete the identity
215-
216- :param identity: Identity instance
217- '''
218- return self .delete (
219- identity .traffic_type_id ,
220- identity .environment_id ,
221- identity .key
167+ data = as_dict (identity )
168+ response = self ._http_client .make_request (
169+ self ._endpoint ['patch' ],
170+ data ,
171+ key = data .get ('key' ),
172+ trafficTypeId = data .get ('trafficTypeId' ),
173+ environmentId = data .get ('environmentId' ),
222174 )
175+ return Identity (response , self ._http_client )
223176
224177 def delete (self , traffic_type_id , environment_id , key ):
225178 '''
@@ -230,16 +183,22 @@ def delete(self, traffic_type_id, environment_id, key):
230183 :param environment_id: Identity's environment id
231184 :param key: Identity's key
232185 '''
233- try :
234- self ._http_client .make_request (
235- self ._endpoint ['delete_attributes' ],
236- key = key ,
237- trafficTypeId = traffic_type_id ,
238- environmentId = environment_id
239- )
240- except HTTPResponseError as e :
241- LOGGER .error ('Call to Split API failed. Identity not patched.' )
242- raise e
243- except Exception as e :
244- LOGGER .debug (e )
245- raise UnknownApiClientError ()
186+ self ._http_client .make_request (
187+ self ._endpoint ['delete_attributes' ],
188+ key = key ,
189+ trafficTypeId = traffic_type_id ,
190+ environmentId = environment_id
191+ )
192+
193+ def delete_by_instance (self , identity ):
194+ '''
195+ Delete the identity
196+
197+ :param identity: Identity instance
198+ '''
199+ data = as_dict (identity )
200+ return self .delete (
201+ data .get ('trafficTypeId' ),
202+ data .get ('environmentId' ),
203+ data .get ('key' )
204+ )
0 commit comments