|
| 1 | +# ABOUTME: Pelican plugin — for each article and page, also render a v2 copy |
| 2 | +# ABOUTME: at /v2/<slug>/ or /v2/pages/<slug>/ using v2_*.html templates. |
| 3 | + |
| 4 | +from pelican import signals |
| 5 | + |
| 6 | + |
| 7 | +def _v2_article_template(article): |
| 8 | + """Return the v2 template name for a given article based on its Template metadata.""" |
| 9 | + meta_template = article.metadata.get("template", "article") |
| 10 | + if meta_template == "longform_article": |
| 11 | + return "v2_longform_article" |
| 12 | + return "v2_article" |
| 13 | + |
| 14 | + |
| 15 | +def _v2_page_template(page): |
| 16 | + """Return the v2 template name for a given page based on its Template metadata.""" |
| 17 | + meta_template = page.metadata.get("template", "page") |
| 18 | + if meta_template == "inference-economics": |
| 19 | + return "v2_inference_economics" |
| 20 | + return "v2_page" |
| 21 | + |
| 22 | + |
| 23 | +def write_v2_articles(article_generator, writer): |
| 24 | + env = article_generator.env |
| 25 | + for article in article_generator.articles: |
| 26 | + template_name = _v2_article_template(article) |
| 27 | + try: |
| 28 | + template = env.get_template(template_name + ".html") |
| 29 | + except Exception: |
| 30 | + continue |
| 31 | + save_as = "v2/{slug}/index.html".format(slug=article.slug) |
| 32 | + url = "v2/{slug}/".format(slug=article.slug) |
| 33 | + writer.write_file( |
| 34 | + name=save_as, |
| 35 | + template=template, |
| 36 | + context=article_generator.context, |
| 37 | + relative_urls=article_generator.settings.get("RELATIVE_URLS", False), |
| 38 | + article=article, |
| 39 | + category=article.category, |
| 40 | + override_output=True, |
| 41 | + url=url, |
| 42 | + ) |
| 43 | + |
| 44 | + |
| 45 | +def write_v2_pages(page_generator, writer): |
| 46 | + env = page_generator.env |
| 47 | + for page in page_generator.pages: |
| 48 | + template_name = _v2_page_template(page) |
| 49 | + try: |
| 50 | + template = env.get_template(template_name + ".html") |
| 51 | + except Exception: |
| 52 | + continue |
| 53 | + save_as = "v2/pages/{slug}/index.html".format(slug=page.slug) |
| 54 | + url = "v2/pages/{slug}/".format(slug=page.slug) |
| 55 | + writer.write_file( |
| 56 | + name=save_as, |
| 57 | + template=template, |
| 58 | + context=page_generator.context, |
| 59 | + relative_urls=page_generator.settings.get("RELATIVE_URLS", False), |
| 60 | + page=page, |
| 61 | + override_output=True, |
| 62 | + url=url, |
| 63 | + ) |
| 64 | + |
| 65 | + |
| 66 | +def register(): |
| 67 | + signals.article_writer_finalized.connect(write_v2_articles) |
| 68 | + signals.page_writer_finalized.connect(write_v2_pages) |
0 commit comments