class URLSchemeAndHostname:
  """
  Immutable configuration for a given preferred url scheme (e.g. http or https), and a hostname (e.g. localhost:5000)
  """
  def __init__(self, url_scheme, hostname):
    self._url_scheme = url_scheme
    self._hostname = hostname

  @classmethod
  def from_app_config(cls, app_config):
    """
    Helper method to instantiate class from app config, a frequent pattern
    :param app_config:
    :return:
    """
    return cls(app_config['PREFERRED_URL_SCHEME'], app_config['SERVER_HOSTNAME'])

  @property
  def url_scheme(self):
    return self._url_scheme

  @property
  def hostname(self):
    return self._hostname

  def get_url(self):
    """ Returns the application's URL, based on the given url scheme and hostname. """
    return '%s://%s' % (self._url_scheme, self._hostname)