[rtems-central commit] util: Add argparse and logging helpers
Sebastian Huber
sebh at rtems.org
Mon Jul 24 06:36:18 UTC 2023
Module: rtems-central
Branch: master
Commit: 9fa010e375224b6ecca46d2826af113d3c6c913e
Changeset: http://git.rtems.org/rtems-central/commit/?id=9fa010e375224b6ecca46d2826af113d3c6c913e
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Thu May 11 16:09:07 2023 +0200
util: Add argparse and logging helpers
---
generate_membench.py | 18 +++---------------
rtemsspec/tests/test_util.py | 16 +++++++++++++++-
rtemsspec/util.py | 29 +++++++++++++++++++++++++++++
3 files changed, 47 insertions(+), 16 deletions(-)
diff --git a/generate_membench.py b/generate_membench.py
index 737f2aa2..90c2e6e8 100755
--- a/generate_membench.py
+++ b/generate_membench.py
@@ -25,8 +25,6 @@
# 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 sys
import textwrap
@@ -35,7 +33,7 @@ from typing import NamedTuple, List, Optional
from rtemsspec.items import ItemCache
from rtemsspec.membench import generate
from rtemsspec.sphinxcontent import SphinxContent, SphinxMapper
-from rtemsspec.util import load_config
+from rtemsspec.util import create_argument_parser, init_logging, load_config
class _Test(NamedTuple):
@@ -833,20 +831,10 @@ def _post_process(path: str) -> None:
def main() -> None:
""" Generates memory benchmarks. """
- parser = argparse.ArgumentParser()
- parser.add_argument(
- '--log-level',
- choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
- type=str.upper,
- default="ERROR",
- help="log level")
- parser.add_argument('--log-file',
- type=str,
- default=None,
- help="log to this file")
+ parser = create_argument_parser()
parser.add_argument('--post-process', help="post-process the ELF files")
args = parser.parse_args(sys.argv[1:])
- logging.basicConfig(filename=args.log_file, level=args.log_level)
+ init_logging(args)
if args.post_process:
_post_process(args.post_process)
else:
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)
More information about the vc
mailing list