def _convert_params_to_type()

in django_airavata/apps/api/output_views.py [0:0]


def _convert_params_to_type(output_view_provider, params):
    method_sig = inspect.signature(output_view_provider.generate_data)
    method_params = method_sig.parameters
    # Special query parameter _meta holds type information for interactive
    # parameters (will only be present if there are interactive parameters)
    meta = json.loads(params.pop("_meta", "{}"))
    for k, v in params.items():
        meta_type = meta[k]['type'] if k in meta else None
        default_value = None
        if (k in method_params and
            method_params[k].default is not inspect.Parameter.empty and
                method_params[k].default is not None):
            default_value = method_params[k].default
        # TODO: handle lists?
        # Handle boolean and numeric values, converting from string
        if meta_type == 'boolean' or isinstance(default_value, bool):
            params[k] = v == "true"
        elif meta_type == 'float' or isinstance(default_value, float):
            params[k] = float(v)
        elif meta_type == 'integer' or isinstance(default_value, int):
            params[k] = int(v)
        elif meta_type == 'string' or isinstance(default_value, str):
            params[k] = v
        else:
            logger.warning(
                f"Unrecognized type for parameter {k}: "
                f"meta_type={meta_type}, default_value={default_value}")
    return params