# Society Self-Service # Copyright © 2018-2020 Yingtong Li (RunasSudo) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import markdown from django.contrib.staticfiles.storage import staticfiles_storage from django.conf import settings from django.urls import reverse from django.utils import timezone from jinja2 import Environment, Markup, select_autoescape import importlib from .mdx_urlize import UrlizeExtension def environment(**options): options['autoescape'] = select_autoescape( disabled_extensions=('txt',), default_for_string=True, default=True, ) env = Environment(**options) env.globals.update({ 'import': importlib.import_module, # forgive me for I have sinned 'localtime': lambda dt: timezone.localtime(dt).strftime('%Y-%m-%d %H:%M'), 'settings': settings, 'static': staticfiles_storage.url, 'url': reverse, 'MEDIA_URL': settings.MEDIA_URL, }) env.filters.update({ 'markdown': lambda x: Markup(markdown.markdown(x, extensions=['nl2br', UrlizeExtension()])) }) return env