docs: def read_config(config_path):
      """
      Loads config data from the specified file path.
      If config_file doesn't exist, returns an empty authentication config
      for localhost.
      """
      section = "DUMMY"
      defaults = {'host': 'localhost',
                  'consumerKey': '', 'consumerSecret': '',
                  'token': '', 'tokenSecret':'',
                  }
      # Insert an section header at the start of the config file,
      # so ConfigParser can understand it
      buf = io.StringIO()
      buf.write('[%s]\n' % section)
      with io.open(config_path, "r") as conf:
          buf.write(conf.read())
  
      buf.seek(0, os.SEEK_SET)
      parser = ConfigParser()
      parser.optionxform = str # Case-sensitive options
      try:
          parser.read_file(buf) # Python3
      except AttributeError:
          parser.readfp(buf) # Python2
  
      # Trim quotes
      config = parser.items(section)
      config = [(item[0].replace('"', ''), item[1].replace('"', ''))
                for item in config]
      config = [(item[0].replace("'", ""), item[1].replace("'", ""))
                for item in config]
      config = dict(config)
  
      # Apply defaults
      for key in defaults:
          if key not in config:
              config[key] = defaults[key]
  
      return config