make vardata merge not use classmethod

This commit is contained in:
Khaleel Al-Adhami 2024-10-25 12:26:44 -07:00
parent 6341846cea
commit 11bb40f788

View File

@ -151,8 +151,7 @@ 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(self, *others: VarData | None) -> VarData | None:
def merge(cls, *others: VarData | None) -> VarData | None:
"""Merge multiple var data objects. """Merge multiple var data objects.
Args: Args:
@ -161,20 +160,23 @@ class VarData:
Returns: Returns:
The merged var data object. The merged var data object.
""" """
state = "" all_var_datas = [self] + [
field_name = "" var_data for var_data in others if var_data is not None
_imports = {} ]
hooks = {}
for var_data in others: field_name = next(
if var_data is None: (var_data.field_name for var_data in all_var_datas if var_data.field_name),
continue "",
state = state or var_data.state )
field_name = field_name or var_data.field_name
_imports = imports.merge_imports(_imports, var_data.imports) state = next(
hooks.update( (var_data.state for var_data in all_var_datas if var_data.state), ""
var_data.hooks )
if isinstance(var_data.hooks, dict)
else {k: None for k in var_data.hooks} 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:
@ -184,6 +186,7 @@ class VarData:
imports=_imports, imports=_imports,
hooks=hooks, hooks=hooks,
) )
return None return None
def __bool__(self) -> bool: def __bool__(self) -> bool: