import jinja2
from medium_parser import jinja_env_debug
def raw_render(**kwargs):
for key, value in kwargs.items():
if isinstance(value, str):
kwargs[key] = f"{{% raw %}}{value}{{% endraw %}}"
return kwargs
def parse_markups(
markups: list[dict[str, str | jinja2.Template]]
) -> list[dict[str, str | jinja2.Template]]:
markups_out = []
for markup in markups:
if markup["type"] == "A":
if markup["anchorType"] == "LINK":
target: str = ""
if not markup.get("href", "").startswith("#"):
target = "_blank"
template = jinja_env_debug.from_string(
'{{text}}'
)
template_rendered = template.render(
raw_render(
rel=markup.get("rel", ""),
target=target,
title=markup.get("title", ""),
href=markup["href"],
)
)
elif markup["anchorType"] == "USER":
template = jinja_env_debug.from_string(
'{{text}}'
)
template_rendered = template.render(userId=markup["userId"])
else:
continue
elif markup["type"] == "STRONG":
template_rendered = "{{text}}"
elif markup["type"] == "EM":
template_rendered = "{{text}}"
elif markup["type"] == "CODE":
template_rendered = (
"{{text}}"
)
else:
continue
template = jinja_env_debug.from_string(template_rendered)
markup["template"] = template
markups_out.append(markup)
return markups_out