data_models: improve `set_or_update_a_value`

This commit is contained in:
Sina Atalay 2024-04-30 20:01:19 +03:00
parent 46c051aa41
commit 9e2f502f9a
1 changed files with 9 additions and 2 deletions

View File

@ -1114,7 +1114,7 @@ class RenderCVDataModel(RenderCVBaseModel):
) )
ThemeDataModel = getattr( ThemeDataModel = getattr(
theme_module, f"{theme_name.title()}ThemeOptions" # type: ignore theme_module, f"{theme_name.capitalize()}ThemeOptions" # type: ignore
) )
# initialize and validate the custom theme data model: # initialize and validate the custom theme data model:
@ -1161,6 +1161,10 @@ def set_or_update_a_value(
if len(keys) == 1: if len(keys) == 1:
# set the value: # set the value:
if value.startswith("{") and value.endswith("}"):
# allow users to assign dictionaries directly in the input file:
value = eval(value)
if isinstance(model, pydantic.BaseModel): if isinstance(model, pydantic.BaseModel):
setattr(model, key, value) setattr(model, key, value)
elif isinstance(model, dict): elif isinstance(model, dict):
@ -1173,7 +1177,10 @@ def set_or_update_a_value(
" list.", " list.",
) )
data_model.model_validate(data_model.model_dump(by_alias=True)) data_model = type(data_model).model_validate(
(data_model.model_dump(by_alias=True))
)
return data_model
else: else:
# get the first key and call the function with remaining keys: # get the first key and call the function with remaining keys:
first_key = keys[0] first_key = keys[0]