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:
Khaleel Al-Adhami 2024-10-25 17:34:47 -07:00 committed by GitHub
parent e47cd25275
commit ab4fd41e55
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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: