mirror of https://github.com/CIRCL/PyCIRCLean
Fix logging for errors and symlinks
parent
9ad04da755
commit
4205d57dec
|
@ -586,32 +586,42 @@ class GroomerLogger(object):
|
|||
lf.write(b'\n')
|
||||
|
||||
def add_file(self, file_path, file_props, in_tempdir=False):
|
||||
"""Add a file to the log. Takes a dict of file properties."""
|
||||
"""Add a file to the log. Takes a path and a dict of file properties."""
|
||||
depth = self._get_path_depth(file_path)
|
||||
description_string = ', '.join(file_props['description_string'])
|
||||
file_hash = Logging.computehash(file_path)[:6]
|
||||
if file_props['is_dangerous']:
|
||||
description_category = "Dangerous"
|
||||
if file_props['is_symlink']:
|
||||
symlink_template = "+- NOT COPIED: symbolic link to {name} ({sha_hash})"
|
||||
log_string = symlink_template.format(
|
||||
name=file_props['symlink_path'],
|
||||
sha_hash=file_hash
|
||||
)
|
||||
else:
|
||||
description_category = "Normal"
|
||||
size_string = self._format_file_size(file_props['file_size'])
|
||||
file_template = "+- {name} ({sha_hash}): {size}, type: {mt}/{st}. {desc}: {desc_str}"
|
||||
file_string = file_template.format(
|
||||
name=file_props['filename'],
|
||||
sha_hash=file_hash,
|
||||
size=size_string,
|
||||
mt=file_props['maintype'],
|
||||
st=file_props['subtype'],
|
||||
desc=description_category,
|
||||
desc_str=description_string,
|
||||
)
|
||||
# TODO: finish adding Errors and check that they appear properly
|
||||
# if file_props['errors']:
|
||||
# error_string = ', '.join([str(key) for key in file_props['errors']])
|
||||
# file_string.append(' Errors: ' + error_string)
|
||||
if file_props['is_dangerous']:
|
||||
category = "Dangerous"
|
||||
else:
|
||||
category = "Normal"
|
||||
size_string = self._format_file_size(file_props['file_size'])
|
||||
if not file_props['copied']:
|
||||
copied_string = 'NOT COPIED: '
|
||||
else:
|
||||
copied_string = ''
|
||||
file_template = "+- {copied}{name} ({sha_hash}): {size}, type: {mt}/{st}. {cat}: {desc_str}"
|
||||
log_string = file_template.format(
|
||||
copied=copied_string,
|
||||
name=file_props['filename'],
|
||||
sha_hash=file_hash,
|
||||
size=size_string,
|
||||
mt=file_props['maintype'],
|
||||
st=file_props['subtype'],
|
||||
cat=category,
|
||||
desc_str=file_props['description_string'],
|
||||
)
|
||||
if file_props['errors']:
|
||||
error_string = ', '.join([str(key) for key in file_props['errors']])
|
||||
log_string.append(' Errors: ' + error_string)
|
||||
if in_tempdir:
|
||||
depth -= 1
|
||||
self._write_line_to_log(file_string, depth)
|
||||
self._write_line_to_log(log_string, depth)
|
||||
|
||||
def add_dir(self, dir_path):
|
||||
"""Add a directory to the log"""
|
||||
|
@ -681,12 +691,13 @@ class KittenGroomerFileCheck(KittenGroomerBase):
|
|||
the file to the destionation key, and clean up temporary directory.
|
||||
"""
|
||||
file.check()
|
||||
if file.should_copy:
|
||||
file.safe_copy()
|
||||
file.set_property('copied', True)
|
||||
file.write_log()
|
||||
if file.is_archive:
|
||||
self.process_archive(file)
|
||||
else:
|
||||
if file.should_copy:
|
||||
file.safe_copy()
|
||||
file.set_property('copied', True)
|
||||
file.write_log()
|
||||
# TODO: Can probably handle cleaning up the tempdir better
|
||||
if hasattr(file, 'tempdir_path'):
|
||||
self.safe_rmtree(file.tempdir_path)
|
||||
|
|
|
@ -12,12 +12,13 @@ def save_logs(groomer, test_description):
|
|||
test_log_path = 'tests/{}.log'.format(test_description)
|
||||
time_now = str(datetime.now().time()) + '\n'
|
||||
with open(test_log_path, 'wb+') as test_log:
|
||||
log_header = divider.format('TEST LOG')
|
||||
test_log.write(bytes(log_header, encoding='utf-8'))
|
||||
test_log_header = divider.format('TEST LOG')
|
||||
test_log.write(bytes(test_log_header, encoding='utf-8'))
|
||||
test_log.write(bytes(time_now, encoding='utf-8'))
|
||||
test_log.write(bytes(test_description, encoding='utf-8'))
|
||||
test_log.write(b'\n')
|
||||
test_log.write(b'-' * 20 + b'\n')
|
||||
log_header = divider.format('STD LOG')
|
||||
test_log.write(bytes(log_header, encoding='utf-8'))
|
||||
with open(groomer.logger.log_path, 'rb') as logfile:
|
||||
log = logfile.read()
|
||||
test_log.write(log)
|
||||
|
|
|
@ -172,13 +172,18 @@ class TestFileBase:
|
|||
def test_add_new_description(self, text_file):
|
||||
"""Adding a new description should add it to the list of description strings."""
|
||||
text_file.add_description('thing')
|
||||
assert text_file.get_property('description_string') == ['thing']
|
||||
assert text_file.get_property('description_string') == 'thing'
|
||||
|
||||
def test_add_description_exists(self, text_file):
|
||||
"""Adding a description that already exists shouldn't duplicate it."""
|
||||
text_file.add_description('thing')
|
||||
text_file.add_description('thing')
|
||||
assert text_file.get_property('description_string') == ['thing']
|
||||
assert text_file.get_property('description_string') == 'thing'
|
||||
|
||||
def test_add_multiple_descriptions(self, text_file):
|
||||
text_file.add_description('thing')
|
||||
text_file.add_description('foo')
|
||||
assert text_file.get_property('description_string') == 'thing, foo'
|
||||
|
||||
def test_add_description_not_string(self, text_file):
|
||||
"""Adding a description that isn't a string should raise an error."""
|
||||
|
@ -205,7 +210,7 @@ class TestFileBase:
|
|||
"""Marking a file as dangerous and passing in a description should add
|
||||
that description to the file."""
|
||||
text_file.make_dangerous('thing')
|
||||
assert text_file.get_property('description_string') == ['thing']
|
||||
assert text_file.get_property('description_string') == 'thing'
|
||||
|
||||
def test_dangerous_file_mark_dangerous(self, text_file):
|
||||
"""Marking a dangerous file as dangerous should do nothing, and the
|
||||
|
|
Loading…
Reference in New Issue