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 271E945482; Mon, 17 Jun 2024 17:25:35 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1484F40DD0; Mon, 17 Jun 2024 17:25:35 +0200 (CEST) Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by mails.dpdk.org (Postfix) with ESMTP id 6548040DD0 for ; Mon, 17 Jun 2024 17:25:34 +0200 (CEST) Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2ebd6ae2f56so5060781fa.0 for ; Mon, 17 Jun 2024 08:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1718637934; x=1719242734; darn=dpdk.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=GyOdN1Q6j6N2AhR94N+Kqwa+dhhGEACh9gFAmZfVCl0=; b=eiDGVofCCYMPEPEkdrJ3CPR6tUVqW9CKKa72LRXulJk74deDqJRbN+2y4B+CnvNf/s iPiE4u6nNuEPI/OXKPIP4bLykaB5Bo/vevi/ZWZJKEZDm5Aj2yEqTNcAFf/Ymu7YlfbC kw32Kay2UYA5HE0kCpRqgHZAYVFwJYMP9BG8g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718637934; x=1719242734; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GyOdN1Q6j6N2AhR94N+Kqwa+dhhGEACh9gFAmZfVCl0=; b=QOwtus2QlZ9IrImzJPcJGpX3yLCIPXze15S+MJCuXU+B1Ltmb/yTy5XxkEKV6LFCv4 ta5R7xXtjpYMkPsrcNZbUNNF0BH5UXd6nmKdjuUAHaTcWGJm8iGSZL2Dt7JrDtBfni+y anql/q/qis7UVJmll6ICOPhaK1x79dGDC1OHR6n1Q02+Ba8Tx7HoayI1gV7bfnOD2+uU 9B2Ea7Ka50ZX87uKR9xUv7o/dPt7YO4OcnfAYQF1wCUdVSEa6s9VfmfVCU7Tl7azrvQ4 RI5kOue4aFhquPUjVnwQw6sFfP2pFmHCWkU0sCp8+j6N+/hVnhjb5y67A+YOCUAbGish XQ1Q== X-Gm-Message-State: AOJu0YwAouJLvriEwj+pNpdG+L1wpO4sAJGaEkPnMbePfwHJIQlXqnkb PpyBtF1XGFk+kqysJPGNXIvDRhz5owPRG7/VCctgFPj436hgXa4eiIWtIkjM5ujOAn5/HcOu6+K 8oxouytQ2PZyoYs1rvKwPEzzZzSZYeiQLEoOtsg== X-Google-Smtp-Source: AGHT+IH3Sg4GfSkePfpYimfx25b6x8uCFN6f6JSUaM4zbxBFEDwHCKO5QenYOqYNpttzjEw0a21YInzBecDqoP3RCYk= X-Received: by 2002:a2e:be11:0:b0:2eb:e738:53b2 with SMTP id 38308e7fff4ca-2ec0e463c53mr71271191fa.1.1718637933934; Mon, 17 Jun 2024 08:25:33 -0700 (PDT) MIME-Version: 1.0 References: <20240326190422.577028-1-luca.vizzarro@arm.com> <20240617145409.67407-1-luca.vizzarro@arm.com> <20240617145409.67407-9-luca.vizzarro@arm.com> In-Reply-To: <20240617145409.67407-9-luca.vizzarro@arm.com> From: Nicholas Pratte Date: Mon, 17 Jun 2024 11:25:22 -0400 Message-ID: Subject: Re: [PATCH v5 8/8] dts: use Unpack for type checking and hinting To: Luca Vizzarro Cc: dev@dpdk.org, Jeremy Spewock , =?UTF-8?Q?Juraj_Linke=C5=A1?= , Paul Szczepanek Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 Tested-by: Nicholas Pratte Reviewed-by: Nicholas Pratte On Mon, Jun 17, 2024 at 10:54=E2=80=AFAM Luca Vizzarro wrote: > > 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 > Reviewed-by: Juraj Linke=C5=A1 > Reviewed-by: Jeremy Spewock > Reviewed-by: Nicholas Pratte > --- > dts/framework/params/types.py | 133 ++++++++++++++++++ > dts/framework/remote_session/testpmd_shell.py | 5 +- > 2 files changed, 136 insertions(+), 2 deletions(-) > create mode 100644 dts/framework/params/types.py > > diff --git a/dts/framework/params/types.py b/dts/framework/params/types.p= y > 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 t= yping and hinting. > + > +TypedDicts can be used in conjunction with Unpack and kwargs for type hi= nting on function calls. > + > +Example: > + ..code:: python > + def create_testpmd(**kwargs: Unpack[TestPmdParamsDict]): > + params =3D 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=3DFalse): > + """: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=3DFalse): > + """: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 | AnonMempoolAl= locationMode | None > + record_core_cycles: Switch > + record_burst_status: Switch > diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framewor= k/remote_session/testpmd_shell.py > index 8ee6829067..96a690b6de 100644 > --- a/dts/framework/remote_session/testpmd_shell.py > +++ b/dts/framework/remote_session/testpmd_shell.py > @@ -21,10 +21,11 @@ > from pathlib import PurePath > from typing import ClassVar > > -from typing_extensions import Self > +from typing_extensions import Self, Unpack > > from framework.exception import InteractiveCommandExecutionError > from framework.params.testpmd import SimpleForwardingModes, TestPmdParam= s > +from framework.params.types import TestPmdParamsDict > from framework.parser import ParserFn, TextParser > from framework.remote_session.dpdk_shell import DPDKShell > from framework.settings import SETTINGS > @@ -604,7 +605,7 @@ def __init__( > ascending_cores: bool =3D True, > append_prefix_timestamp: bool =3D True, > start_on_init: bool =3D True, > - **app_params, > + **app_params: Unpack[TestPmdParamsDict], > ) -> None: > """Overrides :meth:`~.dpdk_shell.DPDKShell.__init__`. Changes ap= p_params to kwargs.""" > super().__init__( > -- > 2.34.1 >