<div dir="ltr">Thanks, Jeremy. I skimmed the changes before submitting them, but I didn't catch this. I'll submit a new version.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 26, 2023 at 11:52 PM Jeremy Spewock <<a href="mailto:jspewock@iol.unh.edu">jspewock@iol.unh.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:arial,sans-serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><div style="font-family:arial,sans-serif" class="gmail_default">I think this is a good idea because of all the weird places we had to break things up with the 88 character cap. I do however also notice that in some cases where these multi-line strings were combined back into one line it would just have two string literals on the same line rather than them being just oen string. I tried to point out everywhere I found this behavoir below as it looks a little awkward in the code.</div><div style="font-family:arial,sans-serif" class="gmail_default"><br></div><div style="font-family:arial,sans-serif" class="gmail_default">It looks good to me otherwise though.<br></div><br></div><div dir="ltr" class="gmail_attr"><br></div><div dir="ltr" class="gmail_attr">On Tue, Sep 26, 2023 at 8:10 AM Juraj Linkeš <juraj.linkes@pantheon.tech> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Reformat to 100 from the previous 88 to unify with C recommendations.<br>
<br>
Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech><br>
---<br>
 dts/framework/config/__init__.py              | 20 ++-----<br>
 dts/framework/dts.py                          | 12 +---<br>
 dts/framework/exception.py                    |  3 +-<br>
 dts/framework/remote_session/__init__.py      |  4 +-<br>
 dts/framework/remote_session/linux_session.py | 39 ++++---------<br>
 dts/framework/remote_session/posix_session.py | 30 +++-------<br>
 .../remote/interactive_remote_session.py      |  7 +--<br>
 .../remote/interactive_shell.py               |  4 +-<br>
 .../remote_session/remote/remote_session.py   |  8 +--<br>
 .../remote_session/remote/ssh_session.py      | 16 ++----<br>
 .../remote_session/remote/testpmd_shell.py    |  8 +--<br>
 dts/framework/settings.py                     |  4 +-<br>
 dts/framework/test_result.py                  | 16 ++----<br>
 dts/framework/test_suite.py                   | 57 +++++--------------<br>
 .../capturing_traffic_generator.py            |  4 +-<br>
 dts/framework/testbed_model/hw/cpu.py         | 20 ++-----<br>
 dts/framework/testbed_model/node.py           |  8 +--<br>
 dts/framework/testbed_model/scapy.py          | 16 ++----<br>
 dts/framework/testbed_model/sut_node.py       | 38 ++++---------<br>
 dts/framework/testbed_model/tg_node.py        |  7 +--<br>
 dts/framework/utils.py                        | 20 ++-----<br>
 dts/pyproject.toml                            |  4 +-<br>
 dts/tests/TestSuite_hello_world.py            |  4 +-<br>
 dts/tests/TestSuite_smoke_tests.py            | 11 +---<br>
 24 files changed, 93 insertions(+), 267 deletions(-)<br>
<br>
diff --git a/dts/framework/config/__init__.py b/dts/framework/config/__init__.py<br>
index cb7e00ba34..9b32cf0532 100644<br>
--- a/dts/framework/config/__init__.py<br>
+++ b/dts/framework/config/__init__.py<br>
@@ -140,9 +140,7 @@ def from_dict(d: dict) -> Union["SutNodeConfiguration", "TGNodeConfiguration"]:<br>
<br>
         if "traffic_generator" in d:<br>
             return TGNodeConfiguration(<br>
-                traffic_generator=TrafficGeneratorConfig.from_dict(<br>
-                    d["traffic_generator"]<br>
-                ),<br>
+                traffic_generator=TrafficGeneratorConfig.from_dict(d["traffic_generator"]),<br>
                 **common_config,<br>
             )<br>
         else:<br>
@@ -249,9 +247,7 @@ def from_dict(<br>
         build_targets: list[BuildTargetConfiguration] = list(<br>
             map(BuildTargetConfiguration.from_dict, d["build_targets"])<br>
         )<br>
-        test_suites: list[TestSuiteConfig] = list(<br>
-            map(TestSuiteConfig.from_dict, d["test_suites"])<br>
-        )<br>
+        test_suites: list[TestSuiteConfig] = list(map(TestSuiteConfig.from_dict, d["test_suites"]))<br>
         sut_name = d["system_under_test_node"]["node_name"]<br>
         skip_smoke_tests = d.get("skip_smoke_tests", False)<br>
         assert sut_name in node_map, f"Unknown SUT {sut_name} in execution {d}"<br>
@@ -268,9 +264,7 @@ def from_dict(<br>
         ), f"Invalid TG configuration {traffic_generator_node}"<br>
<br>
         vdevs = (<br>
-            d["system_under_test_node"]["vdevs"]<br>
-            if "vdevs" in d["system_under_test_node"]<br>
-            else []<br>
+            d["system_under_test_node"]["vdevs"] if "vdevs" in d["system_under_test_node"] else []<br>
         )<br>
         return ExecutionConfiguration(<br>
             build_targets=build_targets,<br>
@@ -299,9 +293,7 @@ def from_dict(d: dict) -> "Configuration":<br>
         assert len(nodes) == len(node_map), "Duplicate node names are not allowed"<br>
<br>
         executions: list[ExecutionConfiguration] = list(<br>
-            map(<br>
-                ExecutionConfiguration.from_dict, d["executions"], [node_map for _ in d]<br>
-            )<br>
+            map(ExecutionConfiguration.from_dict, d["executions"], [node_map for _ in d])<br>
         )<br>
<br>
         return Configuration(executions=executions)<br>
@@ -315,9 +307,7 @@ def load_config() -> Configuration:<br>
     with open(SETTINGS.config_file_path, "r") as f:<br>
         config_data = yaml.safe_load(f)<br>
<br>
-    schema_path = os.path.join(<br>
-        pathlib.Path(__file__).parent.resolve(), "conf_yaml_schema.json"<br>
-    )<br>
+    schema_path = os.path.join(pathlib.Path(__file__).parent.resolve(), "conf_yaml_schema.json")<br>
<br>
     with open(schema_path, "r") as f:<br>
         schema = json.load(f)<br>
diff --git a/dts/framework/dts.py b/dts/framework/dts.py<br>
index f773f0c38d..e2aada5a23 100644<br>
--- a/dts/framework/dts.py<br>
+++ b/dts/framework/dts.py<br>
@@ -92,9 +92,7 @@ def _run_execution(<br>
     Run the given execution. This involves running the execution setup as well as<br>
     running all build targets in the given execution.<br>
     """<br>
-    <a href="http://dts_logger.info" rel="noreferrer" target="_blank">dts_logger.info</a>(<br>
-        f"Running execution with SUT '{<a href="http://execution.system_under_test_node.name" rel="noreferrer" target="_blank">execution.system_under_test_node.name</a>}'."<br>
-    )<br>
+    <a href="http://dts_logger.info" rel="noreferrer" target="_blank">dts_logger.info</a>(f"Running execution with SUT '{<a href="http://execution.system_under_test_node.name" rel="noreferrer" target="_blank">execution.system_under_test_node.name</a>}'.")<br>
     execution_result = result.add_execution(sut_node.config)<br>
     execution_result.add_sut_info(sut_node.node_info)<br>
<br>
@@ -107,9 +105,7 @@ def _run_execution(<br>
<br>
     else:<br>
         for build_target in execution.build_targets:<br>
-            _run_build_target(<br>
-                sut_node, tg_node, build_target, execution, execution_result<br>
-            )<br>
+            _run_build_target(sut_node, tg_node, build_target, execution, execution_result)<br>
<br>
     finally:<br>
         try:<br>
@@ -170,9 +166,7 @@ def _run_all_suites(<br>
         execution.test_suites[:0] = [TestSuiteConfig.from_dict("smoke_tests")]<br>
     for test_suite_config in execution.test_suites:<br>
         try:<br>
-            _run_single_suite(<br>
-                sut_node, tg_node, execution, build_target_result, test_suite_config<br>
-            )<br>
+            _run_single_suite(sut_node, tg_node, execution, build_target_result, test_suite_config)<br>
         except BlockingTestSuiteError as e:<br>
             dts_logger.exception(<br>
                 f"An error occurred within {test_suite_config.test_suite}. "<br>
diff --git a/dts/framework/exception.py b/dts/framework/exception.py<br>
index 001a5a5496..59cf9fd12a 100644<br>
--- a/dts/framework/exception.py<br>
+++ b/dts/framework/exception.py<br>
@@ -117,8 +117,7 @@ def __init__(self, command: str, command_return_code: int):<br>
<br>
     def __str__(self) -> str:<br>
         return (<br>
-            f"Command {self.command} returned a non-zero exit code: "<br>
-            f"{self.command_return_code}"<br>
+            <span class="gmail_default" style="font-family:arial,sans-serif"></span>f"Command {self.command} returned a non-zero exit code: " f"{self.command_return_code}"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">If you modify this to be on the same line you actually don't need the separate string on this line. The line could instead be the following:</div><div style="font-family:arial,sans-serif" class="gmail_default"><br></div><div style="font-family:arial,sans-serif" class="gmail_default"><span class="gmail_default" style="font-family:arial,sans-serif"></span>f"Command {self.command} returned a non-zero exit code: {self.command_return_code}"</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
         )<br>
<br>
<br>
diff --git a/dts/framework/remote_session/__init__.py b/dts/framework/remote_session/__init__.py<br>
index 00b6d1f03a..6124417bd7 100644<br>
--- a/dts/framework/remote_session/__init__.py<br>
+++ b/dts/framework/remote_session/__init__.py<br>
@@ -30,9 +30,7 @@<br>
 )<br>
<br>
<br>
-def create_session(<br>
-    node_config: NodeConfiguration, name: str, logger: DTSLOG<br>
-) -> OSSession:<br>
+def create_session(node_config: NodeConfiguration, name: str, logger: DTSLOG) -> OSSession:<br>
     match node_config.os:<br>
         case OS.linux:<br>
             return LinuxSession(node_config, name, logger)<br>
diff --git a/dts/framework/remote_session/linux_session.py b/dts/framework/remote_session/linux_session.py<br>
index a3f1a6bf3b..aa76e25436 100644<br>
--- a/dts/framework/remote_session/linux_session.py<br>
+++ b/dts/framework/remote_session/linux_session.py<br>
@@ -82,9 +82,7 @@ def setup_hugepages(self, hugepage_amount: int, force_first_numa: bool) -> None:<br>
         self._mount_huge_pages()<br>
<br>
     def _get_hugepage_size(self) -> int:<br>
-        hugepage_size = self.send_command(<br>
-            "awk '/Hugepagesize/ {print $2}' /proc/meminfo"<br>
-        ).stdout<br>
+        hugepage_size = self.send_command("awk '/Hugepagesize/ {print $2}' /proc/meminfo").stdout<br>
         return int(hugepage_size)<br>
<br>
     def _get_hugepages_total(self) -> int:<br>
@@ -120,13 +118,9 @@ def _supports_numa(self) -> bool:<br>
         # there's no reason to do any numa specific configuration)<br>
         return len(self._numa_nodes) > 1<br>
<br>
-    def _configure_huge_pages(<br>
-        self, amount: int, size: int, force_first_numa: bool<br>
-    ) -> None:<br>
+    def _configure_huge_pages(self, amount: int, size: int, force_first_numa: bool) -> None:<br>
         self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>("Configuring Hugepages.")<br>
-        hugepage_config_path = (<br>
-            f"/sys/kernel/mm/hugepages/hugepages-{size}kB/nr_hugepages"<br>
-        )<br>
+        hugepage_config_path = f"/sys/kernel/mm/hugepages/hugepages-{size}kB/nr_hugepages"<br>
         if force_first_numa and self._supports_numa():<br>
             # clear non-numa hugepages<br>
             self.send_command(f"echo 0 | tee {hugepage_config_path}", privileged=True)<br>
@@ -135,24 +129,18 @@ def _configure_huge_pages(<br>
                 f"/hugepages-{size}kB/nr_hugepages"<br>
             )<br>
<br>
-        self.send_command(<br>
-            f"echo {amount} | tee {hugepage_config_path}", privileged=True<br>
-        )<br>
+        self.send_command(f"echo {amount} | tee {hugepage_config_path}", privileged=True)<br>
<br>
     def update_ports(self, ports: list[Port]) -> None:<br>
         self._logger.debug("Gathering port info.")<br>
         for port in ports:<br>
-            assert (<br>
-                port.node == <a href="http://self.name" rel="noreferrer" target="_blank">self.name</a><br>
-            ), "Attempted to gather port info on the wrong node"<br>
+            assert port.node == <a href="http://self.name" rel="noreferrer" target="_blank">self.name</a>, "Attempted to gather port info on the wrong node"<br>
<br>
         port_info_list = self._get_lshw_info()<br>
         for port in ports:<br>
             for port_info in port_info_list:<br>
                 if f"pci@{port.pci}" == port_info.get("businfo"):<br>
-                    self._update_port_attr(<br>
-                        port, port_info.get("logicalname"), "logical_name"<br>
-                    )<br>
+                    self._update_port_attr(port, port_info.get("logicalname"), "logical_name")<br>
                     self._update_port_attr(port, port_info.get("serial"), "mac_address")<br>
                     port_info_list.remove(port_info)<br>
                     break<br>
@@ -163,25 +151,18 @@ def _get_lshw_info(self) -> list[LshwOutput]:<br>
         output = self.send_command("lshw -quiet -json -C network", verify=True)<br>
         return json.loads(output.stdout)<br>
<br>
-    def _update_port_attr(<br>
-        self, port: Port, attr_value: str | None, attr_name: str<br>
-    ) -> None:<br>
+    def _update_port_attr(self, port: Port, attr_value: str | None, attr_name: str) -> None:<br>
         if attr_value:<br>
             setattr(port, attr_name, attr_value)<br>
-            self._logger.debug(<br>
-                f"Found '{attr_name}' of port {port.pci}: '{attr_value}'."<br>
-            )<br>
+            self._logger.debug(f"Found '{attr_name}' of port {port.pci}: '{attr_value}'.")<br>
         else:<br>
             self._logger.warning(<br>
-                f"Attempted to get '{attr_name}' of port {port.pci}, "<br>
-                f"but it doesn't exist."<br>
+                f"Attempted to get '{attr_name}' of port {port.pci}, " f"but it doesn't exist."<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">This is another case where the two different strings aren't needed<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
             )<br>
<br>
     def configure_port_state(self, port: Port, enable: bool) -> None:<br>
         state = "up" if enable else "down"<br>
-        self.send_command(<br>
-            f"ip link set dev {port.logical_name} {state}", privileged=True<br>
-        )<br>
+        self.send_command(f"ip link set dev {port.logical_name} {state}", privileged=True)<br>
<br>
     def configure_port_ip_address(<br>
         self,<br>
diff --git a/dts/framework/remote_session/posix_session.py b/dts/framework/remote_session/posix_session.py<br>
index 5da0516e05..eb59252dd1 100644<br>
--- a/dts/framework/remote_session/posix_session.py<br>
+++ b/dts/framework/remote_session/posix_session.py<br>
@@ -94,8 +94,7 @@ def extract_remote_tarball(<br>
         expected_dir: str | PurePath | None = None,<br>
     ) -> None:<br>
         self.send_command(<br>
-            f"tar xfm {remote_tarball_path} "<br>
-            f"-C {PurePosixPath(remote_tarball_path).parent}",<br>
+            f"tar xfm {remote_tarball_path} " f"-C {PurePosixPath(remote_tarball_path).parent}",<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string here as well.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
             60,<br>
         )<br>
         if expected_dir:<br>
@@ -125,8 +124,7 @@ def build_dpdk(<br>
                 self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>("Configuring DPDK build from scratch.")<br>
                 self.remove_remote_dir(remote_dpdk_build_dir)<br>
                 self.send_command(<br>
-                    f"meson setup "<br>
-                    f"{meson_args} {remote_dpdk_dir} {remote_dpdk_build_dir}",<br>
+                    f"meson setup " f"{meson_args} {remote_dpdk_dir} {remote_dpdk_build_dir}",<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                     timeout,<br>
                     verify=True,<br>
                     env=env_vars,<br>
@@ -140,9 +138,7 @@ def build_dpdk(<br>
             raise DPDKBuildError(f"DPDK build failed when doing '{e.command}'.")<br>
<br>
     def get_dpdk_version(self, build_dir: str | PurePath) -> str:<br>
-        out = self.send_command(<br>
-            f"cat {self.join_remote_path(build_dir, 'VERSION')}", verify=True<br>
-        )<br>
+        out = self.send_command(f"cat {self.join_remote_path(build_dir, 'VERSION')}", verify=True)<br>
         return out.stdout<br>
<br>
     def kill_cleanup_dpdk_apps(self, dpdk_prefix_list: Iterable[str]) -> None:<br>
@@ -156,9 +152,7 @@ def kill_cleanup_dpdk_apps(self, dpdk_prefix_list: Iterable[str]) -> None:<br>
             self._check_dpdk_hugepages(dpdk_runtime_dirs)<br>
             self._remove_dpdk_runtime_dirs(dpdk_runtime_dirs)<br>
<br>
-    def _get_dpdk_runtime_dirs(<br>
-        self, dpdk_prefix_list: Iterable[str]<br>
-    ) -> list[PurePosixPath]:<br>
+    def _get_dpdk_runtime_dirs(self, dpdk_prefix_list: Iterable[str]) -> list[PurePosixPath]:<br>
         prefix = PurePosixPath("/var", "run", "dpdk")<br>
         if not dpdk_prefix_list:<br>
             remote_prefixes = self._list_remote_dirs(prefix)<br>
@@ -174,9 +168,7 @@ def _list_remote_dirs(self, remote_path: str | PurePath) -> list[str] | None:<br>
         Return a list of directories of the remote_dir.<br>
         If remote_path doesn't exist, return None.<br>
         """<br>
-        out = self.send_command(<br>
-            f"ls -l {remote_path} | awk '/^d/ {{print $NF}}'"<br>
-        ).stdout<br>
+        out = self.send_command(f"ls -l {remote_path} | awk '/^d/ {{print $NF}}'").stdout<br>
         if "No such file or directory" in out:<br>
             return None<br>
         else:<br>
@@ -200,9 +192,7 @@ def _remote_files_exists(self, remote_path: PurePath) -> bool:<br>
         result = self.send_command(f"test -e {remote_path}")<br>
         return not result.return_code<br>
<br>
-    def _check_dpdk_hugepages(<br>
-        self, dpdk_runtime_dirs: Iterable[str | PurePath]<br>
-    ) -> None:<br>
+    def _check_dpdk_hugepages(self, dpdk_runtime_dirs: Iterable[str | PurePath]) -> None:<br>
         for dpdk_runtime_dir in dpdk_runtime_dirs:<br>
             hugepage_info = PurePosixPath(dpdk_runtime_dir, "hugepage_info")<br>
             if self._remote_files_exists(hugepage_info):<br>
@@ -213,9 +203,7 @@ def _check_dpdk_hugepages(<br>
                     self._logger.warning(out)<br>
                     self._logger.warning("*******************************************")<br>
<br>
-    def _remove_dpdk_runtime_dirs(<br>
-        self, dpdk_runtime_dirs: Iterable[str | PurePath]<br>
-    ) -> None:<br>
+    def _remove_dpdk_runtime_dirs(self, dpdk_runtime_dirs: Iterable[str | PurePath]) -> None:<br>
         for dpdk_runtime_dir in dpdk_runtime_dirs:<br>
             self.remove_remote_dir(dpdk_runtime_dir)<br>
<br>
@@ -245,6 +233,4 @@ def get_node_info(self) -> NodeInfo:<br>
             SETTINGS.timeout,<br>
         ).stdout.split("\n")<br>
         kernel_version = self.send_command("uname -r", SETTINGS.timeout).stdout<br>
-        return NodeInfo(<br>
-            os_release_info[0].strip(), os_release_info[1].strip(), kernel_version<br>
-        )<br>
+        return NodeInfo(os_release_info[0].strip(), os_release_info[1].strip(), kernel_version)<br>
diff --git a/dts/framework/remote_session/remote/interactive_remote_session.py b/dts/framework/remote_session/remote/interactive_remote_session.py<br>
index 9085a668e8..42c99b2525 100644<br>
--- a/dts/framework/remote_session/remote/interactive_remote_session.py<br>
+++ b/dts/framework/remote_session/remote/interactive_remote_session.py<br>
@@ -73,9 +73,7 @@ def __init__(self, node_config: NodeConfiguration, _logger: DTSLOG) -> None:<br>
             f"Initializing interactive connection for {self.username}@{self.hostname}"<br>
         )<br>
         self._connect()<br>
-        self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(<br>
-            f"Interactive connection successful for {self.username}@{self.hostname}"<br>
-        )<br>
+        self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(f"Interactive connection successful for {self.username}@{self.hostname}")<br>
<br>
     def _connect(self) -> None:<br>
         """Establish a connection to the node.<br>
@@ -108,8 +106,7 @@ def _connect(self) -> None:<br>
                 self._logger.debug(traceback.format_exc())<br>
                 self._logger.warning(e)<br>
                 self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(<br>
-                    "Retrying interactive session connection: "<br>
-                    f"retry number {retry_attempt +1}"<br>
+                    "Retrying interactive session connection: " f"retry number {retry_attempt +1}"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Here you can get rid of the double string, but you would have to make sure to add the f to the start to make the whole thing and f-string.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                 )<br>
             else:<br>
                 break<br>
diff --git a/dts/framework/remote_session/remote/interactive_shell.py b/dts/framework/remote_session/remote/interactive_shell.py<br>
index c24376b2a8..4db19fb9b3 100644<br>
--- a/dts/framework/remote_session/remote/interactive_shell.py<br>
+++ b/dts/framework/remote_session/remote/interactive_shell.py<br>
@@ -85,9 +85,7 @@ def __init__(<br>
         self._app_args = app_args<br>
         self._start_application(get_privileged_command)<br>
<br>
-    def _start_application(<br>
-        self, get_privileged_command: Callable[[str], str] | None<br>
-    ) -> None:<br>
+    def _start_application(self, get_privileged_command: Callable[[str], str] | None) -> None:<br>
         """Starts a new interactive application based on the path to the app.<br>
<br>
         This method is often overridden by subclasses as their process for<br>
diff --git a/dts/framework/remote_session/remote/remote_session.py b/dts/framework/remote_session/remote/remote_session.py<br>
index 0647d93de4..719f7d1ef7 100644<br>
--- a/dts/framework/remote_session/remote/remote_session.py<br>
+++ b/dts/framework/remote_session/remote/remote_session.py<br>
@@ -96,9 +96,7 @@ def send_command(<br>
         If verify is True, check the return code of the executed command<br>
         and raise a RemoteCommandExecutionError if the command failed.<br>
         """<br>
-        self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(<br>
-            f"Sending: '{command}'" + (f" with env vars: '{env}'" if env else "")<br>
-        )<br>
+        self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(f"Sending: '{command}'" + (f" with env vars: '{env}'" if env else ""))<br>
         result = self._send_command(command, timeout, env)<br>
         if verify and result.return_code:<br>
             self._logger.debug(<br>
@@ -112,9 +110,7 @@ def send_command(<br>
         return result<br>
<br>
     @abstractmethod<br>
-    def _send_command(<br>
-        self, command: str, timeout: float, env: dict | None<br>
-    ) -> CommandResult:<br>
+    def _send_command(self, command: str, timeout: float, env: dict | None) -> CommandResult:<br>
         """<br>
         Use the underlying protocol to execute the command using optional env vars<br>
         and return CommandResult.<br>
diff --git a/dts/framework/remote_session/remote/ssh_session.py b/dts/framework/remote_session/remote/ssh_session.py<br>
index 8d127f1601..1a7ee649ab 100644<br>
--- a/dts/framework/remote_session/remote/ssh_session.py<br>
+++ b/dts/framework/remote_session/remote/ssh_session.py<br>
@@ -80,9 +80,7 @@ def _connect(self) -> None:<br>
                 if error not in errors:<br>
                     errors.append(error)<br>
<br>
-                self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(<br>
-                    f"Retrying connection: retry number {retry_attempt + 1}."<br>
-                )<br>
+                self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(f"Retrying connection: retry number {retry_attempt + 1}.")<br>
<br>
             else:<br>
                 break<br>
@@ -92,9 +90,7 @@ def _connect(self) -> None:<br>
     def is_alive(self) -> bool:<br>
         return self.session.is_connected<br>
<br>
-    def _send_command(<br>
-        self, command: str, timeout: float, env: dict | None<br>
-    ) -> CommandResult:<br>
+    def _send_command(self, command: str, timeout: float, env: dict | None) -> CommandResult:<br>
         """Send a command and return the result of the execution.<br>
<br>
         Args:<br>
@@ -107,9 +103,7 @@ def _send_command(<br>
             SSHTimeoutError: The command execution timed out.<br>
         """<br>
         try:<br>
-            output = self.session.run(<br>
-                command, env=env, warn=True, hide=True, timeout=timeout<br>
-            )<br>
+            output = self.session.run(command, env=env, warn=True, hide=True, timeout=timeout)<br>
<br>
         except (UnexpectedExit, ThreadException) as e:<br>
             self._logger.exception(e)<br>
@@ -119,9 +113,7 @@ def _send_command(<br>
             self._logger.exception(e)<br>
             raise SSHTimeoutError(command, e.result.stderr) from e<br>
<br>
-        return CommandResult(<br>
-            <a href="http://self.name" rel="noreferrer" target="_blank">self.name</a>, command, output.stdout, output.stderr, output.return_code<br>
-        )<br>
+        return CommandResult(<a href="http://self.name" rel="noreferrer" target="_blank">self.name</a>, command, output.stdout, output.stderr, output.return_code)<br>
<br>
     def copy_from(<br>
         self,<br>
diff --git a/dts/framework/remote_session/remote/testpmd_shell.py b/dts/framework/remote_session/remote/testpmd_shell.py<br>
index 1455b5a199..08ac311016 100644<br>
--- a/dts/framework/remote_session/remote/testpmd_shell.py<br>
+++ b/dts/framework/remote_session/remote/testpmd_shell.py<br>
@@ -21,13 +21,9 @@ class TestPmdShell(InteractiveShell):<br>
     path: PurePath = PurePath("app", "dpdk-testpmd")<br>
     dpdk_app: bool = True<br>
     _default_prompt: str = "testpmd>"<br>
-    _command_extra_chars: str = (<br>
-        "\n"  # We want to append an extra newline to every command<br>
-    )<br>
+    _command_extra_chars: str = "\n"  # We want to append an extra newline to every command<br>
<br>
-    def _start_application(<br>
-        self, get_privileged_command: Callable[[str], str] | None<br>
-    ) -> None:<br>
+    def _start_application(self, get_privileged_command: Callable[[str], str] | None) -> None:<br>
         """See "_start_application" in InteractiveShell."""<br>
         self._app_args += " -- -i"<br>
         super()._start_application(get_privileged_command)<br>
diff --git a/dts/framework/settings.py b/dts/framework/settings.py<br>
index cfa39d011b..aad444e99c 100644<br>
--- a/dts/framework/settings.py<br>
+++ b/dts/framework/settings.py<br>
@@ -170,9 +170,7 @@ def _get_settings() -> _Settings:<br>
         timeout=parsed_args.timeout,<br>
         verbose=(parsed_args.verbose == "Y"),<br>
         skip_setup=(parsed_args.skip_setup == "Y"),<br>
-        dpdk_tarball_path=Path(<br>
-            DPDKGitTarball(parsed_args.tarball, parsed_args.output_dir)<br>
-        )<br>
+        dpdk_tarball_path=Path(DPDKGitTarball(parsed_args.tarball, parsed_args.output_dir))<br>
         if not os.path.exists(parsed_args.tarball)<br>
         else Path(parsed_args.tarball),<br>
         compile_timeout=parsed_args.compile_timeout,<br>
diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py<br>
index f0fbe80f6f..4c2e7e2418 100644<br>
--- a/dts/framework/test_result.py<br>
+++ b/dts/framework/test_result.py<br>
@@ -83,9 +83,7 @@ def __iadd__(self, other: Result) -> "Statistics":<br>
         """<br>
         self[<a href="http://other.name" rel="noreferrer" target="_blank">other.name</a>] += 1<br>
         self["PASS RATE"] = (<br>
-            float(self[<a href="http://Result.PASS.name" rel="noreferrer" target="_blank">Result.PASS.name</a>])<br>
-            * 100<br>
-            / sum(self[<a href="http://result.name" rel="noreferrer" target="_blank">result.name</a>] for result in Result)<br>
+            float(self[<a href="http://Result.PASS.name" rel="noreferrer" target="_blank">Result.PASS.name</a>]) * 100 / sum(self[<a href="http://result.name" rel="noreferrer" target="_blank">result.name</a>] for result in Result)<br>
         )<br>
         return self<br>
<br>
@@ -135,9 +133,7 @@ def _get_setup_teardown_errors(self) -> list[Exception]:<br>
<br>
     def _get_inner_errors(self) -> list[Exception]:<br>
         return [<br>
-            error<br>
-            for inner_result in self._inner_results<br>
-            for error in inner_result.get_errors()<br>
+            error for inner_result in self._inner_results for error in inner_result.get_errors()<br>
         ]<br>
<br>
     def get_errors(self) -> list[Exception]:<br>
@@ -174,9 +170,7 @@ def add_stats(self, statistics: Statistics) -> None:<br>
         statistics += self.result<br>
<br>
     def __bool__(self) -> bool:<br>
-        return (<br>
-            bool(self.setup_result) and bool(self.teardown_result) and bool(self.result)<br>
-        )<br>
+        return bool(self.setup_result) and bool(self.teardown_result) and bool(self.result)<br>
<br>
<br>
 class TestSuiteResult(BaseResult):<br>
@@ -247,9 +241,7 @@ def __init__(self, sut_node: NodeConfiguration):<br>
         super(ExecutionResult, self).__init__()<br>
         self.sut_node = sut_node<br>
<br>
-    def add_build_target(<br>
-        self, build_target: BuildTargetConfiguration<br>
-    ) -> BuildTargetResult:<br>
+    def add_build_target(self, build_target: BuildTargetConfiguration) -> BuildTargetResult:<br>
         build_target_result = BuildTargetResult(build_target)<br>
         self._inner_results.append(build_target_result)<br>
         return build_target_result<br>
diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py<br>
index 3b890c0451..46d3de4944 100644<br>
--- a/dts/framework/test_suite.py<br>
+++ b/dts/framework/test_suite.py<br>
@@ -102,9 +102,7 @@ def _process_links(self) -> None:<br>
                     tg_port.peer,<br>
                     tg_port.identifier,<br>
                 ):<br>
-                    self._port_links.append(<br>
-                        PortLink(sut_port=sut_port, tg_port=tg_port)<br>
-                    )<br>
+                    self._port_links.append(PortLink(sut_port=sut_port, tg_port=tg_port))<br>
<br>
     def set_up_suite(self) -> None:<br>
         """<br>
@@ -151,9 +149,7 @@ def configure_testbed_ipv4(self, restore: bool = False) -> None:<br>
     def _configure_ipv4_forwarding(self, enable: bool) -> None:<br>
         self.sut_node.configure_ipv4_forwarding(enable)<br>
<br>
-    def send_packet_and_capture(<br>
-        self, packet: Packet, duration: float = 1<br>
-    ) -> list[Packet]:<br>
+    def send_packet_and_capture(self, packet: Packet, duration: float = 1) -> list[Packet]:<br>
         """<br>
         Send a packet through the appropriate interface and<br>
         receive on the appropriate interface.<br>
@@ -202,21 +198,15 @@ def verify(self, condition: bool, failure_description: str) -> None:<br>
             self._fail_test_case_verify(failure_description)<br>
<br>
     def _fail_test_case_verify(self, failure_description: str) -> None:<br>
-        self._logger.debug(<br>
-            "A test case failed, showing the last 10 commands executed on SUT:"<br>
-        )<br>
+        self._logger.debug("A test case failed, showing the last 10 commands executed on SUT:")<br>
         for command_res in self.sut_node.main_session.remote_session.history[-10:]:<br>
             self._logger.debug(command_res.command)<br>
-        self._logger.debug(<br>
-            "A test case failed, showing the last 10 commands executed on TG:"<br>
-        )<br>
+        self._logger.debug("A test case failed, showing the last 10 commands executed on TG:")<br>
         for command_res in self.tg_node.main_session.remote_session.history[-10:]:<br>
             self._logger.debug(command_res.command)<br>
         raise TestCaseVerifyError(failure_description)<br>
<br>
-    def verify_packets(<br>
-        self, expected_packet: Packet, received_packets: list[Packet]<br>
-    ) -> None:<br>
+    def verify_packets(self, expected_packet: Packet, received_packets: list[Packet]) -> None:<br>
         for received_packet in received_packets:<br>
             if self._compare_packets(expected_packet, received_packet):<br>
                 break<br>
@@ -225,17 +215,11 @@ def verify_packets(<br>
                 f"The expected packet {get_packet_summaries(expected_packet)} "<br>
                 f"not found among received {get_packet_summaries(received_packets)}"<br>
             )<br>
-            self._fail_test_case_verify(<br>
-                "An expected packet not found among received packets."<br>
-            )<br>
+            self._fail_test_case_verify("An expected packet not found among received packets.")<br>
<br>
-    def _compare_packets(<br>
-        self, expected_packet: Packet, received_packet: Packet<br>
-    ) -> bool:<br>
+    def _compare_packets(self, expected_packet: Packet, received_packet: Packet) -> bool:<br>
         self._logger.debug(<br>
-            "Comparing packets: \n"<br>
-            f"{expected_packet.summary()}\n"<br>
-            f"{received_packet.summary()}"<br>
+            "Comparing packets: \n" f"{expected_packet.summary()}\n" f"{received_packet.summary()}"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Same situation as above where you would want to make sure to put the f at the start.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
         )<br>
<br>
         l3 = IP in expected_packet.layers()<br>
@@ -262,14 +246,10 @@ def _compare_packets(<br>
             expected_payload = expected_payload.payload<br>
<br>
         if expected_payload:<br>
-            self._logger.debug(<br>
-                f"The expected packet did not contain {expected_payload}."<br>
-            )<br>
+            self._logger.debug(f"The expected packet did not contain {expected_payload}.")<br>
             return False<br>
         if received_payload and received_payload.__class__ != Padding:<br>
-            self._logger.debug(<br>
-                "The received payload had extra layers which were not padding."<br>
-            )<br>
+            self._logger.debug("The received payload had extra layers which were not padding.")<br>
             return False<br>
         return True<br>
<br>
@@ -296,10 +276,7 @@ def _verify_l2_frame(self, received_packet: Ether, l3: bool) -> bool:<br>
<br>
     def _verify_l3_packet(self, received_packet: IP, expected_packet: IP) -> bool:<br>
         self._logger.debug("Looking at the IP layer.")<br>
-        if (<br>
-            received_packet.src != expected_packet.src<br>
-            or received_packet.dst != expected_packet.dst<br>
-        ):<br>
+        if received_packet.src != expected_packet.src or received_packet.dst != expected_packet.dst:<br>
             return False<br>
         return True<br>
<br>
@@ -373,9 +350,7 @@ def _get_test_cases(self, test_case_regex: str) -> list[MethodType]:<br>
             if self._should_be_executed(test_case_name, test_case_regex):<br>
                 filtered_test_cases.append(test_case)<br>
         cases_str = ", ".join((x.__name__ for x in filtered_test_cases))<br>
-        self._logger.debug(<br>
-            f"Found test cases '{cases_str}' in {self.__class__.__name__}."<br>
-        )<br>
+        self._logger.debug(f"Found test cases '{cases_str}' in {self.__class__.__name__}.")<br>
         return filtered_test_cases<br>
<br>
     def _should_be_executed(self, test_case_name: str, test_case_regex: str) -> bool:<br>
@@ -445,9 +420,7 @@ def _execute_test_case(<br>
             self._logger.exception(f"Test case execution ERROR: {test_case_name}")<br>
             test_case_result.update(Result.ERROR, e)<br>
         except KeyboardInterrupt:<br>
-            self._logger.error(<br>
-                f"Test case execution INTERRUPTED by user: {test_case_name}"<br>
-            )<br>
+            self._logger.error(f"Test case execution INTERRUPTED by user: {test_case_name}")<br>
             test_case_result.update(Result.SKIP)<br>
             raise KeyboardInterrupt("Stop DTS")<br>
<br>
@@ -464,9 +437,7 @@ def is_test_suite(object) -> bool:<br>
     try:<br>
         testcase_module = importlib.import_module(testsuite_module_path)<br>
     except ModuleNotFoundError as e:<br>
-        raise ConfigurationError(<br>
-            f"Test suite '{testsuite_module_path}' not found."<br>
-        ) from e<br>
+        raise ConfigurationError(f"Test suite '{testsuite_module_path}' not found.") from e<br>
     return [<br>
         test_suite_class<br>
         for _, test_suite_class in inspect.getmembers(testcase_module, is_test_suite)<br>
diff --git a/dts/framework/testbed_model/capturing_traffic_generator.py b/dts/framework/testbed_model/capturing_traffic_generator.py<br>
index ab98987f8e..48d019ab21 100644<br>
--- a/dts/framework/testbed_model/capturing_traffic_generator.py<br>
+++ b/dts/framework/testbed_model/capturing_traffic_generator.py<br>
@@ -110,9 +110,7 @@ def send_packets_and_capture(<br>
             duration,<br>
         )<br>
<br>
-        self._logger.debug(<br>
-            f"Received packets: {get_packet_summaries(received_packets)}"<br>
-        )<br>
+        self._logger.debug(f"Received packets: {get_packet_summaries(received_packets)}")<br>
         self._write_capture_from_packets(capture_name, received_packets)<br>
         return received_packets<br>
<br>
diff --git a/dts/framework/testbed_model/hw/cpu.py b/dts/framework/testbed_model/hw/cpu.py<br>
index d1918a12dc..cbc5fe7fff 100644<br>
--- a/dts/framework/testbed_model/hw/cpu.py<br>
+++ b/dts/framework/testbed_model/hw/cpu.py<br>
@@ -54,9 +54,7 @@ def __init__(self, lcore_list: list[int] | list[str] | list[LogicalCore] | str):<br>
<br>
         # the input lcores may not be sorted<br>
         self._lcore_list.sort()<br>
-        self._lcore_str = (<br>
-            f'{",".join(self._get_consecutive_lcores_range(self._lcore_list))}'<br>
-        )<br>
+        self._lcore_str = f'{",".join(self._get_consecutive_lcores_range(self._lcore_list))}'<br>
<br>
     @property<br>
     def lcore_list(self) -> list[int]:<br>
@@ -70,15 +68,11 @@ def _get_consecutive_lcores_range(self, lcore_ids_list: list[int]) -> list[str]:<br>
                 segment.append(lcore_id)<br>
             else:<br>
                 formatted_core_list.append(<br>
-                    f"{segment[0]}-{segment[-1]}"<br>
-                    if len(segment) > 1<br>
-                    else f"{segment[0]}"<br>
+                    f"{segment[0]}-{segment[-1]}" if len(segment) > 1 else f"{segment[0]}"<br>
                 )<br>
                 current_core_index = lcore_ids_list.index(lcore_id)<br>
                 formatted_core_list.extend(<br>
-                    self._get_consecutive_lcores_range(<br>
-                        lcore_ids_list[current_core_index:]<br>
-                    )<br>
+                    self._get_consecutive_lcores_range(lcore_ids_list[current_core_index:])<br>
                 )<br>
                 segment.clear()<br>
                 break<br>
@@ -125,9 +119,7 @@ def __init__(<br>
         self._filter_specifier = filter_specifier<br>
<br>
         # sorting by core is needed in case hyperthreading is enabled<br>
-        self._lcores_to_filter = sorted(<br>
-            lcore_list, key=lambda x: x.core, reverse=not ascending<br>
-        )<br>
+        self._lcores_to_filter = sorted(lcore_list, key=lambda x: x.core, reverse=not ascending)<br>
         self.filter()<br>
<br>
     @abstractmethod<br>
@@ -220,9 +212,7 @@ def _filter_cores_from_socket(<br>
                 else:<br>
                     # we have enough lcores per this core<br>
                     continue<br>
-            elif self._filter_specifier.cores_per_socket > len(<br>
-                lcore_count_per_core_map<br>
-            ):<br>
+            elif self._filter_specifier.cores_per_socket > len(lcore_count_per_core_map):<br>
                 # only add cores if we need more<br>
                 lcore_count_per_core_map[lcore.core] = 1<br>
                 filtered_lcores.append(lcore)<br>
diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py<br>
index fc01e0bf8e..ef700d8114 100644<br>
--- a/dts/framework/testbed_model/node.py<br>
+++ b/dts/framework/testbed_model/node.py<br>
@@ -103,18 +103,14 @@ def _tear_down_execution(self) -> None:<br>
         is not decorated so that the derived class doesn't have to use the decorator.<br>
         """<br>
<br>
-    def set_up_build_target(<br>
-        self, build_target_config: BuildTargetConfiguration<br>
-    ) -> None:<br>
+    def set_up_build_target(self, build_target_config: BuildTargetConfiguration) -> None:<br>
         """<br>
         Perform the build target setup that will be done for each build target<br>
         tested on this node.<br>
         """<br>
         self._set_up_build_target(build_target_config)<br>
<br>
-    def _set_up_build_target(<br>
-        self, build_target_config: BuildTargetConfiguration<br>
-    ) -> None:<br>
+    def _set_up_build_target(self, build_target_config: BuildTargetConfiguration) -> None:<br>
         """<br>
         This method exists to be optionally overwritten by derived classes and<br>
         is not decorated so that the derived class doesn't have to use the decorator.<br>
diff --git a/dts/framework/testbed_model/scapy.py b/dts/framework/testbed_model/scapy.py<br>
index af0d4dbb25..7948424951 100644<br>
--- a/dts/framework/testbed_model/scapy.py<br>
+++ b/dts/framework/testbed_model/scapy.py<br>
@@ -96,9 +96,7 @@ def scapy_send_packets_and_capture(<br>
     return [scapy_packet.build() for scapy_packet in sniffer.stop(join=True)]<br>
<br>
<br>
-def scapy_send_packets(<br>
-    xmlrpc_packets: list[xmlrpc.client.Binary], send_iface: str<br>
-) -> None:<br>
+def scapy_send_packets(xmlrpc_packets: list[xmlrpc.client.Binary], send_iface: str) -> None:<br>
     """RPC function to send packets.<br>
<br>
     The function is meant to be executed on the remote TG node.<br>
@@ -197,9 +195,7 @@ class ScapyTrafficGenerator(CapturingTrafficGenerator):<br>
     def __init__(self, tg_node: TGNode, config: ScapyTrafficGeneratorConfig):<br>
         self._config = config<br>
         self._tg_node = tg_node<br>
-        self._logger = getLogger(<br>
-            f"{self._<a href="http://tg_node.name" rel="noreferrer" target="_blank">tg_node.name</a>} {self._config.traffic_generator_type}"<br>
-        )<br>
+        self._logger = getLogger(f"{self._<a href="http://tg_node.name" rel="noreferrer" target="_blank">tg_node.name</a>} {self._config.traffic_generator_type}")<br>
<br>
         assert (<br>
             self._tg_node.config.os == OS.linux<br>
@@ -218,9 +214,7 @@ def __init__(self, tg_node: TGNode, config: ScapyTrafficGeneratorConfig):<br>
         self._start_xmlrpc_server_in_remote_python(xmlrpc_server_listen_port)<br>
<br>
         # connect to the server<br>
-        server_url = (<br>
-            f"http://{self._tg_node.config.hostname}:{xmlrpc_server_listen_port}"<br>
-        )<br>
+        server_url = f"http://{self._tg_node.config.hostname}:{xmlrpc_server_listen_port}"<br>
         self.rpc_server_proxy = xmlrpc.client.ServerProxy(<br>
             server_url, allow_none=True, verbose=SETTINGS.verbose<br>
         )<br>
@@ -240,9 +234,7 @@ def _start_xmlrpc_server_in_remote_python(self, listen_port: int):<br>
         src = inspect.getsource(QuittableXMLRPCServer)<br>
         # Lines with only whitespace break the repl if in the middle of a function<br>
         # or class, so strip all lines containing only whitespace<br>
-        src = "\n".join(<br>
-            [line for line in src.splitlines() if not line.isspace() and line != ""]<br>
-        )<br>
+        src = "\n".join([line for line in src.splitlines() if not line.isspace() and line != ""])<br>
<br>
         spacing = "\n" * 4<br>
<br>
diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py<br>
index 202aebfd06..dfd8c755b4 100644<br>
--- a/dts/framework/testbed_model/sut_node.py<br>
+++ b/dts/framework/testbed_model/sut_node.py<br>
@@ -129,9 +129,7 @@ def remote_dpdk_build_dir(self) -> PurePath:<br>
     @property<br>
     def dpdk_version(self) -> str:<br>
         if self._dpdk_version is None:<br>
-            self._dpdk_version = self.main_session.get_dpdk_version(<br>
-                self._remote_dpdk_dir<br>
-            )<br>
+            self._dpdk_version = self.main_session.get_dpdk_version(self._remote_dpdk_dir)<br>
         return self._dpdk_version<br>
<br>
     @property<br>
@@ -149,8 +147,7 @@ def compiler_version(self) -> str:<br>
                 )<br>
             else:<br>
                 self._logger.warning(<br>
-                    "Failed to get compiler version because"<br>
-                    "_build_target_config is None."<br>
+                    "Failed to get compiler version because" "_build_target_config is None."<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string here.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                 )<br>
                 return ""<br>
         return self._compiler_version<br>
@@ -163,9 +160,7 @@ def get_build_target_info(self) -> BuildTargetInfo:<br>
     def _guess_dpdk_remote_dir(self) -> PurePath:<br>
         return self.main_session.guess_dpdk_remote_dir(self._remote_tmp_dir)<br>
<br>
-    def _set_up_build_target(<br>
-        self, build_target_config: BuildTargetConfiguration<br>
-    ) -> None:<br>
+    def _set_up_build_target(self, build_target_config: BuildTargetConfiguration) -> None:<br>
         """<br>
         Setup DPDK on the SUT node.<br>
         """<br>
@@ -177,22 +172,17 @@ def _set_up_build_target(<br>
         self._copy_dpdk_tarball()<br>
         self._build_dpdk()<br>
<br>
-    def _configure_build_target(<br>
-        self, build_target_config: BuildTargetConfiguration<br>
-    ) -> None:<br>
+    def _configure_build_target(self, build_target_config: BuildTargetConfiguration) -> None:<br>
         """<br>
         Populate common environment variables and set build target config.<br>
         """<br>
         self._env_vars = {}<br>
         self._build_target_config = build_target_config<br>
-        self._env_vars.update(<br>
-            self.main_session.get_dpdk_build_env_vars(build_target_config.arch)<br>
-        )<br>
+        self._env_vars.update(self.main_session.get_dpdk_build_env_vars(build_target_config.arch))<br>
         self._env_vars["CC"] = <a href="http://build_target_config.compiler.name" rel="noreferrer" target="_blank">build_target_config.compiler.name</a><br>
         if build_target_config.compiler_wrapper:<br>
             self._env_vars["CC"] = (<br>
-                f"'{build_target_config.compiler_wrapper} "<br>
-                f"{<a href="http://build_target_config.compiler.name" rel="noreferrer" target="_blank">build_target_config.compiler.name</a>}'"<br>
+                f"'{build_target_config.compiler_wrapper} " f"{<a href="http://build_target_config.compiler.name" rel="noreferrer" target="_blank">build_target_config.compiler.name</a>}'"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string here.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
             )<br>
<br>
     @Node.skip_setup<br>
@@ -224,9 +214,7 @@ def _copy_dpdk_tarball(self) -> None:<br>
         self.main_session.remove_remote_dir(self._remote_dpdk_dir)<br>
<br>
         # then extract to remote path<br>
-        self.main_session.extract_remote_tarball(<br>
-            remote_tarball_path, self._remote_dpdk_dir<br>
-        )<br>
+        self.main_session.extract_remote_tarball(remote_tarball_path, self._remote_dpdk_dir)<br>
<br>
     @Node.skip_setup<br>
     def _build_dpdk(self) -> None:<br>
@@ -263,9 +251,7 @@ def build_dpdk_app(self, app_name: str, **meson_dpdk_args: str | bool) -> PurePa<br>
         )<br>
<br>
         if app_name == "all":<br>
-            return self.main_session.join_remote_path(<br>
-                self.remote_dpdk_build_dir, "examples"<br>
-            )<br>
+            return self.main_session.join_remote_path(self.remote_dpdk_build_dir, "examples")<br>
         return self.main_session.join_remote_path(<br>
             self.remote_dpdk_build_dir, "examples", f"dpdk-{app_name}"<br>
         )<br>
@@ -319,9 +305,7 @@ def create_eal_parameters(<br>
                 '-c 0xf -a 0000:88:00.0 --file-prefix=dpdk_1112_20190809143420';<br>
         """<br>
<br>
-        lcore_list = LogicalCoreList(<br>
-            self.filter_lcores(lcore_filter_specifier, ascending_cores)<br>
-        )<br>
+        lcore_list = LogicalCoreList(self.filter_lcores(lcore_filter_specifier, ascending_cores))<br>
<br>
         if append_prefix_timestamp:<br>
             prefix = f"{prefix}_{self._dpdk_timestamp}"<br>
@@ -386,6 +370,4 @@ def create_interactive_shell(<br>
                 self.remote_dpdk_build_dir, shell_cls.path<br>
             )<br>
<br>
-        return super().create_interactive_shell(<br>
-            shell_cls, timeout, privileged, str(eal_parameters)<br>
-        )<br>
+        return super().create_interactive_shell(shell_cls, timeout, privileged, str(eal_parameters))<br>
diff --git a/dts/framework/testbed_model/tg_node.py b/dts/framework/testbed_model/tg_node.py<br>
index 27025cfa31..dca4ec0849 100644<br>
--- a/dts/framework/testbed_model/tg_node.py<br>
+++ b/dts/framework/testbed_model/tg_node.py<br>
@@ -45,9 +45,7 @@ class TGNode(Node):<br>
<br>
     def __init__(self, node_config: TGNodeConfiguration):<br>
         super(TGNode, self).__init__(node_config)<br>
-        self.traffic_generator = create_traffic_generator(<br>
-            self, node_config.traffic_generator<br>
-        )<br>
+        self.traffic_generator = create_traffic_generator(self, node_config.traffic_generator)<br>
         self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(f"Created node: {<a href="http://self.name" rel="noreferrer" target="_blank">self.name</a>}")<br>
<br>
     def send_packet_and_capture(<br>
@@ -94,6 +92,5 @@ def create_traffic_generator(<br>
             return ScapyTrafficGenerator(tg_node, traffic_generator_config)<br>
         case _:<br>
             raise ConfigurationError(<br>
-                "Unknown traffic generator: "<br>
-                f"{traffic_generator_config.traffic_generator_type}"<br>
+                "Unknown traffic generator: " f"{traffic_generator_config.traffic_generator_type}"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string but one that needs the whole thing to be an f-string.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
             )<br>
diff --git a/dts/framework/utils.py b/dts/framework/utils.py<br>
index d27c2c5b5f..d098d364ff 100644<br>
--- a/dts/framework/utils.py<br>
+++ b/dts/framework/utils.py<br>
@@ -19,9 +19,7 @@<br>
<br>
 class StrEnum(Enum):<br>
     @staticmethod<br>
-    def _generate_next_value_(<br>
-        name: str, start: int, count: int, last_values: object<br>
-    ) -> str:<br>
+    def _generate_next_value_(name: str, start: int, count: int, last_values: object) -> str:<br>
         return name<br>
<br>
     def __str__(self) -> str:<br>
@@ -32,9 +30,7 @@ def __str__(self) -> str:<br>
<br>
<br>
 def check_dts_python_version() -> None:<br>
-    if sys.version_info.major < 3 or (<br>
-        sys.version_info.major == 3 and sys.version_info.minor < 10<br>
-    ):<br>
+    if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10):<br>
         print(<br>
             RED(<br>
                 (<br>
@@ -60,9 +56,7 @@ def expand_range(range_str: str) -> list[int]:<br>
         range_boundaries = range_str.split("-")<br>
         # will throw an exception when items in range_boundaries can't be converted,<br>
         # serving as type check<br>
-        expanded_range.extend(<br>
-            range(int(range_boundaries[0]), int(range_boundaries[-1]) + 1)<br>
-        )<br>
+        expanded_range.extend(range(int(range_boundaries[0]), int(range_boundaries[-1]) + 1))<br>
<br>
     return expanded_range<br>
<br>
@@ -71,9 +65,7 @@ def get_packet_summaries(packets: list[Packet]):<br>
     if len(packets) == 1:<br>
         packet_summaries = packets[0].summary()<br>
     else:<br>
-        packet_summaries = json.dumps(<br>
-            list(map(lambda pkt: pkt.summary(), packets)), indent=4<br>
-        )<br>
+        packet_summaries = json.dumps(list(map(lambda pkt: pkt.summary(), packets)), indent=4)<br>
     return f"Packet contents: \n{packet_summaries}"<br>
<br>
<br>
@@ -94,9 +86,7 @@ class MesonArgs(object):<br>
     _default_library: str<br>
<br>
     def __init__(self, default_library: str | None = None, **dpdk_args: str | bool):<br>
-        self._default_library = (<br>
-            f"--default-library={default_library}" if default_library else ""<br>
-        )<br>
+        self._default_library = f"--default-library={default_library}" if default_library else ""<br>
         self._dpdk_args = " ".join(<br>
             (<br>
                 f"-D{dpdk_arg_name}={dpdk_arg_value}"<br>
diff --git a/dts/pyproject.toml b/dts/pyproject.toml<br>
index 6762edfa6b..980ac3c7db 100644<br>
--- a/dts/pyproject.toml<br>
+++ b/dts/pyproject.toml<br>
@@ -41,7 +41,7 @@ build-backend = "poetry.core.masonry.api"<br>
 [tool.pylama]<br>
 linters = "mccabe,pycodestyle,pyflakes"<br>
 format = "pylint"<br>
-max_line_length = 88 # <a href="https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length" rel="noreferrer" target="_blank">https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length</a><br>
+max_line_length = 100<br>
<br>
 [tool.mypy]<br>
 python_version = "3.10"<br>
@@ -55,4 +55,4 @@ profile = "black"<br>
 [tool.black]<br>
 target-version = ['py310']<br>
 include = '\.pyi?$'<br>
-line-length = 88 # <a href="https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length+line-length" rel="noreferrer" target="_blank">https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length<br>
+line-length</a> = 100<br>
diff --git a/dts/tests/TestSuite_hello_world.py b/dts/tests/TestSuite_hello_world.py<br>
index 7e3d95c0cf..768ba1cfa8 100644<br>
--- a/dts/tests/TestSuite_hello_world.py<br>
+++ b/dts/tests/TestSuite_hello_world.py<br>
@@ -34,9 +34,7 @@ def test_hello_world_single_core(self) -> None:<br>
         # get the first usable core<br>
         lcore_amount = LogicalCoreCount(1, 1, 1)<br>
         lcores = LogicalCoreCountFilter(self.sut_node.lcores, lcore_amount).filter()<br>
-        eal_para = self.sut_node.create_eal_parameters(<br>
-            lcore_filter_specifier=lcore_amount<br>
-        )<br>
+        eal_para = self.sut_node.create_eal_parameters(lcore_filter_specifier=lcore_amount)<br>
         result = self.sut_node.run_dpdk_app(self.app_helloworld_path, eal_para)<br>
         self.verify(<br>
             f"hello from core {int(lcores[0])}" in result.stdout,<br>
diff --git a/dts/tests/TestSuite_smoke_tests.py b/dts/tests/TestSuite_smoke_tests.py<br>
index 4a269df75b..36119e6469 100644<br>
--- a/dts/tests/TestSuite_smoke_tests.py<br>
+++ b/dts/tests/TestSuite_smoke_tests.py<br>
@@ -45,13 +45,10 @@ def test_driver_tests(self) -> None:<br>
         for dev in self.sut_node.virtual_devices:<br>
             vdev_args += f"--vdev {dev} "<br>
         vdev_args = vdev_args[:-1]<br>
-        driver_tests_command = (<br>
-            f"meson test -C {self.dpdk_build_dir_path} --suite driver-tests"<br>
-        )<br>
+        driver_tests_command = f"meson test -C {self.dpdk_build_dir_path} --suite driver-tests"<br>
         if vdev_args:<br>
             self._<a href="http://logger.info" rel="noreferrer" target="_blank">logger.info</a>(<br>
-                "Running driver tests with the following virtual "<br>
-                f"devices: {vdev_args}"<br>
+                "Running driver tests with the following virtual " f"devices: {vdev_args}"<br></blockquote><div><br></div><div><div style="font-family:arial,sans-serif" class="gmail_default">Double string that should be an f-string.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
             )<br>
             driver_tests_command += f' --test-args "{vdev_args}"'<br>
<br>
@@ -67,9 +64,7 @@ def test_devices_listed_in_testpmd(self) -> None:<br>
         Test:<br>
             Uses testpmd driver to verify that devices have been found by testpmd.<br>
         """<br>
-        testpmd_driver = self.sut_node.create_interactive_shell(<br>
-            TestPmdShell, privileged=True<br>
-        )<br>
+        testpmd_driver = self.sut_node.create_interactive_shell(TestPmdShell, privileged=True)<br>
         dev_list = [str(x) for x in testpmd_driver.get_devices()]<br>
         for nic in self.nics_in_node:<br>
             self.verify(<br>
-- <br>
2.34.1<br>
<br>
</blockquote></div></div>
</blockquote></div>