code: def main(self, configuration):
      
      _custom_func_arguments = {"conf"}
      filename = os.path.basename(os.path.abspath(sys.argv[0]))
  
      default_arg_list = [item for item in configuration.get("default") if len(item.strip()) != 0]
      if len(default_arg_list) == 0:
        sys.stdout.write(self.generate_help(filename=filename))
        return
  
      command_name = default_arg_list.pop(0)
      if command_name not in self._modules.keys():
        sys.stdout.write(self.generate_help(filename=filename))
        return
  
      command = self._modules[command_name]
      entry_point = command["entry_point"]
      class_path = command["classpath"]
      metainfo = command["metainfo"]
      """:type metainfo ModuleMetaInfo"""
  
      try:
        args = metainfo.parse_default_arguments(default_arg_list)
        args.update(metainfo.parse_arguments(configuration))
  
        f_args = entry_point.__code__.co_varnames[:entry_point.__code__.co_argcount]
  
        if len(f_args) - len(set(f_args) & _custom_func_arguments) != len(set(args.keys()) & set(f_args)):
          raise ArgumentException("Function \"{}\" from module {} doesn't implement all arguments in the signature".format(
            entry_point.__name__, class_path
          ))
  
        if "conf" in f_args:
          args["conf"] = configuration
  
        entry_point(**args)
      except ArgumentException as e:
        sys.stdout.write("Application arguments exception: {}\n".format(str(e)))
        return
docs: :type configuration Configuration