code: def add_argument(self, name, value_type, item_help, default=None):
      
      if value_type and value_type not in self.__restricted_types:
        raise ArgumentException("Named argument couldn't have {} type".format(value_type.__name__))
  
      if default is not None and not isinstance(default, value_type):
        raise ArgumentException("Invalid default type for argument".format(name))
  
      if value_type is bool and default is None:
        default = False
  
      self._args.update({
        name: ModuleArgumentItem(name, value_type, item_help, default)
      })
      return self
docs: :type name str
      :type value_type Type
      :type item_help str
      :type default Type
      :rtype ModuleArgumentsBuilder