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