:type default_args_sample list
    :rtype dict

def parse_default_arguments(self, default_args_sample):
    """
    :type default_args_sample list
    :rtype dict
    """
    parsed_arguments_dict = {}
    default_arguments = list(self._arguments.default_arguments.values())
    expected_length = len(default_arguments)
    real_length = len(default_args_sample)

    default_args_count = len([item for item in default_arguments if item.default is not None])

    if not self._arguments.has_optional_default_argument and (default_args_sample is None or expected_length != real_length):
      raise ArgumentException("Command require {} positional argument(s), found {}".format(
        expected_length,
        real_length
      ))
    elif self._arguments.has_optional_default_argument and default_args_sample is not None and real_length < expected_length - default_args_count:
      raise ArgumentException("Command require {} or {} positional argument(s), found {}".format(
        expected_length,
        expected_length - default_args_count,
        real_length
      ))

    for index in range(0, expected_length):
      arg_meta = default_arguments[index]
      """:type arg_meta ModuleArgumentItem"""
      try:
        arg = default_args_sample[index]
      except IndexError:
        arg = arg_meta.default

      try:
        if arg_meta.value_type is not None:
          arg = self.__convert_value_to_type(arg, arg_meta.value_type)

        parsed_arguments_dict[arg_meta.name] = arg
      except (TypeError, ValueError):
        raise ArgumentException("Invalid argument type - expected {}, got {}".format(arg_meta.value_type.__name__, type(arg).__name__))

    return parsed_arguments_dict