make vardata merge not use classmethod (#4245)
* make vardata merge not use classmethod * add clarifying comment * use simple cases for small values * add possible None * allow zero values to be given to var data * dang it darglint
This commit is contained in:
parent
e47cd25275
commit
ab4fd41e55
@ -151,31 +151,41 @@ class VarData:
|
|||||||
"""
|
"""
|
||||||
return dict((k, list(v)) for k, v in self.imports)
|
return dict((k, list(v)) for k, v in self.imports)
|
||||||
|
|
||||||
@classmethod
|
def merge(*all: VarData | None) -> VarData | None:
|
||||||
def merge(cls, *others: VarData | None) -> VarData | None:
|
|
||||||
"""Merge multiple var data objects.
|
"""Merge multiple var data objects.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
*others: The var data objects to merge.
|
*all: The var data objects to merge.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The merged var data object.
|
The merged var data object.
|
||||||
|
|
||||||
|
# noqa: DAR102 *all
|
||||||
"""
|
"""
|
||||||
state = ""
|
all_var_datas = list(filter(None, all))
|
||||||
field_name = ""
|
|
||||||
_imports = {}
|
if not all_var_datas:
|
||||||
hooks = {}
|
return None
|
||||||
for var_data in others:
|
|
||||||
if var_data is None:
|
if len(all_var_datas) == 1:
|
||||||
continue
|
return all_var_datas[0]
|
||||||
state = state or var_data.state
|
|
||||||
field_name = field_name or var_data.field_name
|
# Get the first non-empty field name or default to empty string.
|
||||||
_imports = imports.merge_imports(_imports, var_data.imports)
|
field_name = next(
|
||||||
hooks.update(
|
(var_data.field_name for var_data in all_var_datas if var_data.field_name),
|
||||||
var_data.hooks
|
"",
|
||||||
if isinstance(var_data.hooks, dict)
|
)
|
||||||
else {k: None for k in var_data.hooks}
|
|
||||||
)
|
# Get the first non-empty state or default to empty string.
|
||||||
|
state = next(
|
||||||
|
(var_data.state for var_data in all_var_datas if var_data.state), ""
|
||||||
|
)
|
||||||
|
|
||||||
|
hooks = {hook: None for var_data in all_var_datas for hook in var_data.hooks}
|
||||||
|
|
||||||
|
_imports = imports.merge_imports(
|
||||||
|
*(var_data.imports for var_data in all_var_datas)
|
||||||
|
)
|
||||||
|
|
||||||
if state or _imports or hooks or field_name:
|
if state or _imports or hooks or field_name:
|
||||||
return VarData(
|
return VarData(
|
||||||
@ -184,6 +194,7 @@ class VarData:
|
|||||||
imports=_imports,
|
imports=_imports,
|
||||||
hooks=hooks,
|
hooks=hooks,
|
||||||
)
|
)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def __bool__(self) -> bool:
|
def __bool__(self) -> bool:
|
||||||
|
Loading…
Reference in New Issue
Block a user