From 5bf5e093bbb0236a67a94d9da458deb963188200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malthe=20J=C3=B8rgensen?= Date: Mon, 6 Jun 2016 17:10:43 +0200 Subject: [PATCH] [Add] `init_app()`-method to DebugPanel base class Adds a method `DebugPanel.init_app()` that gets called from `DebugToolbar.init_app()`. This allows DebugPanels to register their own routes, and do setup work that should go across requests (as opposed to per-request setup) and needs access to the Flask `app`-object. --- src/flask_debugtoolbar/panels/__init__.py | 23 +++++++++++++++++++++++ src/flask_debugtoolbar/toolbar.py | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/flask_debugtoolbar/panels/__init__.py b/src/flask_debugtoolbar/panels/__init__.py index 23daabe..6dab5bd 100644 --- a/src/flask_debugtoolbar/panels/__init__.py +++ b/src/flask_debugtoolbar/panels/__init__.py @@ -25,6 +25,29 @@ class DebugPanel(object): # If the client enabled the panel self.is_active = False + @classmethod + def init_app(cls, app): + """Method that can be overridden by child classes. + Can be used for setting up additional URL-rules/routes. + + Example:: + + class UMLDiagramPanel(DebugPanel): + + @classmethod + def init_app(cls, app): + app.add_url_rule( + '/_flask_debugtoolbar_umldiagram/', + '_flask_debugtoolbar_umldiagram.serve_generated_image', + cls.serve_generated_image + ) + + @classmethod + def serve_generated_image(cls, app): + return Response(...) + """ + pass + def render(self, template_name, context): template = self.jinja_env.get_template(template_name) return template.render(**context) diff --git a/src/flask_debugtoolbar/toolbar.py b/src/flask_debugtoolbar/toolbar.py index 0d38f4a..444283d 100644 --- a/src/flask_debugtoolbar/toolbar.py +++ b/src/flask_debugtoolbar/toolbar.py @@ -48,8 +48,8 @@ class DebugToolbar(object): @classmethod def load_panels(cls, app): for panel_class in cls._iter_panels(app): - # just loop to make sure they've been loaded - pass + # Call `.init_app()` on panels + panel_class.init_app(app) @classmethod def _iter_panels(cls, app):