18 lines
533 B
Python
18 lines
533 B
Python
from typing import TypeVar, Type, Callable, Dict, Any
|
|
|
|
Attrs = Dict[str, Any]
|
|
|
|
C = TypeVar('C')
|
|
|
|
# todo not sure about it, could be overthinking...
|
|
# but short enough to change later
|
|
def make_config(cls: Type[C], migration: Callable[[Attrs], Attrs]=lambda x: x) -> C:
|
|
props = dict(vars(cls.__base__))
|
|
props = migration(props)
|
|
from dataclasses import fields
|
|
params = {
|
|
k: v
|
|
for k, v in props.items()
|
|
if k in {f.name for f in fields(cls)}
|
|
}
|
|
return cls(**params) # type: ignore[call-arg]
|