Skip to content

Commit 5bf78cb

Browse files
committed
Added overwrite option to write, remove and update methods
1 parent 72bda66 commit 5bf78cb

File tree

1 file changed

+38
-20
lines changed

1 file changed

+38
-20
lines changed

melkit/toolkit.py

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from pandas import DataFrame, read_csv
66

7-
from os import remove
7+
from os import remove, rename
88
from re import search, match, findall
99
from 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

Comments
 (0)