def try_parse_num_and_booleans(num_str):
    """
    Tries to parse the provided string as a number or boolean
    :param num_str:
    :return:
    """
    if isinstance(num_str, str):
        # bool
        if num_str.lower() == 'true':
            return True
        elif num_str.lower() == 'false':
            return False
        # int
        if num_str.isdigit():
            return int(num_str)
        # float
        try:
            return float(num_str)
        except ValueError:
            # give up
            return num_str
    else:
        # dont try
        return num_str