Change summary format and fixes
This commit is contained in:
parent
c24014b98f
commit
16b3c646c2
|
@ -313,10 +313,10 @@ def clean(**kwargs):
|
|||
)
|
||||
|
||||
if clean_all or folders:
|
||||
collection.remove_empty_folders(path)
|
||||
summary = collection.remove_empty_folders(path)
|
||||
|
||||
if kwargs['delete_excluded']:
|
||||
collection.remove_excluded_files()
|
||||
summary = collection.remove_excluded_files()
|
||||
|
||||
if log_level < 30:
|
||||
summary.print()
|
||||
|
|
|
@ -380,7 +380,7 @@ class Collection:
|
|||
if self.root in src_path.parents:
|
||||
self.db.delete_filepath(str(src_path.relative_to(self.root)))
|
||||
|
||||
self.summary.append((src_path, dest_path))
|
||||
self.summary.append((src_path, self.mode))
|
||||
record = True
|
||||
|
||||
else:
|
||||
|
@ -405,9 +405,13 @@ class Collection:
|
|||
|
||||
for exclude in self.exclude:
|
||||
if fnmatch(file_path, exclude):
|
||||
self.remove(file_path)
|
||||
if not self.dry_run:
|
||||
self.remove(file_path)
|
||||
self.summary.append((file_path, 'delete'))
|
||||
break
|
||||
|
||||
return self.summary
|
||||
|
||||
def sort_file(self, src_path, dest_path, remove_duplicates=False):
|
||||
'''
|
||||
Copy or move file to dest_path.
|
||||
|
@ -435,7 +439,9 @@ class Collection:
|
|||
f'File in source and destination are identical. Duplicate will be ignored.'
|
||||
)
|
||||
if mode == 'move':
|
||||
self.remove(src_path)
|
||||
if not dry_run:
|
||||
self.remove(src_path)
|
||||
self.summary.append((src_path, 'delete'))
|
||||
return None
|
||||
else: # name is same, but file is different
|
||||
self.logger.warning(
|
||||
|
@ -774,7 +780,7 @@ class Collection:
|
|||
metadata = media.get_metadata(self.root, loc, self.db, self.cache)
|
||||
media.metadata['file_path'] = os.path.relpath(file_path, self.root)
|
||||
self._add_db_data(media.metadata)
|
||||
self.summary.append((file_path, file_path))
|
||||
self.summary.append((file_path, 'record'))
|
||||
|
||||
return self.summary
|
||||
|
||||
|
@ -784,7 +790,7 @@ class Collection:
|
|||
checksum = utils.checksum(file_path)
|
||||
relpath = file_path.relative_to(self.root)
|
||||
if checksum == self.db.get_checksum(relpath):
|
||||
self.summary.append((file_path, file_path))
|
||||
self.summary.append((file_path, 'record'))
|
||||
else:
|
||||
self.logger.error('{file_path} is corrupted')
|
||||
self.summary.append((file_path, False))
|
||||
|
@ -829,7 +835,7 @@ class Collection:
|
|||
break
|
||||
# set row attribute to the file
|
||||
self._add_db_data(media.metadata)
|
||||
self.summary.append((file_path, file_path))
|
||||
self.summary.append((file_path, 'record'))
|
||||
|
||||
# Finally delete invalid rows
|
||||
for row in invalid_db_rows:
|
||||
|
@ -843,8 +849,8 @@ class Collection:
|
|||
# if folder empty, delete it
|
||||
files = os.listdir(directory)
|
||||
if len(files) == 0:
|
||||
self.logger.info(f"Removing empty folder: {directory}")
|
||||
directory.rmdir()
|
||||
if not self.dry_run:
|
||||
directory.rmdir()
|
||||
|
||||
if self.root in directory.parent.parents:
|
||||
parents.add(directory.parent)
|
||||
|
@ -939,24 +945,29 @@ class Collection:
|
|||
|
||||
return self.summary, record
|
||||
|
||||
def remove_empty_folders(self, path, remove_root=True):
|
||||
def remove_empty_folders(self, directory, remove_root=True):
|
||||
'Function to remove empty folders'
|
||||
if not os.path.isdir(path):
|
||||
return
|
||||
if not os.path.isdir(directory):
|
||||
self.summary.append((directory, False))
|
||||
return self.summary
|
||||
|
||||
# remove empty subfolders
|
||||
files = os.listdir(path)
|
||||
files = os.listdir(directory)
|
||||
if len(files):
|
||||
for f in files:
|
||||
fullpath = os.path.join(path, f)
|
||||
fullpath = os.path.join(directory, f)
|
||||
if os.path.isdir(fullpath):
|
||||
self.remove_empty_folders(fullpath)
|
||||
|
||||
# if folder empty, delete it
|
||||
files = os.listdir(path)
|
||||
files = os.listdir(directory)
|
||||
if len(files) == 0 and remove_root:
|
||||
self.logger.info(f"Removing empty folder: {path}")
|
||||
os.rmdir(path)
|
||||
self.logger.info(f"Removing empty folder: {directory}")
|
||||
if not self.dry_run:
|
||||
os.rmdir(directory)
|
||||
self.summary.append((directory, 'delete'))
|
||||
|
||||
return self.summary
|
||||
|
||||
def move_file(self, img_path, dest_path):
|
||||
if not self.dry_run:
|
||||
|
@ -1017,7 +1028,7 @@ class Collection:
|
|||
self.move_file(img_path, dest_path)
|
||||
moved_imgs.add(img_path)
|
||||
if self._record_file(img_path, dest_path, media):
|
||||
self.summary.append((img_path, dest_path))
|
||||
self.summary.append((img_path, self.mode))
|
||||
else:
|
||||
self.summary.append((img_path, False))
|
||||
result = False
|
||||
|
@ -1028,7 +1039,7 @@ class Collection:
|
|||
self.move_file(img_path, dest_path)
|
||||
moved_imgs.add(img_path)
|
||||
if self._record_file(img_path, dest_path, media_ref):
|
||||
self.summary.append((img_path, dest_path))
|
||||
self.summary.append((img_path, self.mode))
|
||||
else:
|
||||
self.summary.append((img_path, False))
|
||||
result = False
|
||||
|
@ -1069,7 +1080,7 @@ class Collection:
|
|||
self.move_file(src_path, dest_path)
|
||||
moved_files.add(src_path)
|
||||
if self._record_file(src_path, dest_path, media):
|
||||
self.summary.append((src_path, dest_path))
|
||||
self.summary.append((src_path, self.mode))
|
||||
else:
|
||||
self.summary.append((src_path, False))
|
||||
result = False
|
||||
|
|
|
@ -1,39 +1,52 @@
|
|||
from tabulate import tabulate
|
||||
|
||||
|
||||
class Summary(object):
|
||||
class Summary:
|
||||
|
||||
def __init__(self):
|
||||
self.records = []
|
||||
self.success = 0
|
||||
self.error = 0
|
||||
self.error_items = []
|
||||
self.modes = ('record', 'copy', 'move', 'delete')
|
||||
self.result = {}
|
||||
for mode in self.modes:
|
||||
self.result[mode] = 0
|
||||
|
||||
self.errors = 0
|
||||
self.errors_items = []
|
||||
|
||||
def append(self, row):
|
||||
id, status = row
|
||||
file_path, mode = row
|
||||
|
||||
if status:
|
||||
self.success += 1
|
||||
if mode:
|
||||
for m in self.modes:
|
||||
if mode == m:
|
||||
self.result[mode] += 1
|
||||
else:
|
||||
self.error += 1
|
||||
self.error_items.append(id)
|
||||
self.errors += 1
|
||||
self.errors_items.append(file_path)
|
||||
|
||||
def print(self):
|
||||
if self.error > 0:
|
||||
error_headers = ["File"]
|
||||
error_result = []
|
||||
for id in self.error_items:
|
||||
error_result.append([id])
|
||||
|
||||
print('Errors details:')
|
||||
print(tabulate(error_result, headers=error_headers))
|
||||
print("\n")
|
||||
|
||||
headers = ["Metric", "Count"]
|
||||
result = [
|
||||
["Success", self.success],
|
||||
["Error", self.error],
|
||||
]
|
||||
|
||||
print()
|
||||
print('Summary:')
|
||||
print(tabulate(result, tablefmt="plain"))
|
||||
for mode in self.result:
|
||||
nb = self.result[mode]
|
||||
if self.result[mode] != 0:
|
||||
if mode == 'record':
|
||||
print(f"SUMMARY: {nb} files recorded.")
|
||||
elif mode == 'copy':
|
||||
print(f"SUMMARY: {nb} files copied.")
|
||||
elif mode == 'move':
|
||||
print(f"SUMMARY: {nb} files moved.")
|
||||
else:
|
||||
print(f"SUMMARY: {nb} files deleted.")
|
||||
if sum(self.result.values()) == 0 and not self.errors:
|
||||
print(f"OK !!")
|
||||
|
||||
if self.errors > 0:
|
||||
print()
|
||||
errors_headers = [f"ERROR: {self.errors} errors reported in files:"]
|
||||
errors_result = []
|
||||
for path in self.errors_items:
|
||||
errors_result.append([path])
|
||||
|
||||
print(tabulate(errors_result, headers=errors_headers))
|
||||
print()
|
||||
|
||||
|
|
Loading…
Reference in New Issue