docs: def load_config(app_name, *args, **kwargs):
      """
      Given a path to a file, parse its lines in ini-like format, and then
      set them in the current namespace.
  
      Quiet by default. Set verbose to True to see the absolute path to the config
      files printed on stderr.
      """
      configure_logging()
  
      # compatible with Python 2 and 3.
      prefix = kwargs.get('prefix', 'etc')
      verbose = kwargs.get('verbose', False)
      location = kwargs.get('location', None)
      passphrase = kwargs.get('passphrase',
          os.getenv("%s_SETTINGS_CRYPT_KEY" % app_name.upper(),
              os.getenv("SETTINGS_CRYPT_KEY", None)))
      confnames = args
  
      if not location:
          location = os.getenv("%s_SETTINGS_LOCATION" % app_name.upper(), None)
      if not location:
          location = os.getenv("SETTINGS_LOCATION", None)
          if location:
              location = "%s/%s" % (location, app_name)
  
      config = {}
      for confname in confnames:
          content = None
          if location and location.startswith('s3://'):
              try:
                  import boto
                  _, bucket_name, prefix = urlparse(location)[:3]
                  try:
                      conn = boto.connect_s3()
                      bucket = conn.get_bucket(bucket_name)
                      key_name = '%s/%s' % (prefix, confname)
                      key = bucket.get_key(key_name)
                      content = key.get_contents_as_string()
                      if verbose:
                          LOGGER.info("config loaded from 's3://%s/%s'",
                              bucket_name, key_name)
                  except (boto.exception.NoAuthHandlerFound,
                          boto.exception.S3ResponseError) as _:
                      pass
              except ImportError:
                  pass
  
          # We cannot find a deployutils S3 bucket. Let's look on the filesystem.
          if not content:
              confpath = locate_config(
                  confname, app_name, location=location,
                  prefix=prefix, verbose=verbose)
              if confpath:
                  with open(confpath, 'rb') as conffile:
                      content = conffile.read()
  
          if content:
              if passphrase:
                  content = crypt.decrypt(content, passphrase)
              if hasattr(content, 'decode'):
                  content = content.decode('utf-8')
              for line in content.split('\n'):
                  if not line.startswith('#'):
                      look = re.match(r'(\w+)\s*=\s*(.*)', line)
                      if look:
                          try:
                              # We used to parse the file line by line.
                              # Once Django 1.5 introduced ALLOWED_HOSTS
                              # (a tuple that definitely belongs to the site.conf
                              # set), we had no choice other than resort
                              # to eval(value, {}, {}).
                              # We are not resorting to import conf module yet
                              # but that might be necessary once we use
                              # dictionary configs for some of the apps...
                              # TODO: consider using something like ConfigObj
                              # for this:
                              # http://www.voidspace.org.uk/python/configobj.html
                              #pylint:disable=eval-used
                              config.update({look.group(1).upper():
                                  eval(look.group(2), {}, {})})
                          except Exception:
                              raise
  
      return config