diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-05-11 16:09:07 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-07-24 08:57:49 +0200 |
commit | 9fa010e375224b6ecca46d2826af113d3c6c913e (patch) | |
tree | 1c93b9221c936471d62b1368d9a97db0fdcf82cf /rtemsspec | |
parent | 7aec9588c0203a0d027109bd129e2c230329d9ae (diff) |
util: Add argparse and logging helpers
Diffstat (limited to 'rtemsspec')
-rw-r--r-- | rtemsspec/tests/test_util.py | 16 | ||||
-rw-r--r-- | rtemsspec/util.py | 29 |
2 files changed, 44 insertions, 1 deletions
diff --git a/rtemsspec/tests/test_util.py b/rtemsspec/tests/test_util.py index bd5fe22f..0873dc5e 100644 --- a/rtemsspec/tests/test_util.py +++ b/rtemsspec/tests/test_util.py @@ -27,7 +27,8 @@ import os import logging -from rtemsspec.util import copy_files, load_config, run_command +from rtemsspec.util import copy_files, create_argument_parser, init_logging, \ + load_config, run_command from rtemsspec.tests.util import get_and_clear_log @@ -59,3 +60,16 @@ DEBUG A""" assert stdout[0].strip() == "A" status = run_command(["sleep", "0.1"]) assert status == 0 + + +def test_args(): + parser = create_argument_parser() + args = parser.parse_args([]) + init_logging(args) + assert args.log_level == "INFO" + assert args.log_file is None + log_file = "log.txt" + args = parser.parse_args(["--log-level=DEBUG", f"--log-file={log_file}"]) + assert args.log_level == "DEBUG" + assert args.log_file == log_file + init_logging(args) diff --git a/rtemsspec/util.py b/rtemsspec/util.py index 8e0577a2..41127031 100644 --- a/rtemsspec/util.py +++ b/rtemsspec/util.py @@ -24,6 +24,7 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +import argparse import logging import os import shutil @@ -97,3 +98,31 @@ def run_command(args: List[str], elif task.poll() is not None: break return task.wait() + + +def create_argument_parser( + default_log_level: str = "INFO") -> argparse.ArgumentParser: + """ Creates an argument parser with default logging options. """ + parser = argparse.ArgumentParser() + parser.add_argument( + '--log-level', + choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], + type=str.upper, + default=default_log_level, + help="log level") + parser.add_argument('--log-file', + type=str, + default=None, + help="log to this file") + return parser + + +def init_logging(args: argparse.Namespace) -> None: + """ Initializes the logging module. """ + handlers: List[Any] = [logging.StreamHandler()] + if args.log_file is not None: + handlers.append(logging.FileHandler(args.log_file, mode="a")) + logging.basicConfig(level=args.log_level, + datefmt="%Y-%m-%dT%H:%M:%S", + format='%(asctime)s %(levelname)-8s %(message)s', + handlers=handlers) |