def test_init_app(self):
     gravatar = Gravatar()
     if hasattr(self.app, 'extensions'):
         del self.app.extensions
     gravatar.init_app(self.app)
Example #2
0
class AdminLTE(object):
    """
    Attributes:
        app (flask.Flask): Application object.
        manager (Manager): Manager for accessing AdminLTE features.
    """
    def __init__(self, app=None):
        self.app = app
        self.manager = Manager()
        self.flash = Flash()
        self.gravatar = Gravatar(default='mp')

        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        """Initializes the extension."""
        if not hasattr(app, 'extensions'):
            app.extensions = {}

        app.extensions['adminlte_full'] = self

        for name, value in DEFAULT_SETTINGS.items():
            app.config.setdefault(name, value)

        # assets.init_app(app)
        self.gravatar.init_app(app)
        self.manager.user_getter(self.user_getter)
        self.manager.home_page = app.config['ADMINLTE_HOME_PAGE']
        self.init_locale(app)

        self.register_blueprint(app)

        if not app.debug:
            app.register_error_handler(HTTPException, self.error_page)

        for name in filters.__all__:
            app.jinja_env.filters.setdefault(name, getattr(filters, name))

        @app.context_processor
        def processors():
            return dict(
                adminlte=self.manager,
                adminlte_user=self.manager.user,
                ThemeColor=ThemeColor,
                ThemeLayout=ThemeLayout,
            )

        if not hasattr(app.jinja_env, 'install_gettext_callables'):
            app.jinja_env.add_extension('jinja2.ext.i18n')
            app.jinja_env.install_null_translations(True)

    def init_locale(self, app):
        """Initializes the manager to use locales."""
        babel = app.extensions.get('babel')

        if babel is not None:
            self.manager.default_locale = str(babel.default_locale)
            self.manager.locale_getter(lambda: babel.locale_selector_func and
                                       babel.locale_selector_func())
        else:
            self.manager.default_locale = app.config.get(
                'ADMINLTE_DEFAULT_LOCALE')

    def error_page(self, err):
        """Page for all HTTP errors."""
        template = f'adminlte_full/http_error_page.html'
        context = {
            'status_code': err.code,
            'status_message': err.name,
            'details': err.get_description(),
        }
        return render_template(template, **context), err.code

    def register_blueprint(self, app):
        """Registers Blueprint."""
        app.register_blueprint(
            Blueprint('adminlte_full',
                      __name__,
                      static_folder='static',
                      template_folder=pkg_resources.resource_filename(
                          'adminlte_base', 'templates'),
                      static_url_path='/adminlte_full'))

    def user_getter(self):
        """Returns the current user."""
        return current_user, current_app.config['ADMINLTE_USER_MAPPING']