in utils/check_task_parameters.py [0:0]
def _update_parameters(self, params: cst.Parameters) -> cst.Parameters:
"""Update parameter types and add new parameters."""
new_params = list(params.params) # Copy regular parameters (e.g., 'self')
new_kwonly_params = []
# Collect existing parameter names to avoid duplicates
existing_params = {p.name.value for p in params.params + params.kwonly_params}
# Update existing keyword-only parameters
for param in params.kwonly_params:
param_name = param.name.value
if param_name in self.param_updates:
# Update the type annotation for the parameter
new_annotation = cst.Annotation(
annotation=cst.parse_expression(self.param_updates[param_name]["type"])
)
new_kwonly_params.append(param.with_changes(annotation=new_annotation))
else:
# Keep the parameter as is if no update is needed
new_kwonly_params.append(param)
# Add new parameters that are not already present
for param_name, param_info in self.param_updates.items():
if param_name not in existing_params:
# Create a new parameter with the provided type and a default value of None
annotation = cst.Annotation(annotation=cst.parse_expression(param_info["type"]))
new_param = cst.Param(
name=cst.Name(param_name),
annotation=annotation,
default=cst.Name(param_info["default_value"]),
)
new_kwonly_params.append(new_param)
# Return the updated parameters object with new and updated parameters
return params.with_changes(params=new_params, kwonly_params=new_kwonly_params)