44import json
55import types
66import requests
7+
8+ from ._delete_by_id import deleteProcessResponse
79from ._insert import getInsertRequestBody , processResponse , convertResponse
810from ._update import sendUpdateRequests , createUpdateResponseBody
9- from ._config import Configuration
11+ from ._config import Configuration , DeleteOptions
1012from ._config import InsertOptions , ConnectionConfig , UpdateOptions
1113from ._connection import createRequest
1214from ._detokenize import sendDetokenizeRequests , createDetokenizeResponseBody
@@ -172,4 +174,85 @@ def update(self, updateInput, options: UpdateOptions = UpdateOptions()):
172174 SkyflowErrorMessages .PARTIAL_SUCCESS , result , interface = interface )
173175 else :
174176 log_info (InfoMessages .UPDATE_DATA_SUCCESS .value , interface )
175- return result
177+ return result
178+
179+ def delete_by_id (self , records : dict ,options : DeleteOptions = DeleteOptions ()):
180+ interface = InterfaceName .DELETE_BY_ID .value
181+ log_info (InfoMessages .DELETE_BY_ID_TRIGGERED .value , interface = interface )
182+
183+ self ._checkConfig (interface )
184+
185+ self .storedToken = tokenProviderWrapper (
186+ self .storedToken , self .tokenProvider , interface )
187+ headers = {
188+ "Authorization" : "Bearer " + self .storedToken ,
189+ "sky-metadata" : json .dumps (getMetrics ())
190+ }
191+ error_list = []
192+ result_list = []
193+ errors = {}
194+ result = {}
195+ error = {}
196+ try :
197+ if not isinstance (records , dict ) or "records" not in records :
198+ error = {"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
199+ "description" : SkyflowErrorMessages .RECORDS_KEY_NOT_FOUND_DELETE .value }}
200+ return error
201+ records_list = records ["records" ]
202+ if not isinstance (records_list , list ):
203+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
204+ "description" : SkyflowErrorMessages .INVALID_RECORDS_IN_DELETE .value }})
205+ return error
206+ elif len (records_list ) == 0 :
207+ error = {"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
208+ "description" : SkyflowErrorMessages .EMPTY_RECORDS_IN_DELETE .value }}
209+ return error
210+ except KeyError :
211+ raise SkyflowError (SkyflowErrorCodes .INVALID_INPUT ,
212+ SkyflowErrorMessages .RECORDS_KEY_ERROR , interface = interface )
213+ try :
214+ for index ,record in enumerate (records ["records" ]):
215+ record_list = record ["id" ]
216+ if not isinstance (record_list , str ):
217+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INDEX .value ,
218+ "description" : SkyflowErrorMessages .INVALID_ID_TYPE_DELETE .value % (index )}})
219+ return error
220+ elif record_list == "" :
221+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
222+ "description" : SkyflowErrorMessages .EMPTY_ID_IN_DELETE .value % (index )}})
223+ return error
224+ except KeyError :
225+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INDEX .value ,
226+ "description" : SkyflowErrorMessages .IDS_KEY_ERROR .value }})
227+ return error
228+ try :
229+ for index ,record in enumerate (records ["records" ]):
230+ record_table = record ["table" ]
231+ if not isinstance (record_table , str ):
232+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
233+ "description" : SkyflowErrorMessages .INVALID_TABLE_TYPE_DELETE .value % (index )}})
234+ return error
235+ elif record_table == "" :
236+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INPUT .value ,
237+ "description" : SkyflowErrorMessages .EMPTY_TABLE_IN_DELETE .value % (index )}})
238+ return error
239+ except KeyError :
240+ error .update ({"error" : {"code" : SkyflowErrorCodes .INVALID_INDEX .value ,
241+ "description" : SkyflowErrorMessages .TABLE_KEY_ERROR .value }})
242+ return error
243+ for record in records ["records" ]:
244+ request_url = self ._get_complete_vault_url () + "/" + record ["table" ] + "/" + record ["id" ]
245+ response = requests .delete (request_url , headers = headers )
246+ processed_response = deleteProcessResponse (response , records )
247+ if processed_response is not None and processed_response .get ('code' ) == 404 :
248+ errors .update ({'id' : record ["id" ], 'error' : processed_response })
249+ error_list .append (errors )
250+ else :
251+ result_list .append (processed_response )
252+ if result_list :
253+ result .update ({'records' : result_list })
254+ if errors :
255+ result .update ({'errors' : error_list })
256+
257+ log_info (InfoMessages .DELETE_DATA_SUCCESS .value , interface )
258+ return result
0 commit comments