code: def init_app(self, app, config_group="flask_keystone"):
          
          cfg.CONF.register_opts(RAX_OPTS, group=config_group)
  
          self.logger = logging.getLogger(__name__)
          try:
              logging.register_options(cfg.CONF)
          except cfg.ArgsAlreadyParsedError:  # pragma: no cover
              pass
          logging.setup(cfg.CONF, "flask_keystone")
  
          self.config = cfg.CONF[config_group]
          self.roles = self._parse_roles()
          self.User = self._make_user_model()
          self.Anonymous = self._make_anonymous_model()
          self.logger.debug("Initialized keystone with roles: %s and "
                            "allow_anonymous: %s" % (
                                self.roles,
                                self.config.allow_anonymous_access
                            ))
          app.wsgi_app = auth_token.AuthProtocol(app.wsgi_app, {})
  
          self.logger.debug("Adding before_request request handler.")
          app.before_request(self._make_before_request())
          self.logger.debug("Registering Custom Error Handler.")
          app.register_error_handler(FlaskKeystoneException, handle_exception)
docs: Iniitialize the Flask_Keystone module in an application factory.
  
          :param app: `flask.Flask` application to which to connect.
          :type app: `flask.Flask`
          :param str config_group: :class:`oslo_config.cfg.OptGroup` to which
                                   to attach.
  
          When initialized, the extension will apply the
          :mod:`keystonemiddleware` WSGI middleware to the flask Application,
          attach it's own error handler, and generate a User model based on
          its :mod:`oslo_config` configuration.