On Tue, Sep 13, 2022 at 01:47:10PM -0400, Owen Hilyard wrote:
> <snip>
>
> > +# Frozen makes the object immutable. This enables further
> optimizations,
> > +# and makes it thread safe should we every want to move in that
> direction.
> > +@dataclass(slots=True, frozen=True)
> > +class NodeConfiguration:
> > + name: str
> > + hostname: str
> > + user: str
> > + password: Optional[str]
> > +
> > + @staticmethod
> > + def from_dict(d: dict) -> "NodeConfiguration":
> > + return NodeConfiguration(
> > + name=d["name"],
> > + hostname=d["hostname"],
> > + user=d["user"],
> > + password=d.get("password"),
> > + )
> > +
> Out of curiosity, what is the reason for having a static "from_dict"
> method
> rather than just a regular constructor function that takes a dict as
> parameter?
>
> @dataclass(...) is a class annotation that transforms the thing it
> annotates into a dataclass. This means it creates the constructor for
> you based on the property type annotations. If you create your own
> constructor, you need a constructor that can either take a single
> dictionary or all of the parameters like a normal constructor. Making
> it a static method also means that each class can manage how it should
> be constructed from a dictionary. Some of the other classes will
> transform lists or perform other assertions. It also makes it easier to
> have specialized types. For instance, a NICConfiguration class would
> have to handle all of the possible device arguments that could be
> passed to any PMD driver if things were passed as parameters.
>
> > +
> > +@dataclass(slots=True, frozen=True)
> > +class ExecutionConfiguration:
> > + system_under_test: NodeConfiguration
> > +
> Minor comment: seems strange having only a single member variable in
> this
> class, effectively duplicating the class above.
>
> More is intended to go here. For instance, what tests to run,
> configuration for virtual machines, the traffic generator node.
>
> <snip>
>
Thanks for all the explanations.