From: Luca Vizzarro <Luca.Vizzarro@arm.com>
To: Dean Marx <dmarx@iol.unh.edu>
Cc: dev@dpdk.org,
"Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>,
"Juraj Linkeš" <juraj.linkes@pantheon.tech>,
"Paul Szczepanek" <paul.szczepanek@arm.com>
Subject: Re: [PATCH 3/5] dts: use Pydantic in the configuration
Date: Tue, 29 Oct 2024 12:51:20 +0000 [thread overview]
Message-ID: <998910c0-3648-4ecb-af05-181774e0d447@arm.com> (raw)
In-Reply-To: <CABD7UXN46-0DZ8ShsZ7Hus=w03EWd4kQ2EG3X0mb-wB9rW6Q_g@mail.gmail.com>
On 30/09/2024 22:45, Dean Marx wrote:
> -@dataclass(slots=True, frozen=True)
> +@dataclass(slots=True, frozen=True, kw_only=True,
> config=ConfigDict(extra="forbid"))
>
>
> Up to you but I think it might be worth specifying what some of these
> extra pydantic args are for if we're going to keep the name of the
> decorator as "dataclass." For example, this ConfigDict "forbid" argument
> seems to be commonly used, same with the "before/after" modes with the
> model_validator. Maybe a brief description somewhere in the docstrings,
> just so others can see how it differs from the previous implementation
> even without experience using pydantic.
Your concern is understandable, but I don't want to risk repeating what
the Pydantic docs already say. As this is a feature of Pydantic itself,
it should be looked up on its documentation. On the other hand, saying
why we are doing would make perfect sense, but it's also quite obvious
at the same time. This is because `extra="forbid"` just means to forbid
any extra fields provided (in the configuration) during deserialization.
> + @model_validator(mode="before")
> @classmethod
> - def from_dict(
> - cls,
> - entry: str | TestSuiteConfigDict,
> - ) -> Self:
> - """Create an instance from two different types.
> + def convert_from_string(cls, data: Any) -> Any:
> + """Convert the string representation into a valid mapping."""
> + if isinstance(data, str):
> + [test_suite, *test_cases] = data.split()
> + return dict(test_suite=test_suite, test_cases=test_cases)
> + return data
>
>
> Again this is completely your call, but might be worth explaining in the
> docstrings why this "before" method is used here while the other
> validators are running with "after."
Similarly, this comes with an understanding of
deserialization/validation/creation phases. Pydantic actually have their
own meaning of "validators" which could be confusing at first glance,
and may be worth reading into it. Here we are just re-using the same
terminology for consistency. The validators themselves explain what they
do. The phases need to be understood from Pydantic's documentation in
order to understand... Pydantic code.
In the code you quoted, the model doc say that instead of a mapping of
fields, meaning:
test_suite: hello_world
test_cases:
- hello_world_single_core
a string could be provided:
hello_world hello_world_single_core
This validator is set in before mode because we can't instantiate a
Pydantic model with a string, and we need to parse the string to provide
the valid mappings for Pydantic. The before mode happens before the
model is validated by Pydantic and the raw input is provided, the after
mode happens afterwards and the instance is given instead.
next prev parent reply other threads:[~2024-10-29 12:51 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 16:39 [PATCH 0/5] dts: Pydantic configuration Luca Vizzarro
2024-08-22 16:39 ` [PATCH 1/5] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-09-16 13:00 ` Juraj Linkeš
2024-10-29 12:57 ` Luca Vizzarro
2024-09-19 20:01 ` Nicholas Pratte
2024-08-22 16:39 ` [PATCH 2/5] dts: add Pydantic and remove Warlock Luca Vizzarro
2024-09-16 13:17 ` Juraj Linkeš
2024-09-19 19:56 ` Nicholas Pratte
2024-09-30 20:41 ` Dean Marx
2024-08-22 16:39 ` [PATCH 3/5] dts: use Pydantic in the configuration Luca Vizzarro
2024-09-17 11:13 ` Juraj Linkeš
2024-10-29 13:00 ` Luca Vizzarro
2024-09-30 17:56 ` Nicholas Pratte
2024-10-29 12:41 ` Luca Vizzarro
2024-09-30 21:45 ` Dean Marx
2024-10-29 12:51 ` Luca Vizzarro [this message]
2024-08-22 16:39 ` [PATCH 4/5] dts: use TestSuiteSpec class imports Luca Vizzarro
2024-09-17 11:39 ` Juraj Linkeš
2024-10-29 12:52 ` Luca Vizzarro
2024-10-01 17:12 ` Dean Marx
2024-10-29 12:54 ` Luca Vizzarro
2024-10-01 20:45 ` Nicholas Pratte
2024-10-29 12:56 ` Luca Vizzarro
2024-11-04 17:49 ` Nicholas Pratte
2024-08-22 16:39 ` [PATCH 5/5] dts: add JSON schema generation script Luca Vizzarro
2024-09-17 11:59 ` Juraj Linkeš
2024-10-01 20:48 ` Nicholas Pratte
2024-10-25 15:58 ` [PATCH v2 0/5] dts: Pydantic configuration Luca Vizzarro
2024-10-25 15:58 ` [PATCH v2 1/5] dts: add pydantic dependency Luca Vizzarro
2024-10-25 15:58 ` [PATCH v2 2/5] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-10-25 15:58 ` [PATCH v2 3/5] dts: use pydantic in the configuration Luca Vizzarro
2024-10-25 15:58 ` [PATCH v2 4/5] dts: remove warlock dependency Luca Vizzarro
2024-10-25 15:58 ` [PATCH v2 5/5] dts: use TestSuiteSpec class imports Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 0/5] dts: Pydantic configuration Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 1/5] dts: add pydantic dependency Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 2/5] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 3/5] dts: use pydantic in the configuration Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 4/5] dts: remove warlock dependency Luca Vizzarro
2024-10-25 16:43 ` [PATCH v3 5/5] dts: use TestSuiteSpec class imports Luca Vizzarro
2024-10-28 17:49 ` [PATCH v4 0/8] dts: Pydantic configuration Luca Vizzarro
2024-10-28 17:49 ` [PATCH v4 1/8] dts: add pydantic dependency Luca Vizzarro
2024-10-31 18:42 ` Nicholas Pratte
2024-10-28 17:49 ` [PATCH v4 2/8] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-10-31 19:32 ` Nicholas Pratte
2024-10-31 20:21 ` Nicholas Pratte
2024-11-06 17:58 ` Luca Vizzarro
2024-10-28 17:49 ` [PATCH v4 3/8] dts: refactor build and node info classes Luca Vizzarro
2024-10-31 20:16 ` Nicholas Pratte
2024-11-06 18:02 ` Luca Vizzarro
2024-10-28 17:49 ` [PATCH v4 4/8] dts: use pydantic in the configuration Luca Vizzarro
2024-10-31 20:20 ` Nicholas Pratte
2024-10-28 17:49 ` [PATCH v4 5/8] dts: remove warlock dependency Luca Vizzarro
2024-10-31 20:23 ` Nicholas Pratte
2024-10-28 17:49 ` [PATCH v4 6/8] dts: add autodoc pydantic Luca Vizzarro
2024-10-31 20:52 ` Nicholas Pratte
2024-11-06 18:04 ` Luca Vizzarro
2024-10-28 17:49 ` [PATCH v4 7/8] dts: improve configuration API docs Luca Vizzarro
2024-11-04 17:34 ` Nicholas Pratte
2024-10-28 17:49 ` [PATCH v4 8/8] dts: use TestSuiteSpec class imports Luca Vizzarro
2024-11-04 17:50 ` Nicholas Pratte
2024-11-06 18:09 ` [PATCH v5 0/8] dts: Pydantic configuration Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 1/8] dts: add pydantic dependency Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 2/8] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 3/8] dts: refactor build and node info classes Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 4/8] dts: use pydantic in the configuration Luca Vizzarro
2024-11-07 0:33 ` Patrick Robb
2024-11-06 18:09 ` [PATCH v5 5/8] dts: remove warlock dependency Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 6/8] dts: add autodoc pydantic Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 7/8] dts: improve configuration API docs Luca Vizzarro
2024-11-06 18:09 ` [PATCH v5 8/8] dts: use TestSuiteSpec class imports Luca Vizzarro
2024-11-07 0:34 ` [PATCH v5 0/8] dts: Pydantic configuration Patrick Robb
2024-11-08 11:39 ` [PATCH v6 0/9] " Luca Vizzarro
2024-11-08 11:39 ` [PATCH v6 1/9] dts: add pydantic dependency Luca Vizzarro
2024-11-08 11:39 ` [PATCH v6 2/9] dts: add TestSuiteSpec class and discovery Luca Vizzarro
2024-11-20 8:48 ` Ali Alnubani
2024-11-20 14:04 ` Luca Vizzarro
2024-11-20 14:35 ` Thomas Monjalon
2024-11-08 11:39 ` [PATCH v6 3/9] dts: refactor build and node info classes Luca Vizzarro
2024-11-08 11:40 ` [PATCH v6 4/9] dts: use pydantic in the configuration Luca Vizzarro
2024-11-20 8:48 ` Ali Alnubani
2024-11-20 13:53 ` Luca Vizzarro
2024-11-20 14:34 ` Thomas Monjalon
2024-11-08 11:40 ` [PATCH v6 5/9] dts: remove warlock dependency Luca Vizzarro
2024-11-08 11:40 ` [PATCH v6 6/9] dts: add autodoc pydantic Luca Vizzarro
2024-11-08 11:40 ` [PATCH v6 7/9] dts: improve configuration API docs Luca Vizzarro
2024-11-08 11:40 ` [PATCH v6 8/9] dts: fix custom enum behaviour with docs Luca Vizzarro
2024-11-08 11:40 ` [PATCH v6 9/9] dts: use TestSuiteSpec class imports Luca Vizzarro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=998910c0-3648-4ecb-af05-181774e0d447@arm.com \
--to=luca.vizzarro@arm.com \
--cc=dev@dpdk.org \
--cc=dmarx@iol.unh.edu \
--cc=honnappa.nagarahalli@arm.com \
--cc=juraj.linkes@pantheon.tech \
--cc=paul.szczepanek@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).