code: def assemble_default_config(modules):
  
      
      def work_in(parent_config, config_name, prefix, module):
          my_config = dict(getattr(module, 'default_config', {}))
          if config_name in parent_config:
              extra_config = parent_config[config_name]
              raise ProgrammerError(
                  'config for {0} already present when about to fetch {3}.default_config (had {1!r} would have set {2!r})'.format(
                      prefix, extra_config, my_config, module))
          parent_config[config_name] = my_config
      return _recurse_config(dict(), modules, work_in)
docs: Build the default configuration from a set of modules.
  
      `modules` is an iterable of
      :class:`yakonfig.configurable.Configurable` objects, or anything
      equivalently typed.  This produces the default configuration from
      that list of modules.
  
      :param modules: modules or Configurable instances to use
      :type modules: iterable of :class:`~yakonfig.configurable.Configurable`
      :return: configuration dictionary