summaryrefslogtreecommitdiff
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
parent7aec9588c0203a0d027109bd129e2c230329d9ae (diff)
util: Add argparse and logging helpers
-rwxr-xr-xgenerate_membench.py18
-rw-r--r--rtemsspec/tests/test_util.py16
-rw-r--r--rtemsspec/util.py29
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)