docs: def get_params(job_inis, **kw):
      """
      Parse one or more INI-style config files.
  
      :param job_inis:
          List of configuration files (or list containing a single zip archive)
      :param kw:
          Optionally override some parameters
      :returns:
          A dictionary of parameters
      """
      input_zip = None
      if len(job_inis) == 1 and job_inis[0].endswith('.zip'):
          input_zip = job_inis[0]
          job_inis = extract_from_zip(
              job_inis[0], ['job_hazard.ini', 'job_haz.ini',
                            'job.ini', 'job_risk.ini'])
  
      not_found = [ini for ini in job_inis if not os.path.exists(ini)]
      if not_found:  # something was not found
          raise IOError('File not found: %s' % not_found[0])
  
      cp = configparser.ConfigParser()
      cp.read(job_inis)
  
      # directory containing the config files we're parsing
      job_ini = os.path.abspath(job_inis[0])
      base_path = decode(os.path.dirname(job_ini))
      params = dict(base_path=base_path, inputs={'job_ini': job_ini})
      if input_zip:
          params['inputs']['input_zip'] = os.path.abspath(input_zip)
  
      for sect in cp.sections():
          _update(params, cp.items(sect), base_path)
      _update(params, kw.items(), base_path)  # override on demand
  
      if params['inputs'].get('reqv'):
          # using pointsource_distance=0 because of the reqv approximation
          params['pointsource_distance'] = '0'
      return params