[PATCH 1/6] dts: add parameters data structure
Jeremy Spewock
jspewock at iol.unh.edu
Thu Mar 28 17:48:23 CET 2024
Overall I like the idea of having a structured way of passing
command-line arguments to applications as strings and I think that
this is a well-abstracted approach. I also like that this approach
still supports the ability to pass strings "as-is" and use them as
parameters as well. That opens the door for potentially creating
dataclasses which only detail key-parameters that we assume you will
use, without blocking you from inputting whatever you want.
On Tue, Mar 26, 2024 at 3:04 PM Luca Vizzarro <luca.vizzarro at arm.com> wrote:
<snip>
> +META_VALUE_ONLY = "value_only"
> +META_OPTIONS_END = "options_end"
> +META_SHORT_NAME = "short_name"
> +META_LONG_NAME = "long_name"
> +META_MULTIPLE = "multiple"
> +META_MIXINS = "mixins"
> +
> +
I might add some kind of block comment here as a separator that
delimits that metadata modifiers start here. Something like what is
written in scapy.py which creates sections for XML-RPC method vs ones
that are run by the docker container. This isn't something strictly
necessary, but it might help break things up and add a little more
explanation.
> +def value_only(metadata: dict[str, Any] = {}) -> dict[str, Any]:
> + """Injects the value of the attribute as-is without flag. Metadata modifier for :func:`dataclasses.field`."""
> + return {**metadata, META_VALUE_ONLY: True}
> +
> +
<snip>
You could do the same thing here for mixins, but again, I'm not sure
it's really necessary.
> +def field_mixins(*mixins: Mixin, metadata: dict[str, Any] = {}) -> dict[str, Any]:
> + """Takes in a variable number of mixins to manipulate the value's rendering. Metadata modifier for :func:`dataclasses.field`.
> +
> + The ``metadata`` keyword argument can be used to chain metadata modifiers together.
> +
> + Mixins can be chained together, executed from right to left in the arguments list order.
> +
> + Example:
> +
> + .. code:: python
> +
> + hex_bitmask: int | None = field(default=0b1101, metadata=field_mixins(hex, metadata=param_name("mask")))
> +
> + will render as ``--mask=0xd``. The :func:`hex` built-in can be used as a mixin turning a valid integer into a hexadecimal representation.
> + """
> + return {**metadata, META_MIXINS: mixins}
<snip>
> 2.34.1
>
More information about the dev
mailing list