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 81710440EC; Tue, 28 May 2024 17:50:29 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6BC24406B7; Tue, 28 May 2024 17:50:29 +0200 (CEST) Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by mails.dpdk.org (Postfix) with ESMTP id B498E402E4 for ; Tue, 28 May 2024 17:50:27 +0200 (CEST) Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-2e98a5b955aso840931fa.1 for ; Tue, 28 May 2024 08:50:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1716911427; x=1717516227; 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=6OiVi8KdSSP83Q0pVjgN5rMUKI8Ie0DbchGBkvnSAcs=; b=YoqaK6YqbE/Mo1dLpKG89JXHL8M54mYzEjNrEXDIhZSkByw4B7WfjCPIhJ9Uz1o0Vp xyGCy+d29Lsfku0XyqpC9lMnjHpZKIl+QajOTehAUhi5SD34xJQKKSzMfsuabpDuLObj xfUyBu6/BMAAoikEY6+7fbDwC6EFkvNDAmfZ4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716911427; x=1717516227; 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=6OiVi8KdSSP83Q0pVjgN5rMUKI8Ie0DbchGBkvnSAcs=; b=iXh5LMdgaDpAEqfJJvcG44LsfTdwe5nAcAomFjmdOK/KgYy1jYF5Rxd9XS8zNYtF2V SC2TtS1yh+b+U1tdlAk/dKA4lcjRvIGeiJYlQCp0kHGu8Qs5bPq1Z86ufK0jrtVhXkkw dZrIIgOAsAVFa3uyJvwLu1iC9evBSsCTe1itvH1ViXK0zuuOBwQSaqXDrW2G82dDnM/u FGxZ9SdiLaFfzDTKvn7IysriNdwxz9HbvUH61mHQouI+canzsubSzlTD9MbKTGKC0tWD 383E6wHW+ns1V6z0G660AE5QbTzk7m+U/X4SwVtnFw1fGH8Z3yrgUQmb0cXC9gE8hpap 05wA== X-Gm-Message-State: AOJu0YzHqxrIths9Tg0gGuqVRjjuc71n2BHCJtzWK/cUL1imClj9KQPS myf0ML2ViBWsM2kOqmIoh6wj3FjeVSa8ZMV5OhkVQ+Cq3M3fKp6ctqTjxTiLQmFdlS77RL9MJjA RMrkiO+JzDhk61lgBD60/RB58hjLkU6WHhnijIw== X-Google-Smtp-Source: AGHT+IEUg9C+6NXjKW8+B7D9meSCWbWFYjxXQf49qxvoU9h8qjccErZ+NVQWQk5FjHP8zA6sgCKhdfuVTSa2fId72aw= X-Received: by 2002:a2e:700d:0:b0:2e9:8417:bd83 with SMTP id 38308e7fff4ca-2e98417c2f6mr20415141fa.2.1716911427206; Tue, 28 May 2024 08:50:27 -0700 (PDT) MIME-Version: 1.0 References: <20240326190422.577028-1-luca.vizzarro@arm.com> <20240509112057.1167947-1-luca.vizzarro@arm.com> <20240509112057.1167947-9-luca.vizzarro@arm.com> In-Reply-To: <20240509112057.1167947-9-luca.vizzarro@arm.com> From: Nicholas Pratte Date: Tue, 28 May 2024 11:50:16 -0400 Message-ID: Subject: Re: [PATCH v2 8/8] dts: use Unpack for type checking and hinting To: Luca Vizzarro Cc: dev@dpdk.org, =?UTF-8?Q?Juraj_Linke=C5=A1?= , Jeremy Spewock , 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 Thu, May 9, 2024 at 7:21=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 > --- > 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.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 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, TestPmdParam= s > +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, LogicalCoreLis= t > @@ -76,7 +79,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 >