=========== Application =========== Minimal application setup ------------------------- To create a Flask application using Flask-PluginEngine we need to define it as a ``PluginFlask`` application. It's a regular ``Flask`` application object that can handle plugins:: from flask_pluginengine import PluginFlask app = PluginFlask(__name__) @app.route("/") def hello(): return "Hello world!" if __name__ == "__main__": app.run() Now we need to set up the configuration, specifically the namespace of the plugins and the plugins we want to use. Let's use the ``example_plugin`` we created before. For example:: app.config['PLUGINENGINE_NAMESPACE'] = 'example' app.config['PLUGINENGINE_PLUGINS'] = ['example_plugin'] Next we need to create an instance of PluginEngine for our app and load the plugins:: plugin_engine = PluginEngine(app=app) plugin_engine.load_plugins(app) Then, we can access the loaded plugins by calling the :func:`get_active_plugins` method, which will return a dictionary containing the active plugins.:: active_plugins = plugin_engine.get_active_plugins(app=app).values() To check if all of the plugins were loaded correctly we can also call the :func:`get_failed_plugins` method that will return a dictionary with plugins that failed to load. Example application functionality --------------------------------- To understand the possibilities of Flask-PluginEngine we will create a Jinja template where we will list all the plugins we are using. Let's create two templates, ``base.html`` and ``index.html``. Our files should be structured like below, where ``app.py`` is the file with the application code: .. code-block:: text app ├── app.py └── templates ├── base.html └── index.html base.html :: Flask-PluginEngine example {% block content %} {% endblock %} index.html :: {% extends 'base.html' %} {% block content %} {% for plugin in plugins %}
{{ plugin.title }} - {{ plugin.description }}
{% endfor %} {% endblock %} And let's pass the plugins, when rendering the template in our application:: @app.route("/") def hello(): return render_template('index.html', plugins=active_plugins) Now what we should also do is to register the blueprints of all our plugins, for instance:: for plugin in active_plugins: with plugin.plugin_context(): app.register_blueprint(plugin.get_blueprint()) So our application code looks like this:: from flask import render_template from flask_pluginengine import PluginFlask, PluginEngine app = PluginFlask(__name__) app.config['PLUGINENGINE_NAMESPACE'] = 'example' app.config['PLUGINENGINE_PLUGINS'] = ['example_plugin'] plugin_engine = PluginEngine(app=app) plugin_engine.load_plugins(app) active_plugins = plugin_engine.get_active_plugins(app=app).values() for plugin in active_plugins: with plugin.plugin_context(): app.register_blueprint(plugin.get_blueprint()) @app.route('/') def hello(): return render_template('index.html', plugins=active_plugins) if __name__ == '__main__': app.run() Now when we go to the index page of our application we can access the plugin's template. We can also directly access it if we go to `/plugin`. You can find the source code of the application in the `example folder `_. Configuring Flask-PluginEngine ------------------------------ The following configuration values exist for Flask-PluginEngine: ====================================== =========================================== ``PLUGINENGINE_NAMESPACE`` Specifies a namespace of the plugins ``PLUGINENGINE_PLUGINS`` List of plugins the application will be using ====================================== ===========================================