44
55from pandas import DataFrame , read_csv
66
7- from os import remove
7+ from os import remove , rename
88from re import search , match , findall
99from json import dumps
1010
@@ -269,40 +269,44 @@ def get_cf_list(self) -> List[CF]:
269269 '''
270270 return self ._cf_list
271271
272- def remove_object (self , obj_id : str , src_file : str = None , new_file : str = None ) -> None :
272+ def remove_object (self , obj_id : str , overwrite : bool = False , new_file : str = None ) -> None :
273273 '''
274274 Deletes an object from the input file.
275275 '''
276276
277- src_file = src_file or self ._filename
278- new_file = new_file or self . _filename + '_NEW'
277+ src_file = self ._filename
278+ new_file = new_file or src_file + '_NEW'
279279
280280 with open (src_file , 'r' ) as f1 , open (new_file , 'w' ) as f2 :
281281 for line in f1 :
282282 if not line .startswith (obj_id ):
283283 f2 .write (line )
284284
285- def remove_objects (self , obj_ids : List [str ], src_file : str = None , new_file : str = None ) -> None :
285+ if overwrite :
286+ remove (src_file )
287+ rename (new_file , src_file )
288+
289+ def remove_objects (self , obj_ids : List [str ], new_file : str = None ) -> None :
286290 '''
287291 Deletes a list of objects from the input file.
288292 '''
289293
290- src_file = src_file or self ._filename
294+ src_file = self ._filename
291295 new_file = new_file or self ._filename + '_NEW'
292296
293297 with open (src_file , 'r' ) as f1 , open (new_file , 'w' ) as f2 :
294298 for line in f1 :
295299 if line [:5 ] not in obj_ids :
296300 f2 .write (line )
297301
298- def write_object (self , obj : Object , src_file : str = None , new_file : str = None ) -> None :
302+ def write_object (self , obj : Object , overwrite : bool = False , new_file : str = None ) -> None :
299303 '''
300304 Writes a new object in the input file.
301305 '''
302306
303- src_file = src_file or self ._filename
304- new_file = new_file or self . _filename + '_NEW'
305-
307+ src_file = self ._filename
308+ new_file = new_file or src_file + '_NEW'
309+
306310 with open (src_file , 'r' ) as f1 , open (new_file , 'w' ) as f2 :
307311 written = False
308312 for line in f1 :
@@ -312,12 +316,16 @@ def write_object(self, obj: Object, src_file: str = None, new_file: str = None)
312316 else :
313317 f2 .write (line )
314318
315- def write_objects (self , obj_list : List [Object ], src_file : str = None , new_file : str = None ) -> None :
319+ if overwrite :
320+ remove (src_file )
321+ rename (new_file , src_file )
322+
323+ def write_objects (self , obj_list : List [Object ], new_file : str = None ) -> None :
316324 '''
317325 Writes a new object in the input file.
318326 '''
319327
320- src_file = src_file or self ._filename
328+ src_file = self ._filename
321329 new_file = new_file or self ._filename + '_NEW'
322330
323331 with open (src_file , 'r' ) as f1 , open (new_file , 'w' ) as f2 :
@@ -331,21 +339,31 @@ def write_objects(self, obj_list: List[Object], src_file: str = None, new_file:
331339 else :
332340 f2 .write (line )
333341
334- def update_object (self , obj : Object , src_file : str = None , new_file : str = None ) -> None :
342+ def update_object (self , obj : Object , overwrite : bool = False , new_file : str = None ) -> None :
335343 '''
336344 Updates object input information.
337345 '''
338346
339- src_file = src_file or self ._filename
340- tmp_file = self ._filename + '_TMP'
341- new_file = new_file or self ._filename + '_NEW'
347+ src_file = self ._filename
348+ new_file = new_file or src_file + '_NEW'
342349
343350 obj_id = obj .get_id ()
344351
345- self .remove_object (obj_id , new_file = tmp_file )
346- self .write_object (obj , src_file = tmp_file , new_file = new_file )
347-
348- remove (self ._filename + '_TMP' )
352+ if overwrite :
353+ self .remove_object (obj_id , overwrite = True )
354+ self .write_object (obj , overwrite = True )
355+ else :
356+ tmp_file = src_file + '_TMP'
357+ self .remove_object (obj_id , new_file = tmp_file )
358+ with open (tmp_file , 'r' ) as f1 , open (new_file , 'w' ) as f2 :
359+ written = False
360+ for line in f1 :
361+ if line .startswith ('.' ) and not written :
362+ f2 .write ('*\n ' + str (obj ) + '*\n ' + line )
363+ written = True
364+ else :
365+ f2 .write (line )
366+ remove (tmp_file )
349367
350368 def update_objects (self , obj_list : Object , src_file : str = None , new_file : str = None ) -> None :
351369 '''
0 commit comments