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