From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9386F43F7C; Thu, 9 May 2024 13:22:12 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 47BFD40A89; Thu, 9 May 2024 13:21:24 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mails.dpdk.org (Postfix) with ESMTP id 08804402F1 for ; Thu, 9 May 2024 13:21:17 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1BEF4106F; Thu, 9 May 2024 04:21:42 -0700 (PDT) Received: from localhost.localdomain (unknown [10.1.194.74]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E7E933F6A8; Thu, 9 May 2024 04:21:15 -0700 (PDT) From: Luca Vizzarro To: dev@dpdk.org Cc: =?UTF-8?q?Juraj=20Linke=C5=A1?= , Jeremy Spewock , Luca Vizzarro , Paul Szczepanek Subject: [PATCH v2 8/8] dts: use Unpack for type checking and hinting Date: Thu, 9 May 2024 12:20:57 +0100 Message-Id: <20240509112057.1167947-9-luca.vizzarro@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240509112057.1167947-1-luca.vizzarro@arm.com> References: <20240326190422.577028-1-luca.vizzarro@arm.com> <20240509112057.1167947-1-luca.vizzarro@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Interactive shells that inherit DPDKShell initialise their params classes from a kwargs dict. Therefore, static type checking is disabled. This change uses the functionality of Unpack added in PEP 692 to re-enable it. The disadvantage is that this functionality has been implemented only with TypedDict, forcing the creation of TypedDict mirrors of the Params classes. Signed-off-by: Luca Vizzarro Reviewed-by: Paul Szczepanek --- dts/framework/params/types.py | 133 ++++++++++++++++++ dts/framework/remote_session/testpmd_shell.py | 5 +- 2 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 dts/framework/params/types.py diff --git a/dts/framework/params/types.py b/dts/framework/params/types.py new file mode 100644 index 0000000000..e668f658d8 --- /dev/null +++ b/dts/framework/params/types.py @@ -0,0 +1,133 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2024 Arm Limited + +"""Module containing TypeDict-equivalents of Params classes for static typing and hinting. + +TypedDicts can be used in conjunction with Unpack and kwargs for type hinting on function calls. + +Example: + ..code:: python + def create_testpmd(**kwargs: Unpack[TestPmdParamsDict]): + params = TestPmdParams(**kwargs) +""" + +from pathlib import PurePath +from typing import TypedDict + +from framework.params import Switch, YesNoSwitch +from framework.params.testpmd import ( + AnonMempoolAllocationMode, + EthPeer, + Event, + FlowGenForwardingMode, + HairpinMode, + NoisyForwardingMode, + Params, + PortNUMAConfig, + PortTopology, + RingNUMAConfig, + RSSSetting, + RXMultiQueueMode, + RXRingParams, + SimpleForwardingModes, + SimpleMempoolAllocationMode, + TxIPAddrPair, + TXOnlyForwardingMode, + TXRingParams, + TxUDPPortPair, +) +from framework.testbed_model.cpu import LogicalCoreList +from framework.testbed_model.port import Port +from framework.testbed_model.virtual_device import VirtualDevice + + +class EalParamsDict(TypedDict, total=False): + """:class:`TypedDict` equivalent of :class:`~.eal.EalParams`.""" + + lcore_list: LogicalCoreList | None + memory_channels: int | None + prefix: str + no_pci: Switch + vdevs: list[VirtualDevice] | None + ports: list[Port] | None + other_eal_param: Params | None + + +class TestPmdParamsDict(EalParamsDict, total=False): + """:class:`TypedDict` equivalent of :class:`~.testpmd.TestPmdParams`.""" + + interactive_mode: Switch + auto_start: Switch + tx_first: Switch + stats_period: int | None + display_xstats: list[str] | None + nb_cores: int | None + coremask: int | None + nb_ports: int | None + port_topology: PortTopology | None + portmask: int | None + portlist: str | None + numa: YesNoSwitch + socket_num: int | None + port_numa_config: list[PortNUMAConfig] | None + ring_numa_config: list[RingNUMAConfig] | None + total_num_mbufs: int | None + mbuf_size: list[int] | None + mbcache: int | None + max_pkt_len: int | None + eth_peers_configfile: PurePath | None + eth_peer: list[EthPeer] | None + tx_ip: TxIPAddrPair | None + tx_udp: TxUDPPortPair | None + enable_lro: Switch + max_lro_pkt_size: int | None + disable_crc_strip: Switch + enable_scatter: Switch + enable_hw_vlan: Switch + enable_hw_vlan_filter: Switch + enable_hw_vlan_strip: Switch + enable_hw_vlan_extend: Switch + enable_hw_qinq_strip: Switch + pkt_drop_enabled: Switch + rss: RSSSetting | None + forward_mode: ( + SimpleForwardingModes + | FlowGenForwardingMode + | TXOnlyForwardingMode + | NoisyForwardingMode + | None + ) + hairpin_mode: HairpinMode | None + hairpin_queues: int | None + burst: int | None + enable_rx_cksum: Switch + rx_queues: int | None + rx_ring: RXRingParams | None + no_flush_rx: Switch + rx_segments_offsets: list[int] | None + rx_segments_length: list[int] | None + multi_rx_mempool: Switch + rx_shared_queue: Switch | int + rx_offloads: int | None + rx_mq_mode: RXMultiQueueMode | None + tx_queues: int | None + tx_ring: TXRingParams | None + tx_offloads: int | None + eth_link_speed: int | None + disable_link_check: Switch + disable_device_start: Switch + no_lsc_interrupt: Switch + no_rmv_interrupt: Switch + bitrate_stats: int | None + latencystats: int | None + print_events: list[Event] | None + mask_events: list[Event] | None + flow_isolate_all: Switch + disable_flow_flush: Switch + hot_plug: Switch + vxlan_gpe_port: int | None + geneve_parsed_port: int | None + lock_all_memory: YesNoSwitch + mempool_allocation_mode: SimpleMempoolAllocationMode | AnonMempoolAllocationMode | None + record_core_cycles: Switch + record_burst_status: Switch diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framework/remote_session/testpmd_shell.py index 92930d7fbb..5b3a7bb9ab 100644 --- a/dts/framework/remote_session/testpmd_shell.py +++ b/dts/framework/remote_session/testpmd_shell.py @@ -18,8 +18,11 @@ from pathlib import PurePath from typing import ClassVar +from typing_extensions import Unpack + from framework.exception import InteractiveCommandExecutionError from framework.params.testpmd import SimpleForwardingModes, TestPmdParams +from framework.params.types import TestPmdParamsDict from framework.remote_session.dpdk_shell import DPDKShell from framework.settings import SETTINGS from framework.testbed_model.cpu import LogicalCoreCount, LogicalCoreList @@ -76,7 +79,7 @@ def __init__( ascending_cores: bool = True, append_prefix_timestamp: bool = True, start_on_init: bool = True, - **app_params, + **app_params: Unpack[TestPmdParamsDict], ) -> None: """Overrides :meth:`~.dpdk_shell.DPDKShell.__init__`. Changes app_params to kwargs.""" super().__init__( -- 2.34.1