docs: def make_backup_files(*,
                        mongodump=MONGODB_DEFAULT_MONGODUMP,
                        hosts={},
                        host_defaults={},
                        dry_run=False,
                        **kwargs):
      """
      Backup all specified databases into a gzipped tarball via mongodump
  
      :param mongodump(str, optional): Path to mongodump executable
      :param hosts(dict, optional): A dict containing hosts info to be backed up
      :param host_defaults(dict, optional): Default values applied to each host
      :param dry_run(bool, optional): Whether to activate dry run mode
      :param \*\*kwargs: arbitrary keyword arguments
      :raises TypeError: if an argument in kwargs does not have the type expected
      :raises ValueError: if an argument within kwargs has an invalid value
      """
  
      # Output directory
      output_dir = fs.get_output_dir()
  
      # Type checks
      utils.chkstr(mongodump, 'mongodump')
  
      # List of mongodb hosts holding databases
      mongodb_hosts = hosts
      if len(mongodb_hosts) == 0:
          raise ValueError("No mongodb 'hosts' specified!")
  
      # Default values applied to each host if necessary,
      # this setting takes effect on a 'cascade' fashion.
      mongodb_defaults = host_defaults
  
      # Collected list of files generated by _make_backup_file
      mongodump_files = {}
  
      # Backup cycle for each mongodb host
      for mongodb_host_name, mongodb_host in mongodb_hosts.items():
  
          if type(mongodb_host) != dict:
              raise TypeError("mongodb_host '{name}' must be dict"
                              .format(name=mongodb_host_name))
  
          # For each host, its 'address' is essential
          if 'address' not in mongodb_host:
              raise KeyError("No 'address' specified!")
          utils.chkstr(mongodb_host['address'], 'address')
  
          """
          For these keys, the value is going to be set in
          in a 'cascade' fashion, if the value is not already set,
          its value is going to be picked from the 'defaults'(mongodb_defaults)
          sub-section within 'mongodb', as a last resort, its hardcoded default
          value is going to be picked.
          """
          # TODO: there has to be something better than this
          _set_mongodb_host_val('user_name', MONGODB_DEFAULT_USER,
                                mongodb_host, mongodb_defaults)
          _set_mongodb_host_val('password', MONGODB_DEFAULT_PWD,
                                mongodb_host, mongodb_defaults)
          _set_mongodb_host_val('port', MONGODB_DEFAULT_PORT,
                                mongodb_host, mongodb_defaults)
          _set_mongodb_host_val('auth_db', MONGODB_DEFAULT_AUTH,
                                mongodb_host, mongodb_defaults)
  
          """Merge dbs list with that of the host_defaults section (if any)"""
          if 'dbs' in mongodb_defaults:
              if 'dbs' in mongodb_host:
                  mongodb_host['dbs'] = _merge_dbs(mongodb_defaults['dbs'],
                                                   mongodb_host['dbs'])
              else:
                  mongodb_host['dbs'] = mongodb_defaults['dbs']
  
          # Add the file name to the list to be returned
          mongodump_files[mongodb_host_name] = _make_backup_file(dry_run=dry_run, mongodump=mongodump,
                                                                 output_dir=output_dir, name=mongodb_host_name,
                                                                 **mongodb_host)
      # .. and finally, give it
      return mongodump_files