Files
Stirling-PDF/engine/src/editing/params.py
2026-03-16 11:01:50 +00:00

44 lines
1.3 KiB
Python

from __future__ import annotations
from models import tool_models
def dump_params(params: tool_models.ParamToolModel | None) -> dict[str, object]:
if params is None:
return {}
return params.model_dump(by_alias=True, exclude_none=True)
def normalize_param_keys(
param_model: tool_models.ParamToolModelType | None,
data: dict[str, object],
) -> dict[str, object]:
if param_model is None or not data:
return data
field_map: dict[str, str] = {}
for name, field in param_model.model_fields.items():
alias = field.alias or name
field_map[name.lower()] = alias
field_map[alias.lower()] = alias
normalized: dict[str, object] = {}
for key, value in data.items():
mapped = field_map.get(key.lower())
normalized[mapped or key] = value
return normalized
def merge_param_updates(
param_model: tool_models.ParamToolModelType | None,
base: tool_models.ParamToolModel | None,
updates: dict[str, object],
) -> tool_models.ParamToolModel | None:
if param_model is None:
return None
data = dump_params(base)
data.update(updates)
if not data:
return None
normalized = normalize_param_keys(param_model, data)
return param_model.model_validate(normalized)