|
@@ -151,31 +151,41 @@ class VarData:
|
|
|
"""
|
|
|
return dict((k, list(v)) for k, v in self.imports)
|
|
|
|
|
|
- @classmethod
|
|
|
- def merge(cls, *others: VarData | None) -> VarData | None:
|
|
|
+ def merge(*all: VarData | None) -> VarData | None:
|
|
|
"""Merge multiple var data objects.
|
|
|
|
|
|
Args:
|
|
|
- *others: The var data objects to merge.
|
|
|
+ *all: The var data objects to merge.
|
|
|
|
|
|
Returns:
|
|
|
The merged var data object.
|
|
|
+
|
|
|
+ # noqa: DAR102 *all
|
|
|
"""
|
|
|
- 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 = list(filter(None, all))
|
|
|
+
|
|
|
+ if not all_var_datas:
|
|
|
+ return None
|
|
|
+
|
|
|
+ if len(all_var_datas) == 1:
|
|
|
+ return all_var_datas[0]
|
|
|
+
|
|
|
+ # Get the first non-empty field name or default to empty string.
|
|
|
+ field_name = next(
|
|
|
+ (var_data.field_name for var_data in all_var_datas if var_data.field_name),
|
|
|
+ "",
|
|
|
+ )
|
|
|
+
|
|
|
+ # 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:
|
|
|
return VarData(
|
|
@@ -184,6 +194,7 @@ class VarData:
|
|
|
imports=_imports,
|
|
|
hooks=hooks,
|
|
|
)
|
|
|
+
|
|
|
return None
|
|
|
|
|
|
def __bool__(self) -> bool:
|