File size: 2,306 Bytes
a3f3d91 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,shutil
from . import logger
from .newRunJob import Job
from . import optparser as opt
import traceback as _tr
_name = "Main"
def _cleanup(aggrescan_job_instance):
"""
Done to prevent a situation where Job raises an error on initialization and there is nothing to delete
Normally deletes or keeps the simulations temporary directory depending on verbosity settings
(Can't check for Exceptions in finally block, hence the function)
"""
try:
if logger.get_log_level() < 4:
shutil.rmtree(aggrescan_job_instance.get_tempdir(),ignore_errors=True)
logger.log_file(module_name=_name, msg="Removing temporary files")
else:
logger.log_file(module_name=_name,
msg="Verbosity higher than 3 - temporary files kept in %s"
% aggrescan_job_instance.get_tempdir())
except AttributeError:
pass
def run_program():
try:
a = "dummy" # to avoid cleanup on empty instances
options = opt.parse(options=sys.argv[1:])
logger.setup(log_level=options['verbose'], remote=options['remote'], work_dir=options["work_dir"])
a = Job(config=options)
a.run_job()
_cleanup(a)
logger.info(module_name="Main", msg="Simulation completed successfully.")
except KeyboardInterrupt:
_cleanup(a)
logger.info(module_name=_name, msg="Interrupted by user")
except logger.AggrescanError as custom_error:
_cleanup(a)
custom_error.generate_error_file()
logger.exit_program(module_name=custom_error.module_name,
msg=custom_error.logger_msg,
traceback=None,
exc=custom_error)
except Exception as e:
_cleanup(a)
logger.record_exception(trace_stack=_tr.format_exc())
logger.critical(module_name=_name,
msg="Unhandled Exception caught: %s." % e.message)
if logger.get_log_level() > 2:
logger.info(module_name=_name,
msg="Verbosity higher than 2 - raising the Exception to provide traceback.")
raise
else:
logger.exit_program()
|