mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-04-06 03:19:39 +02:00
44 lines
1.3 KiB
Python
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)
|