Parse the args and fill the global data
        Currently we disregard the free parameters
        :param command_selected:
        :param flags:
        :param _free_args:
        :return:

def parse_args(self, command_selected, flags, _free_args):
        # type: (str, Dict[str, str], List[str]) -> bool
        """
        Parse the args and fill the global data
        Currently we disregard the free parameters
        :param command_selected:
        :param flags:
        :param _free_args:
        :return:
        """
        configs = self.function_name_to_configs[command_selected]
        suggested_configs = self.function_name_to_suggest_configs[command_selected]

        # create the attribute_to_config map
        attribute_to_config = dict()  # type: Dict[str, Config]
        for config in itertools.chain(configs, suggested_configs):
            for attribute in config.get_attributes():
                if attribute in attribute_to_config:
                    raise ValueError("attribute [{}] double".format(attribute))
                attribute_to_config[attribute] = config

        # set the flags into the "default" field
        unknown_flags = []
        for flag_raw, value in flags.items():
            edit = value.startswith('=')
            if flag_raw not in attribute_to_config:
                unknown_flags.append(flag_raw)
            config = attribute_to_config[flag_raw]
            param = config.get_param_by_name(flag_raw)
            if edit:
                v = param.s2t_generate_from_default(value[1:])
            else:
                v = param.s2t(value)
            setattr(config, flag_raw, v)

        # check for missing parameters and show help if there are any missing
        missing_parameters = []
        for config in configs:
            for attribute in config.get_attributes():
                value = getattr(config, attribute)
                if value is NO_DEFAULT:
                    missing_parameters.append(attribute)
        if unknown_flags or missing_parameters:
            if missing_parameters:
                print()
                print_warn("missing parameters [{}]".format(",".join(missing_parameters)))
            if unknown_flags:
                print()
                print_warn("unknown flags [{}]".format(",".join(unknown_flags)))
            print("problems found, not running")
            print()
            self.show_help_for_function(command_selected, show_help_full=False, show_help_suggest=False)
            return False

        # move all default values to place
        for config in itertools.chain(configs, self._configs):
            for attribute in config.get_attributes():
                param = getattr(config, attribute)  # type: Param
                if isinstance(param, Param):
                    if param.default is not NO_DEFAULT:
                        setattr(config, attribute, param.default)
        return True