summaryrefslogtreecommitdiff
path: root/rtemsspec
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-05-11 16:09:07 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-07-24 08:57:49 +0200
commit9fa010e375224b6ecca46d2826af113d3c6c913e (patch)
tree1c93b9221c936471d62b1368d9a97db0fdcf82cf /rtemsspec
parent7aec9588c0203a0d027109bd129e2c230329d9ae (diff)
util: Add argparse and logging helpers
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/tests/test_util.py16
-rw-r--r--rtemsspec/util.py29
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)