def constraint_type()

in src/hpc/autoscale/clilib.py [0:0]


def constraint_type(c: Union[str, List[str]]) -> str:
    assert isinstance(c, str)

    try:
        return json.dumps(json.loads(c))
    except Exception:
        ...
    try:
        key, value_expr = c.split("=", 1)
        values = [x.strip() for x in value_expr.split(",")]
        values_converted = []
        for v in values:
            converted: Union[int, float, bool, str, None] = v
            if v.startswith('"') and v.endswith('"'):
                converted = v.lstrip('"').rstrip('"')
            elif v.lower() in ["true", "false"]:
                converted = v.lower() == "true"
            else:
                try:
                    converted = int(v)
                except Exception:
                    try:
                        converted = float(v)
                    except Exception:
                        ...

            if v == "null":
                converted = None

            values_converted.append(converted)

        if len(values_converted) == 1:
            return json.dumps({key: values_converted[0]})

        return json.dumps({key: values_converted})
    except Exception as e:
        _print(str(e))
        raise