Progress.
This commit is contained in:
parent
2ba55f692d
commit
18b76ebd5e
@ -2,11 +2,12 @@ import pathlib
|
|||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from app.app import Application as BaseApplication
|
from app.app import Application as BaseApplication
|
||||||
|
from snek.docs.app import Application as DocsApplication
|
||||||
from app.cache import time_cache_async
|
from app.cache import time_cache_async
|
||||||
from jinja_markdown2 import MarkdownExtension
|
|
||||||
from snek.mapper import get_mappers
|
from snek.mapper import get_mappers
|
||||||
from snek.service import get_services
|
from snek.service import get_services
|
||||||
from snek.system import http
|
from snek.system import http
|
||||||
|
from snek.system.markdown import MarkdownExtension
|
||||||
from snek.system.middleware import cors_middleware
|
from snek.system.middleware import cors_middleware
|
||||||
from snek.view.about import AboutHTMLView, AboutMDView
|
from snek.view.about import AboutHTMLView, AboutMDView
|
||||||
from snek.view.docs import DocsHTMLView, DocsMDView
|
from snek.view.docs import DocsHTMLView, DocsMDView
|
||||||
@ -59,6 +60,8 @@ class Application(BaseApplication):
|
|||||||
self.router.add_get("/http-get", self.handle_http_get)
|
self.router.add_get("/http-get", self.handle_http_get)
|
||||||
self.router.add_get("/http-photo", self.handle_http_photo)
|
self.router.add_get("/http-photo", self.handle_http_photo)
|
||||||
|
|
||||||
|
self.add_subapp("/docs", DocsApplication(path=pathlib.Path(__file__).parent.joinpath("docs")))
|
||||||
|
|
||||||
async def handle_test(self, request):
|
async def handle_test(self, request):
|
||||||
|
|
||||||
return await self.render_template(
|
return await self.render_template(
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
# Original source: https://brandonjay.dev/posts/2021/render-markdown-html-in-python-with-jinja2
|
# Original source: https://brandonjay.dev/posts/2021/render-markdown-html-in-python-with-jinja2
|
||||||
|
|
||||||
|
from types import SimpleNamespace
|
||||||
from mistune import escape
|
from mistune import escape
|
||||||
from mistune import Markdown
|
from mistune import Markdown
|
||||||
from mistune import HTMLRenderer
|
from mistune import HTMLRenderer
|
||||||
@ -12,6 +13,8 @@ import functools
|
|||||||
from app.cache import time_cache_async
|
from app.cache import time_cache_async
|
||||||
|
|
||||||
class MarkdownRenderer(HTMLRenderer):
|
class MarkdownRenderer(HTMLRenderer):
|
||||||
|
|
||||||
|
_allow_harmful_protocols = True
|
||||||
def __init__(self, app, template):
|
def __init__(self, app, template):
|
||||||
self.template = template
|
self.template = template
|
||||||
|
|
||||||
@ -45,4 +48,29 @@ def render_markdown_sync(app, markdown_string):
|
|||||||
|
|
||||||
@time_cache_async(120)
|
@time_cache_async(120)
|
||||||
async def render_markdown(app, markdown_string):
|
async def render_markdown(app, markdown_string):
|
||||||
return render_markdown_sync(app,markdown_string)
|
return render_markdown_sync(app,markdown_string)
|
||||||
|
|
||||||
|
from jinja2 import nodes, TemplateSyntaxError
|
||||||
|
from jinja2.ext import Extension
|
||||||
|
from jinja2.nodes import Const
|
||||||
|
|
||||||
|
# Source: https://ron.sh/how-to-write-a-jinja2-extension/
|
||||||
|
class MarkdownExtension(Extension):
|
||||||
|
tags = {'markdown'}
|
||||||
|
|
||||||
|
def __init__(self, environment):
|
||||||
|
self.app = SimpleNamespace(jinja2_env=environment)
|
||||||
|
super(MarkdownExtension, self).__init__(environment)
|
||||||
|
|
||||||
|
def parse(self, parser):
|
||||||
|
line_number = next(parser.stream).lineno
|
||||||
|
md_file = [Const('')]
|
||||||
|
body = ''
|
||||||
|
try:
|
||||||
|
md_file = [parser.parse_expression()]
|
||||||
|
except TemplateSyntaxError:
|
||||||
|
body = parser.parse_statements(['name:endmarkdown'], drop_needle=True)
|
||||||
|
return nodes.CallBlock(self.call_method('_to_html', md_file), [], [], body).set_lineno(line_number)
|
||||||
|
|
||||||
|
def _to_html(self, md_file, caller):
|
||||||
|
return render_markdown_sync(self.app,caller())
|
@ -16,7 +16,7 @@
|
|||||||
<fancy-button url="/register.html" text="Register"></fancy-button>
|
<fancy-button url="/register.html" text="Register"></fancy-button>
|
||||||
<a href="/about.html">Design choices</a>
|
<a href="/about.html">Design choices</a>
|
||||||
<a href="/web.html">App preview</a>
|
<a href="/web.html">App preview</a>
|
||||||
<a href="/docs.html">API docs</a>
|
<a href="/docs/docs/">API docs</a>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user