From 17b38e7ec1f3c89d595f9d9bbb2417d57e12b02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20G=C3=BCnther?= <p.gunther@cern.ch> Date: Tue, 7 May 2024 13:54:16 +0200 Subject: [PATCH] add testbench arg for writing encoding keys --- .../MooreScripts/testbench/architecture.py | 25 +++++++++++++++++++ MooreScripts/scripts/testbench.py | 9 +++++++ 2 files changed, 34 insertions(+) diff --git a/MooreScripts/python/MooreScripts/testbench/architecture.py b/MooreScripts/python/MooreScripts/testbench/architecture.py index 6e9adc735..22a725e4f 100644 --- a/MooreScripts/python/MooreScripts/testbench/architecture.py +++ b/MooreScripts/python/MooreScripts/testbench/architecture.py @@ -12,6 +12,7 @@ import os import platform import xml.etree.ElementTree as ET from string import Template +from typing import Any def node_name(): @@ -92,3 +93,27 @@ def instance_args(tasks, replacements): "INSTANCE": instance, })) return result + + +def overwrite_dict_value(data: Any, mapping: dict) -> Any: + """Recursively loop through data and overwrite item's value with corresponding mapping's value. + + Args: + data (Any): Iterable input datra + mapping (dict): Key value pairs to overwrite. + + Returns: + Any: Overwritten data. + """ + if isinstance(data, dict): + return { + k: mapping[k] if k in mapping.keys() else overwrite_dict_value( + v, mapping) + for k, v in data.items() + } + elif isinstance(data, list): + return [overwrite_dict_value(item, mapping) for item in data] + elif isinstance(data, tuple): + return (overwrite_dict_value(item, mapping) for item in data) + else: + return data diff --git a/MooreScripts/scripts/testbench.py b/MooreScripts/scripts/testbench.py index 550d6c4e1..f16ee43c9 100755 --- a/MooreScripts/scripts/testbench.py +++ b/MooreScripts/scripts/testbench.py @@ -117,6 +117,12 @@ parser.add_argument( type=int, help="Number of files to download from the TestFileDB entry", ) +parser.add_argument( + "--write-encoding-keys", + action="store_true", + help= + "Enables writing of the encoding keys by setting env WRITE_ENCODING_KEYS=1.", +) args, unknown_argv = parser.parse_known_args() args.data_dir = args.working_dir / args.data_dir @@ -151,6 +157,9 @@ replacements = { } arch = architecture.read_xml(args.architecture) +if args.write_encoding_keys: + arch = architecture.overwrite_dict_value(arch, + {"WRITE_ENCODING_KEYS": "1"}) task_instance_args = architecture.instance_args(arch, replacements) emulator.check_for_orphans([a["args"][0] for a in task_instance_args]) -- GitLab