jinja: fixing async bug

This commit is contained in:
ZhymabekRoman 2024-06-22 12:41:32 +05:00
parent 437c8b7339
commit d8983ce642
7 changed files with 30 additions and 36 deletions

View file

@ -252,21 +252,21 @@ class MediumParser:
if out_paragraphs:
css_class.append("pt-12")
header_template = jinja_env.from_string('<h2 class="font-bold font-sans break-normal text-gray-900 dark:text-gray-100 text-1xl md:text-2xl {{ css_class }}">{{ text }}</h2>')
header_template_rendered = await header_template.render_async(text=text_formater.get_text(), css_class="".join(css_class))
header_template_rendered = header_template.render(text=text_formater.get_text(), css_class="".join(css_class))
out_paragraphs.append(header_template_rendered)
elif paragraph["type"] == "H3":
css_class = []
if out_paragraphs:
css_class.append("pt-12")
header_template = jinja_env.from_string('<h3 class="font-bold font-sans break-normal text-gray-900 dark:text-gray-100 text-1xl md:text-2xl {{ css_class }}">{{ text }}</h3>')
header_template_rendered = await header_template.render_async(text=text_formater.get_text(), css_class="".join(css_class))
header_template_rendered = header_template.render(text=text_formater.get_text(), css_class="".join(css_class))
out_paragraphs.append(header_template_rendered)
elif paragraph["type"] == "H4":
css_class = []
if out_paragraphs:
css_class.append("pt-8")
header_template = jinja_env.from_string('<h4 class="font-bold font-sans break-normal text-gray-900 dark:text-gray-100 text-l md:text-xl {{ css_class }}">{{ text }}</h4>')
header_template_rendered = await header_template.render_async(text=text_formater.get_text(), css_class="".join(css_class))
header_template_rendered = header_template.render(text=text_formater.get_text(), css_class="".join(css_class))
out_paragraphs.append(header_template_rendered)
elif paragraph["type"] == "IMG":
image_template = jinja_env.from_string(
@ -276,20 +276,20 @@ class MediumParser:
if paragraph["layout"] == "OUTSET_ROW":
image_templates_row = []
img_row_template = jinja_env.from_string('<div class="mx-5"><div class="flex flex-row justify-center">{{ images }}</div></div>')
image_template_rendered = await image_template.render_async(paragraph=paragraph)
image_template_rendered = image_template.render(paragraph=paragraph)
image_templates_row.append(image_template_rendered)
_tmp_current_pos = current_pos + 1
while len(paragraphs) > _tmp_current_pos:
_paragraph = paragraphs[_tmp_current_pos]
if _paragraph["layout"] == "OUTSET_ROW_CONTINUE":
image_template_rendered = await image_template.render_async(paragraph=_paragraph)
image_template_rendered = image_template.render(paragraph=_paragraph)
image_templates_row.append(image_template_rendered)
else:
break
_tmp_current_pos += 1
img_row_template_rendered = await img_row_template.render_async(images="".join(image_templates_row))
img_row_template_rendered = img_row_template.render(images="".join(image_templates_row))
out_paragraphs.append(img_row_template_rendered)
current_pos = _tmp_current_pos - 1
@ -298,10 +298,10 @@ class MediumParser:
current_pos += 1
continue
else:
image_template_rendered = await image_template.render_async(paragraph=paragraph)
image_template_rendered = image_template.render(paragraph=paragraph)
out_paragraphs.append(image_template_rendered)
if paragraph["text"]:
out_paragraphs.append(await image_caption_template.render_async(text=text_formater.get_text()))
out_paragraphs.append(image_caption_template.render(text=text_formater.get_text()))
elif paragraph["type"] == "P":
css_class = ["leading-8"]
paragraph_template = jinja_env.from_string('<p class="{{ css_class }}">{{ text }}</p>')
@ -309,7 +309,7 @@ class MediumParser:
css_class.append("mt-3")
else:
css_class.append("mt-7")
paragraph_template_rendered = await paragraph_template.render_async(text=text_formater.get_text(), css_class=" ".join(css_class))
paragraph_template_rendered = paragraph_template.render(text=text_formater.get_text(), css_class=" ".join(css_class))
out_paragraphs.append(paragraph_template_rendered)
elif paragraph["type"] == "ULI":
uli_template = jinja_env.from_string('<ul class="list-disc pl-8 mt-2">{{ li }}</ul>')
@ -321,14 +321,14 @@ class MediumParser:
_paragraph = paragraphs[_tmp_current_pos]
if _paragraph["type"] == "ULI":
text_formater = parse_paragraph_text(_paragraph["text"], _paragraph["markups"])
li_template_rendered = await li_template.render_async(text=text_formater.get_text())
li_template_rendered = li_template.render(text=text_formater.get_text())
li_templates.append(li_template_rendered)
else:
break
_tmp_current_pos += 1
uli_template_rendered = await uli_template.render_async(li="".join(li_templates))
uli_template_rendered = uli_template.render(li="".join(li_templates))
out_paragraphs.append(uli_template_rendered)
current_pos = _tmp_current_pos - 1
@ -342,14 +342,14 @@ class MediumParser:
_paragraph = paragraphs[_tmp_current_pos]
if _paragraph["type"] == "OLI":
text_formater = parse_paragraph_text(_paragraph["text"], _paragraph["markups"])
li_template_rendered = await li_template.render_async(text=text_formater.get_text())
li_template_rendered = li_template.render(text=text_formater.get_text())
li_templates.append(li_template_rendered)
else:
break
_tmp_current_pos += 1
ol_template_rendered = await ol_template.render_async(li="".join(li_templates))
ol_template_rendered = ol_template.render(li="".join(li_templates))
out_paragraphs.append(ol_template_rendered)
current_pos = _tmp_current_pos - 1
@ -376,8 +376,8 @@ class MediumParser:
_tmp_current_pos += 1
code_block_template_rendered = await code_block_template.render_async(text="\n".join(code_list), code_css_class=" ".join(code_css_class))
pre_template_rendered = await pre_template.render_async(code_block=code_block_template_rendered)
code_block_template_rendered = code_block_template.render(text="\n".join(code_list), code_css_class=" ".join(code_css_class))
pre_template_rendered = pre_template.render(code_block=code_block_template_rendered)
out_paragraphs.append(pre_template_rendered)
current_pos = _tmp_current_pos - 1
@ -385,12 +385,12 @@ class MediumParser:
bq_template = jinja_env.from_string(
'<blockquote style="box-shadow: inset 3px 0 0 0 rgb(209 207 239 / var(--tw-bg-opacity));" class="px-5 pt-3 pb-3 mt-5"><p class="font-italic">{{ text }}</p></blockquote>'
)
bq_template_rendered = await bq_template.render_async(text=text_formater.get_text())
bq_template_rendered = bq_template.render(text=text_formater.get_text())
logger.trace(bq_template_rendered)
out_paragraphs.append(bq_template_rendered)
elif paragraph["type"] == "PQ":
pq_template = jinja_env.from_string('<blockquote class="mt-7 text-2xl ml-5 text-gray-600 dark:text-gray-300"><p>{{ text }}</p></blockquote>')
pq_template_rendered = await pq_template.render_async(text=text_formater.get_text())
pq_template_rendered = pq_template.render(text=text_formater.get_text())
logger.trace(pq_template_rendered)
out_paragraphs.append(pq_template_rendered)
elif paragraph["type"] == "MIXTAPE_EMBED":
@ -433,13 +433,13 @@ class MediumParser:
logger.trace(f"{embed_site=}")
embed_template_rendered = await embed_template.render_async(paragraph=paragraph, url=url, embed_title=embed_title, embed_description=embed_description, embed_site=embed_site)
embed_template_rendered = embed_template.render(paragraph=paragraph, url=url, embed_title=embed_title, embed_description=embed_description, embed_site=embed_site)
out_paragraphs.append(embed_template_rendered)
elif paragraph["type"] == "IFRAME":
iframe_template = jinja_env.from_string(
'<div class="mt-7"><iframe class="lazy w-full" data-src="{{ host_address }}/render_iframe/{{ iframe_id }}" allowfullscreen="" frameborder="0" scrolling="no"></iframe></div>'
)
iframe_template_rendered = await iframe_template.render_async(host_address=self.host_address, iframe_id=paragraph["iframe"]["mediaResource"]["id"])
iframe_template_rendered = iframe_template.render(host_address=self.host_address, iframe_id=paragraph["iframe"]["mediaResource"]["id"])
out_paragraphs.append(iframe_template_rendered)
else:
@ -508,7 +508,7 @@ class MediumParser:
if collection:
post_page_title_raw += " | in {{ collection.name }}"
post_page_title = jinja_env.from_string(post_page_title_raw)
post_page_title_rendered = await post_page_title.render_async(title=title, creator=creator, collection=collection)
post_page_title_rendered = post_page_title.render(title=title, creator=creator, collection=collection)
post_context = {
"subtitle": subtitle,
@ -524,7 +524,7 @@ class MediumParser:
"content": content,
"tags": tags,
}
post_template_rendered = await post_template.render_async(post_context)
post_template_rendered = post_template.render(post_context)
return HtmlResult(post_page_title_rendered, description, url, post_template_rendered)

View file

@ -9,5 +9,4 @@ fastapi==0.108.0
gunicorn==21.2.0
redis[hiredis]==4.6.0
xkcdpass==1.19.3
apscheduler==3.10.4
nest-asyncio==1.6.0
apscheduler==3.10.4

View file

@ -1,11 +1,6 @@
import nest_asyncio
nest_asyncio.apply()
from loguru import logger
import pickledb
from multiprocessing import Value
import logging
from contextvars import ContextVar
from typing import Optional

View file

@ -52,8 +52,8 @@ async def route_processing(path: str, request: Request):
@trace
async def main_page():
postleter_template = await render_postleter(as_html=True)
main_template_rendered = await main_template.render_async(postleter=postleter_template)
base_template_rendered = await base_template.render_async(body_template=main_template_rendered, HOST_ADDRESS=config.HOST_ADDRESS)
main_template_rendered = main_template.render(postleter=postleter_template)
base_template_rendered = base_template.render(body_template=main_template_rendered, HOST_ADDRESS=config.HOST_ADDRESS)
parsed_template = parse(base_template_rendered)
serialized_template = serialize(parsed_template, encoding='utf-8')
return HTMLResponse(serialized_template)

View file

@ -41,7 +41,7 @@ async def render_postleter(limit: int = 30, as_html: bool = False):
await asyncio.gather(*tasks)
postleter_template_rendered = await postleter_template.render_async(post_list=outlet_posts_list)
postleter_template_rendered = postleter_template.render(post_list=outlet_posts_list)
if as_html:
return postleter_template_rendered
return HTMLResponse(postleter_template_rendered)
@ -97,7 +97,7 @@ async def render_medium_post_link(path: str, use_cache: bool = True, use_redis:
"title": rendered_medium_post.title,
"description": rendered_medium_post.description,
}
rendered_post = await base_template.render_async(base_context, HOST_ADDRESS=config.HOST_ADDRESS)
rendered_post = base_template.render(base_context, HOST_ADDRESS=config.HOST_ADDRESS)
parsed_rendered_post = parse(rendered_post)
serialized_rendered_post = serialize(parsed_rendered_post, encoding="utf-8")

View file

@ -1,8 +1,8 @@
from jinja2 import Environment, DebugUndefined, FileSystemLoader
jinja_env = Environment(enable_async=True)
jinja_env = Environment()
jinja_safe_env = Environment(undefined=DebugUndefined)
template_env = Environment(loader=FileSystemLoader("./server/templates"), enable_async=True)
template_env = Environment(loader=FileSystemLoader("./server/templates"))
template_safe_env = Environment(loader=FileSystemLoader("./server/templates"), undefined=DebugUndefined)
base_template = template_env.get_template("base.html")

View file

@ -35,11 +35,11 @@ async def generate_error(error_msg: str = None, title: str = "Error", status_cod
if not quiet:
send_message(f"📛 Error while processing url: <code>{url_correlation.get()}</code>, transponder_code: <code>{transponder_code_correlation.get()}</code>, error: <code>{error_msg}</code>")
error_template_rendered = await error_template.render_async(error_msg=error_msg, transponder_code=transponder_code_correlation.get())
error_template_rendered = error_template.render(error_msg=error_msg, transponder_code=transponder_code_correlation.get())
base_context = {
"enable_ads_header": config.ENABLE_ADS_BANNER,
"body_template": error_template_rendered,
"title": title,
}
base_template_rendered = await base_template.render_async(base_context, HOST_ADDRESS=config.HOST_ADDRESS)
base_template_rendered = base_template.render(base_context, HOST_ADDRESS=config.HOST_ADDRESS)
return HTMLResponse(base_template_rendered, status_code=status_code)