Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Revamp config management #1104

Draft
wants to merge 8 commits into
base: v1.x.x
Choose a base branch
from

Conversation

llucax
Copy link
Contributor

@llucax llucax commented Nov 15, 2024

No description provided.

Make it more explicit that this is just a wrapper to external libraries
so users should read their documentation in full and which functions are
used exactly.

Signed-off-by: Leandro Lucarella <[email protected]>
`marshmallow_dataclass.dataclass` is intended to be used only when using
`my_dataclass.Schema` to get the schema. But using this is not very
convenient when using type hints as they are not well supported by
`marshmallow`, as the `load()` function can't have hints.

This is actually why `load_config()` exists in the first place, so we
are using `class_schema()` instead, so we don't really need that our
types are decorated with `marshmallow_dataclass`, we can use the
built-in `dataclass` instead, we just need to add the appropriate
metadata if we want more complex validation.

Using `class_shema()` is also necessary to be able to pass a
`base_schema`, which we'll need when we want to use schemas with
custom fields, like the ones provided by `frequenz.quantities`.

Because of this, we just drop support for
`marshmallow_dataclass.dataclass` and we'll require that built-in
dataclasses are used in the future.

Signed-off-by: Leandro Lucarella <[email protected]>
This is necessary to use custom fields when loading configurations.

Signed-off-by: Leandro Lucarella <[email protected]>
This is just the last step to be able to enforce via the type system
that only built-in dataclasses are used.

Signed-off-by: Leandro Lucarella <[email protected]>
As this package gets more stuff, the old name used when the actor was
stored in the `frequenz.actor` package doesn't make much sense and is
confusing.

Signed-off-by: Leandro Lucarella <[email protected]>
This is to follow the naming convention of actors and make it more
obvious that it is an actor.

Signed-off-by: Leandro Lucarella <[email protected]>
`pylint` is much more flaky than `mypy`, so better just have `mypy`
doing those checks.

Signed-off-by: Leandro Lucarella <[email protected]>
@github-actions github-actions bot added part:docs Affects the documentation part:tests Affects the unit, integration and performance (benchmarks) tests part:tooling Affects the development tooling (CI, deployment, dependency management, etc.) part:config Affects the configuration management labels Nov 15, 2024
Copy link
Contributor

@ela-kotulska-frequenz ela-kotulska-frequenz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will continue checking on Monday :)

Comment on lines +121 to +134
@overload
async def new_receiver(
self,
*,
limit: int = 10,
wait_for_first: bool = True,
) -> Receiver[Mapping[str, Any]]: ...

@overload
async def new_receiver( # pylint: disable=too-many-arguments
self,
*,
limit: int = 10,
wait_for_first: bool = True,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the most common use case is when limit=1, not 10.
In most scenarios we need only one latest config.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
part:config Affects the configuration management part:docs Affects the documentation part:tests Affects the unit, integration and performance (benchmarks) tests part:tooling Affects the development tooling (CI, deployment, dependency management, etc.)
Projects
Status: To do
Development

Successfully merging this pull request may close these issues.

2 participants