Add --mostly-hide-warnings flag.

This commit is contained in:
Andrew Ferrier 2015-08-19 00:26:01 +02:00
parent 65f5922e41
commit 1255299b7f
4 changed files with 64 additions and 6 deletions

View file

@ -71,8 +71,10 @@ def main(argv, syslog_handler, syserr_handler):
syserr_handler.setLevel(logging.DEBUG)
elif args.verbose == 1:
syserr_handler.setLevel(logging.INFO)
else:
elif args.mostly_hide_warnings == False:
syserr_handler.setLevel(logging.WARNING)
else:
syserr_handler.setLevel(logging.ERROR)
logger.info("Options used are: " + str(args))
@ -132,6 +134,8 @@ def main(argv, syslog_handler, syserr_handler):
with open(get_modified_output_file_name(output_file_name, "_original.eml"), 'w') as f:
f.write(input_data)
return args.mostly_hide_warnings
def handle_args(argv):
class ArgumentParser(argparse.ArgumentParser):
@ -194,7 +198,18 @@ def handle_args(argv):
"if not. If this option is specified, email2pdf will exit with an error if the syslog socket "
"can not be located.")
parser.add_argument('-v', '--verbose', action='count', default=0,
verbose_options = parser.add_mutually_exclusive_group()
verbose_options.add_argument("--mostly-hide-warnings", action="store_true",
help="By default email2pdf will output warnings about handling emails to stderr and "
"exit with a non-zero return code if any are encountered, *as well as* outputting a "
"summary file entitled <output_PDF_name>_warnings_and_errors.txt and the original "
"email as <output_PDF_name>_original.eml. Specifying this option disables the first "
"two, so only the additional files are produced - this makes it easier to use email2pdf "
"if it is run on a schedule, as warnings won't cause the same email to be repeatedly "
"retried.")
verbose_options.add_argument('-v', '--verbose', action='count', default=0,
help="Make the output more verbose. This affects both the output logged to "
"syslog, as well as output to the console. Using this twice makes it doubly verbose.")
@ -602,7 +617,7 @@ def call_main(argv, syslog_handler, syserr_handler):
logger = logging.getLogger("email2pdf")
try:
main(argv, syslog_handler, syserr_handler)
return main(argv, syslog_handler, syserr_handler)
except FatalException as exception:
logger.error(exception.value)
sys.exit(2)
@ -639,7 +654,7 @@ if __name__ == "__main__":
else:
syslog_handler_setup = None
call_main(sys.argv, syslog_handler_setup, syserr_handler_setup)
mostly_hide_warnings = call_main(sys.argv, syslog_handler_setup, syserr_handler_setup)
if warning_pending:
if warning_pending and not mostly_hide_warnings:
sys.exit(1)

View file

@ -10,4 +10,4 @@ delete = true
[destination]
type = MDA_external
path = /where/I/installed/email2pdf
arguments = ("-d", "/where/I/want/PDFs/to/go", "--enforce-syslog")
arguments = ("-d", "/where/I/want/PDFs/to/go", "--enforce-syslog", "--mostly-hide-warnings")

View file

@ -20,6 +20,15 @@ class Direct_Arguments(BaseTestClasses.Email2PDFTestCase):
self.assertRegex(self.getWarningFileContents(), "body.*any.*attachments")
self.assertValidOriginalFileContents()
def test_no_body_mostly_hide_warnings(self):
error = self.invokeDirectly(extraParams=['--no-body', '--mostly-hide-warnings'])
self.assertFalse(self.existsByTime())
self.assertEqual("", error)
self.assertTrue(self.existsByTimeWarning())
self.assertTrue(self.existsByTimeOriginal())
self.assertRegex(self.getWarningFileContents(), "body.*any.*attachments")
self.assertValidOriginalFileContents()
def test_no_attachments(self):
self.addHeaders()
self.attachText("Some basic textual content")
@ -36,6 +45,22 @@ class Direct_Arguments(BaseTestClasses.Email2PDFTestCase):
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_no_attachments_mostly_hide_warnings(self):
self.addHeaders()
self.attachText("Some basic textual content")
filename = self.attachPDF("Some PDF content", mainContentType="application", subContentType="octet-stream")
filename2 = self.attachPDF("Some PDF content")
filename3 = self.attachImage()
error = self.invokeDirectly(extraParams=['--no-attachments', '--mostly-hide-warnings'])
self.assertEqual('', error)
self.assertTrue(self.existsByTime())
self.assertFalse(os.path.exists(os.path.join(self.workingDir, filename)))
self.assertFalse(os.path.exists(os.path.join(self.workingDir, filename2)))
self.assertFalse(os.path.exists(os.path.join(self.workingDir, filename3)))
self.assertRegex(self.getPDFText(self.getTimedFilename()), "Some basic textual content")
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_no_body_and_no_attachments(self):
self.addHeaders()
self.attachText("Some basic textual content")

View file

@ -45,6 +45,16 @@ class TestBasic(Email2PDFTestCase):
self.assertTrue(self.existsByTimeOriginal())
self.assertValidOriginalFileContents()
def test_dont_print_body_mostly_hide_warnings(self):
(rc, output, error) = self.invokeAsSubprocess(extraParams=['--no-body', '--mostly-hide-warnings'])
self.assertEqual(0, rc)
self.assertFalse(self.existsByTime())
self.assertEqual('', error)
self.assertTrue(self.existsByTimeWarning())
self.assertRegex(self.getWarningFileContents(), "body.*any.*attachments")
self.assertTrue(self.existsByTimeOriginal())
self.assertValidOriginalFileContents()
def test_no_message_headers(self):
(rc, output, error) = self.invokeAsSubprocess()
self.assertEqual(0, rc)
@ -53,6 +63,14 @@ class TestBasic(Email2PDFTestCase):
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_no_message_headers(self):
(rc, output, error) = self.invokeAsSubprocess(extraParams=['--mostly-hide-warnings'])
self.assertEqual(0, rc)
self.assertTrue(self.existsByTime())
self.assertEqual('', error)
self.assertFalse(self.existsByTimeWarning())
self.assertFalse(self.existsByTimeOriginal())
def test_withinputfile(self):
self.addHeaders()
(rc, output, error) = self.invokeAsSubprocess(inputFile=True)