clean up code; support code block; add few FIXMEs

This commit is contained in:
Mathieu PATUREL
2019-11-14 21:13:16 +11:00
parent ef9b2daf6d
commit cc28bfef96
5 changed files with 23 additions and 14 deletions

View File

@ -1,15 +1,16 @@
import os.path
import concurrent.futures
import urllib.request
import base64
import os.path
import bs4
from functools import lru_cache, partial
from bs4 import BeautifulSoup
from .lib.markdown2 import Markdown
__all__ = ('markdown2html', )
markdowner = Markdown()
markdowner = Markdown(extras=['fenced-code-blocks'])
# FIXME: how do I choose how many workers I want? Does thread pool reuse threads or
# does it stupidly throw them out? (we could implement something of our own)
@ -32,7 +33,7 @@ def markdown2html(markdown, basepath, re_render):
"""
html = markdowner.convert(markdown)
soup = BeautifulSoup(html, "html.parser")
soup = bs4.BeautifulSoup(html, "html.parser")
for img_element in soup.find_all('img'):
src = img_element['src']
@ -54,7 +55,6 @@ def markdown2html(markdown, basepath, re_render):
try:
base64 = get_base64_image(path, re_render)
except FileNotFoundError as e:
print("{!r} not found {!r}".format(path, e))
base64 = BASE64_404_IMAGE
except LoadingError:
# the image is loading
@ -64,6 +64,12 @@ def markdown2html(markdown, basepath, re_render):
# FIXME: how do tables look? should we use ascii tables?
# FIXME: pre aren't handled by ST3. The require manual adjustment
# FIXME: include a stylesheet
# FIXME: remove the comments, because they pollute the console with error messages
return str(soup)
def get_base64_image(path, re_render):
@ -83,7 +89,7 @@ def get_base64_image(path, re_render):
if path in images_cache:
return images_cache[path]
executor.submit(load_image, path).add_done_callback(partial(callback, path))
return 'loading of the internet!'
raise LoadingError()
with open(path, 'rb') as fp:
return 'data:image/png;base64,' + base64.b64encode(fp.read()).decode('utf-8')
@ -98,4 +104,4 @@ def load_image(url):
content_type = conn.info().get_content_type()
if 'image' not in content_type:
raise ValueError("{!r} doesn't point to an image, but to a {!r}".format(url, content_type))
return 'data:image/png;base64,' + base64.b64encode(conn.read()).decode('utf-8')
return 'data:image/png;base64,' + base64.b64encode(conn.read()).decode('utf-8')