From 5d21399a732901cd79c24dda6568ef4537e944d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 11:50:29 +0200 Subject: [PATCH] Custom markdown filter, 3rd party one wasn't thread safe --- setup.py | 2 +- src/octoprint/server/__init__.py | 4 ++-- src/octoprint/util/jinja.py | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index bf0cb84f..8ff9859f 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ INSTALL_REQUIRES = [ "Flask-Principal>=0.3.5,<0.4", "Flask-Babel>=0.9,<0.10", "Flask-Assets>=0.10,<0.11", - "Flask-Markdown>=0.3,<0.4", + "markdown>=2.6.4,<2.7", "pyserial>=2.7,<2.8", "netaddr>=0.7.17,<0.8", "watchdog>=0.8.3,<0.9", diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index 97d7831b..ec8372c8 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -12,7 +12,6 @@ from flask.ext.login import LoginManager, current_user from flask.ext.principal import Principal, Permission, RoleNeed, identity_loaded, UserNeed from flask.ext.babel import Babel, gettext, ngettext from flask.ext.assets import Environment, Bundle -from flaskext.markdown import Markdown from babel import Locale from watchdog.observers import Observer from watchdog.observers.polling import PollingObserver @@ -649,7 +648,8 @@ class Server(object): response.headers.add("X-Clacks-Overhead", "GNU Terry Pratchett") return response - Markdown(app) + from octoprint.util.jinja import MarkdownFilter + MarkdownFilter(app) def _setup_i18n(self, app): global babel diff --git a/src/octoprint/util/jinja.py b/src/octoprint/util/jinja.py index 1eb31126..12d70461 100644 --- a/src/octoprint/util/jinja.py +++ b/src/octoprint/util/jinja.py @@ -159,3 +159,18 @@ class ExceptionHandlerExtension(Extension): return "Unknown error" trycatch = ExceptionHandlerExtension + + +class MarkdownFilter(object): + + def __init__(self, app, **markdown_options): + self._markdown_options = markdown_options + app.jinja_env.filters.setdefault("markdown", self) + + def __call__(self, stream): + from jinja2 import Markup + from markdown import Markdown + + # Markdown is not thread safe + markdown = Markdown(**self._markdown_options) + return Markup(markdown.convert(stream))