@@ -5,12 +5,37 @@ | |||
<link href="https://larlet.fr/david/" rel="alternate" type="text/html" /> | |||
<link href="https://larlet.fr/david/log/" rel="self" /> | |||
<id>https://larlet.fr/david/</id> | |||
<updated>2019-12-31T12:00:00+01:00</updated> | |||
<updated>2020-01-02T12:00:00+01:00</updated> | |||
<author> | |||
<name>David Larlet</name> | |||
<uri>https://larlet.fr/david/</uri> | |||
</author> | |||
<rights>Copyright (c) 2004-2019, David Larlet</rights> | |||
<rights>Copyright (c) 2004-2020, David Larlet</rights> | |||
<entry xml:lang="fr"> | |||
<title>Briques</title> | |||
<link href="https://larlet.fr/david/stream/2020/01/03/" rel="alternate" type="text/html" /> | |||
<updated>2020-01-03T12:00:00+01:00</updated> | |||
<id>https://larlet.fr/david/stream/2020/01/03/</id> | |||
<summary type="html"><h1>Briques</h1> | |||
<p><em>Expérience d’agrégation de poussières d’idées.</em></p> | |||
<h2 id="2020-01-01">2020-01-01 <a href="https://larlet.fr/david/stream/2020/01/03/#2020-01-01" title="Ancre vers cette partie">•</a></h2><p>Je réfléchis à une nouvelle façon de publier des données. Horodatée, transverse, enrichissable. C’est peut-être ce qui me frustre le plus dans le système actuel : ne pas faire le travail de recoupement, de synthèse a posteriori. Et en même temps c’est dans le chemin tortueux des pensées que réside peut-être la valeur ? (au moins pour moi)</p> | |||
<p>Je reviens à <a href="https://larlet.fr/david/stream/2019/12/10/">mes considérations</a> de notifications de mise à jour. Qui rejoignent des réflexions sur l’agrégation adéquate de ces publications pour leur donner une consistance. Peut-être qu’elles pourraient apparaitre dans un flux avant même d’avoir une URI ?</p> | |||
<p>Je ne sauve pas encore ce fichier, ce serait déjà choisir une orientation. Je ne suis pas pressé.</p> | |||
<h2 id="fragments">Fragments <a href="https://larlet.fr/david/stream/2020/01/03/#fragments" title="Ancre vers cette partie">•</a></h2><p>J’imagine des publications sous forme d’agrégation de blocs ou fragments. Cela me permettrait d’écrire en continu et de ne publier qu’aux moments opportuns. Peut-être que je joue trop aux Lego ces temps-ci.</p> | |||
<p>Je regarde du côté de <a href="https://github.com/lepture/mistune">mistune</a>, j’aime bien leurs <a href="https://mistune.readthedocs.io/en/latest/directives.html#include">directives permettant l’inclusion</a> et le fait que ça soit extensible. La documentation est faible et je sens que je pourrais participer à un moment, et puis il me suffit de lire le code :-).</p> | |||
<p>iAWriter (mon éditeur actuel) propose aussi les <a href="https://ia.net/writer/support/general/content-blocks">Content Blocks</a> qui permettent d’insérer des ressources externes dans du markdown. Est-ce que combiner les deux serait souhaitable ? Je ne voudrais surtout pas introduire une dépendance à l’éditeur qui doit rester un outil annexe dans mon flux.</p> | |||
<h2 id="ancres">Ancres <a href="https://larlet.fr/david/stream/2020/01/03/#ancres" title="Ancre vers cette partie">•</a></h2><p>J’aimerais que chacun des blocs puisse être identifié par une ancre, je vais commencer à jouer avec du code pour voir si c’est possible en étendant <a href="https://github.com/lepture/mistune">mistune</a>.</p> | |||
<p>Est-ce que je veux que mes fragments soient horodatés finalement ? La difficulté s’ils deviennent nombreux va être de les retrouver. Pas sûr qu’une date soit une aide dans ce contexte. Peut-être m’afficher une liste des blocs qui n’ont jamais été intégrés à une publication ?</p> | |||
<h2 id="illusion">Illusion <a href="https://larlet.fr/david/stream/2020/01/03/#illusion" title="Ancre vers cette partie">•</a></h2><blockquote> | |||
<p>Parce que vous vous perdez, votre problème en sera un pour vous. Si vous ne vous perdez pas, même si vous avez des difficultés, il n’existe en fait aucun problème. Vous êtes simplement assis en zazen au milieu de votre problème ; quand vous faites partie du problème, ou quand le problème fait partie de vous, il n’<em>existe</em> pas de problème, parce que vous êtes le problème même. Le problème est vous. S’il en est ainsi, il n’existe pas de problème.</p> | |||
<p>Quand votre vie fait constamment partie de ce qui vous entoure — en d’autres termes, quand vous êtes rappelé à vous-même au moment présent —, il n’existe alors pas de problème. Quand vous commencez à errer dans quelque illusion, ceci est quelque chose de séparé de vous-même, ce qui vous entoure alors n’est plus réel, et votre esprit n’est plus réel. Si vous-même êtes dans l’illusion, ce qui vous entoure est aussi une confuse et brumeuse illusion. Une fois que vous êtes immergé dans l’illusion, l’illusion est sans fin. Vous serez pris dans une suite ininterrompue d’idées tissées d’illusion.</p> | |||
<p>La plupart des gens vivent dans l’illusion, pris dans leur problème, essayant de résoudre leur problème. Mais le simple fait de vivre est vivre dans des problèmes. Et résoudre le problème, c’est en faire partie, faire un avec lui.</p> | |||
<p><cite><em>Esprit Zen, esprit neuf</em>, Shunryu Suzuki</cite></p> | |||
</blockquote> | |||
</summary> | |||
</entry> | |||
<entry xml:lang="en"> | |||
<title>★ Into the sled</title> |
@@ -0,0 +1,11 @@ | |||
# Briques | |||
*Expérience d’agrégation de poussières d’idées.* | |||
.. include:: fragments/2020-01-01.md | |||
.. include:: fragments/Fragments.md | |||
.. include:: fragments/Ancres.md | |||
.. include:: fragments/Illusion.md |
@@ -0,0 +1,45 @@ | |||
<!doctype html><!-- This is a valid HTML5 document. --> | |||
<!-- Screen readers, SEO, extensions and so on. --> | |||
<html lang="fr"> | |||
<!-- Has to be within the first 1024 bytes, hence before the <title> | |||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||
<meta charset="utf-8"> | |||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no"> | |||
<!-- Required to make a valid HTML5 document. --> | |||
<title>Briques — David Larlet</title> | |||
<!-- Lightest blank gif, avoids an extra query to the server. --> | |||
<link rel="icon" href="data:;base64,iVBORw0KGgo="> | |||
<!-- Thank you Florens! --> | |||
<link rel="stylesheet" href="/static/david/css/style_2020-01-03.css"> | |||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" crossorigin> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" crossorigin> | |||
<body class="remarkdown h1-underline h2-underline hr-center ul-star"> | |||
<article> | |||
<h1>Briques</h1> | |||
<p><em>Expérience d’agrégation de poussières d’idées.</em></p> | |||
<h2 id="2020-01-01">2020-01-01 <a href="#2020-01-01" title="Ancre vers cette partie">•</a></h2><p>Je réfléchis à une nouvelle façon de publier des données. Horodatée, transverse, enrichissable. C’est peut-être ce qui me frustre le plus dans le système actuel : ne pas faire le travail de recoupement, de synthèse a posteriori. Et en même temps c’est dans le chemin tortueux des pensées que réside peut-être la valeur ? (au moins pour moi)</p> | |||
<p>Je reviens à <a href="/david/stream/2019/12/10/">mes considérations</a> de notifications de mise à jour. Qui rejoignent des réflexions sur l’agrégation adéquate de ces publications pour leur donner une consistance. Peut-être qu’elles pourraient apparaitre dans un flux avant même d’avoir une URI ?</p> | |||
<p>Je ne sauve pas encore ce fichier, ce serait déjà choisir une orientation. Je ne suis pas pressé.</p> | |||
<h2 id="fragments">Fragments <a href="#fragments" title="Ancre vers cette partie">•</a></h2><p>J’imagine des publications sous forme d’agrégation de blocs ou fragments. Cela me permettrait d’écrire en continu et de ne publier qu’aux moments opportuns. Peut-être que je joue trop aux Lego ces temps-ci.</p> | |||
<p>Je regarde du côté de <a href="https://github.com/lepture/mistune">mistune</a>, j’aime bien leurs <a href="https://mistune.readthedocs.io/en/latest/directives.html#include">directives permettant l’inclusion</a> et le fait que ça soit extensible. La documentation est faible et je sens que je pourrais participer à un moment, et puis il me suffit de lire le code :-).</p> | |||
<p>iAWriter (mon éditeur actuel) propose aussi les <a href="https://ia.net/writer/support/general/content-blocks">Content Blocks</a> qui permettent d’insérer des ressources externes dans du markdown. Est-ce que combiner les deux serait souhaitable ? Je ne voudrais surtout pas introduire une dépendance à l’éditeur qui doit rester un outil annexe dans mon flux.</p> | |||
<h2 id="ancres">Ancres <a href="#ancres" title="Ancre vers cette partie">•</a></h2><p>J’aimerais que chacun des blocs puisse être identifié par une ancre, je vais commencer à jouer avec du code pour voir si c’est possible en étendant <a href="https://github.com/lepture/mistune">mistune</a>.</p> | |||
<p>Est-ce que je veux que mes fragments soient horodatés finalement ? La difficulté s’ils deviennent nombreux va être de les retrouver. Pas sûr qu’une date soit une aide dans ce contexte. Peut-être m’afficher une liste des blocs qui n’ont jamais été intégrés à une publication ?</p> | |||
<h2 id="illusion">Illusion <a href="#illusion" title="Ancre vers cette partie">•</a></h2><blockquote> | |||
<p>Parce que vous vous perdez, votre problème en sera un pour vous. Si vous ne vous perdez pas, même si vous avez des difficultés, il n’existe en fait aucun problème. Vous êtes simplement assis en zazen au milieu de votre problème ; quand vous faites partie du problème, ou quand le problème fait partie de vous, il n’<em>existe</em> pas de problème, parce que vous êtes le problème même. Le problème est vous. S’il en est ainsi, il n’existe pas de problème.</p> | |||
<p>Quand votre vie fait constamment partie de ce qui vous entoure — en d’autres termes, quand vous êtes rappelé à vous-même au moment présent —, il n’existe alors pas de problème. Quand vous commencez à errer dans quelque illusion, ceci est quelque chose de séparé de vous-même, ce qui vous entoure alors n’est plus réel, et votre esprit n’est plus réel. Si vous-même êtes dans l’illusion, ce qui vous entoure est aussi une confuse et brumeuse illusion. Une fois que vous êtes immergé dans l’illusion, l’illusion est sans fin. Vous serez pris dans une suite ininterrompue d’idées tissées d’illusion.</p> | |||
<p>La plupart des gens vivent dans l’illusion, pris dans leur problème, essayant de résoudre leur problème. Mais le simple fait de vivre est vivre dans des problèmes. Et résoudre le problème, c’est en faire partie, faire un avec lui.</p> | |||
<p><cite><em>Esprit Zen, esprit neuf</em>, Shunryu Suzuki</cite></p> | |||
</blockquote> | |||
</article> | |||
<hr> | |||
<nav><a href="/david/">Accueil</a> • <a href="/david/stream/2020/">Stream 2020</a></nav> | |||
</body> | |||
</html> |
@@ -0,0 +1,7 @@ | |||
## 2020-01-01 | |||
Je réfléchis à une nouvelle façon de publier des données. Horodatée, transverse, enrichissable. C’est peut-être ce qui me frustre le plus dans le système actuel : ne pas faire le travail de recoupement, de synthèse a posteriori. Et en même temps c’est dans le chemin tortueux des pensées que réside peut-être la valeur ? (au moins pour moi) | |||
Je reviens à [mes considérations](/david/stream/2019/12/10/) de notifications de mise à jour. Qui rejoignent des réflexions sur l’agrégation adéquate de ces publications pour leur donner une consistance. Peut-être qu’elles pourraient apparaitre dans un flux avant même d’avoir une URI ? | |||
Je ne sauve pas encore ce fichier, ce serait déjà choisir une orientation. Je ne suis pas pressé. |
@@ -0,0 +1,5 @@ | |||
## Ancres | |||
J’aimerais que chacun des blocs puisse être identifié par une ancre, je vais commencer à jouer avec du code pour voir si c’est possible en étendant [mistune](https://github.com/lepture/mistune). | |||
Est-ce que je veux que mes fragments soient horodatés finalement ? La difficulté s’ils deviennent nombreux va être de les retrouver. Pas sûr qu’une date soit une aide dans ce contexte. Peut-être m’afficher une liste des blocs qui n’ont jamais été intégrés à une publication ? |
@@ -0,0 +1,7 @@ | |||
## Fragments | |||
J’imagine des publications sous forme d’agrégation de blocs ou fragments. Cela me permettrait d’écrire en continu et de ne publier qu’aux moments opportuns. Peut-être que je joue trop aux Lego ces temps-ci. | |||
Je regarde du côté de [mistune](https://github.com/lepture/mistune), j’aime bien leurs [directives permettant l’inclusion](https://mistune.readthedocs.io/en/latest/directives.html#include) et le fait que ça soit extensible. La documentation est faible et je sens que je pourrais participer à un moment, et puis il me suffit de lire le code :-). | |||
iAWriter (mon éditeur actuel) propose aussi les [Content Blocks](https://ia.net/writer/support/general/content-blocks) qui permettent d’insérer des ressources externes dans du markdown. Est-ce que combiner les deux serait souhaitable ? Je ne voudrais surtout pas introduire une dépendance à l’éditeur qui doit rester un outil annexe dans mon flux. |
@@ -0,0 +1,9 @@ | |||
## Illusion | |||
> Parce que vous vous perdez, votre problème en sera un pour vous. Si vous ne vous perdez pas, même si vous avez des difficultés, il n’existe en fait aucun problème. Vous êtes simplement assis en zazen au milieu de votre problème ; quand vous faites partie du problème, ou quand le problème fait partie de vous, il n’*existe* pas de problème, parce que vous êtes le problème même. Le problème est vous. S’il en est ainsi, il n’existe pas de problème. | |||
> | |||
> Quand votre vie fait constamment partie de ce qui vous entoure — en d’autres termes, quand vous êtes rappelé à vous-même au moment présent —, il n’existe alors pas de problème. Quand vous commencez à errer dans quelque illusion, ceci est quelque chose de séparé de vous-même, ce qui vous entoure alors n’est plus réel, et votre esprit n’est plus réel. Si vous-même êtes dans l’illusion, ce qui vous entoure est aussi une confuse et brumeuse illusion. Une fois que vous êtes immergé dans l’illusion, l’illusion est sans fin. Vous serez pris dans une suite ininterrompue d’idées tissées d’illusion. | |||
> | |||
> La plupart des gens vivent dans l’illusion, pris dans leur problème, essayant de résoudre leur problème. Mais le simple fait de vivre est vivre dans des problèmes. Et résoudre le problème, c’est en faire partie, faire un avec lui. | |||
> | |||
> <cite>*Esprit Zen, esprit neuf*, Shunryu Suzuki</cite> |
@@ -0,0 +1,34 @@ | |||
<!doctype html><!-- This is a valid HTML5 document. --> | |||
<!-- Screen readers, SEO, extensions and so on. --> | |||
<html lang="fr"> | |||
<!-- Has to be within the first 1024 bytes, hence before the <title> | |||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||
<meta charset="utf-8"> | |||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no"> | |||
<!-- Required to make a valid HTML5 document. --> | |||
<title>Stream 2020 — David Larlet</title> | |||
<!-- Lightest blank gif, avoids an extra query to the server. --> | |||
<link rel="icon" href="data:;base64,iVBORw0KGgo="> | |||
<!-- Thank you Florens! --> | |||
<link rel="stylesheet" href="/static/david/css/style_2020-01-03.css"> | |||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" crossorigin> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" crossorigin> | |||
<body class="remarkdown h1-underline h2-underline hr-center ul-star"> | |||
<h1>Stream 2020</h1> | |||
<article> | |||
<h2><a href="/david/stream/2020/01/03/">Briques</a></h2> | |||
<p><em>Expérience d’agrégation de poussières d’idées.</em></p> | |||
</article> | |||
<hr> | |||
<nav><a href="/david/">Accueil</a></nav> | |||
</body> | |||
</html> |
@@ -0,0 +1,23 @@ | |||
<!doctype html><!-- This is a valid HTML5 document. --> | |||
<!-- Screen readers, SEO, extensions and so on. --> | |||
<html lang="{% block lang %}fr{% endblock lang %}"> | |||
<!-- Has to be within the first 1024 bytes, hence before the <title> | |||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||
<meta charset="utf-8"> | |||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no"> | |||
<!-- Required to make a valid HTML5 document. --> | |||
<title>{% block title %}{% endblock %} — David Larlet</title> | |||
<!-- Lightest blank gif, avoids an extra query to the server. --> | |||
<link rel="icon" href="data:;base64,iVBORw0KGgo="> | |||
<!-- Thank you Florens! --> | |||
<link rel="stylesheet" href="/static/david/css/style_2020-01-03.css"> | |||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" crossorigin> | |||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" crossorigin> | |||
<body class="remarkdown h1-underline h2-underline hr-center ul-star"> | |||
{% block content %}{% endblock content %} | |||
</body> | |||
</html> |
@@ -10,7 +10,16 @@ | |||
<name>David Larlet</name> | |||
<uri>{{ BASE_URL }}</uri> | |||
</author> | |||
<rights>Copyright (c) 2004-2019, David Larlet</rights> | |||
<rights>Copyright (c) 2004-2020, David Larlet</rights> | |||
{% for page in page_list %} | |||
<entry xml:lang="{{ page.lang }}"> | |||
<title>{{ page.escaped_title }}</title> | |||
<link href="{{ page.full_url }}" rel="alternate" type="text/html" /> | |||
<updated>{{ page.normalized_date }}</updated> | |||
<id>{{ page.full_url }}</id> | |||
<summary type="html">{{ page.escaped_content }}</summary> | |||
</entry> | |||
{% endfor %} | |||
{% for post in post_list %} | |||
<entry xml:lang="{{ post.lang }}"> | |||
<title>★ {{ post.escaped_title }}</title> |
@@ -0,0 +1,13 @@ | |||
{% extends "base_2020.html" %} | |||
{% block title %}Stream 2020{% endblock %} | |||
{% block content %} | |||
<h1>Stream 2020</h1> | |||
{% for page in page_list %} | |||
<article> | |||
<h2><a href="{{ page.url }}">{{ page.title }}</a></h2> | |||
{{ page.extract }} | |||
</article> | |||
{% endfor %} | |||
<hr> | |||
<nav><a href="/david/">Accueil</a></nav> | |||
{% endblock content %} |
@@ -0,0 +1,10 @@ | |||
{% extends "base_2020.html" %} | |||
{% block lang %}{{ page.lang }}{% endblock %} | |||
{% block title %}{{ page.title }}{% endblock %} | |||
{% block content %} | |||
<article> | |||
{{ page.content }} | |||
</article> | |||
<hr> | |||
<nav><a href="/david/">Accueil</a> • <a href="/david/stream/2020/">Stream 2020</a></nav> | |||
{% endblock content %} |
@@ -1,3 +1,5 @@ | |||
Jinja2==2.10.3 | |||
Markdown==3.1.1 | |||
minicli==0.4.4 | |||
mistune==2.0.0a2 | |||
python-slugify==4.0.0 |
@@ -13,9 +13,12 @@ from pathlib import Path | |||
from time import perf_counter | |||
import markdown | |||
import mistune | |||
from jinja2 import Environment as Env | |||
from jinja2 import FileSystemLoader | |||
from minicli import cli, run, wrap | |||
from mistune.directives import DirectiveInclude | |||
from slugify import slugify | |||
# Useful for dates rendering within Jinja2. | |||
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") | |||
@@ -26,6 +29,25 @@ DOMAIN = "https://larlet.fr" | |||
# Hardcoding publication at 12 in Paris timezone. | |||
NORMALIZED_STRFTIME = "%Y-%m-%dT12:00:00+01:00" | |||
class CustomHTMLRenderer(mistune.HTMLRenderer): | |||
def heading(self, text, level): | |||
# Set an anchor to h2 headings. | |||
if level == 2: | |||
slug = slugify(text) | |||
return ( | |||
f'<h2 id="{slug}">' | |||
f"{text} " | |||
f'<a href="#{slug}" title="Ancre vers cette partie">•</a>' | |||
f"</h2>" | |||
) | |||
else: | |||
return super().heading(text, level) | |||
mistune_markdown = mistune.create_markdown( | |||
renderer=CustomHTMLRenderer(escape=False), plugins=[DirectiveInclude()] | |||
) | |||
environment = Env(loader=FileSystemLoader(str(DAVID / "templates"))) | |||
@@ -113,6 +135,35 @@ class Note(Item): | |||
return sorted(note_list, key=attrgetter("date"), reverse=True) | |||
@dataclass | |||
class Page(Item): | |||
lang: str = "fr" | |||
def __post_init__(self): | |||
suffix = len(".md") | |||
prefix = len("YYYY/MM-DD") + suffix | |||
date_str = self.file_path[-prefix:-suffix].replace("-", "/") | |||
self.url = f"/david/stream/{date_str}/" | |||
self.date = datetime.strptime(date_str, "%Y/%m/%d").date() | |||
super().__post_init__() | |||
# Extract first paragraph. | |||
body = self.content.split("</h1>", 1)[1] | |||
self.extract = body.split("</p>", 1)[0] + "</p>" | |||
@staticmethod | |||
def all(source): | |||
"""Retrieve all pages sorted by desc.""" | |||
page_list = [] | |||
for file_path in each_markdown_from(source, file_name="*.md"): | |||
if "/fragments/" in file_path: | |||
continue | |||
content = mistune_markdown.read(file_path) | |||
title = content.split("</h1>", 1)[0][len("<h1>") :] | |||
page = Page(title, content, file_path) | |||
page_list.append(page) | |||
return sorted(page_list, reverse=True) | |||
@dataclass | |||
class Post(Item): | |||
date: str | |||
@@ -242,6 +293,22 @@ def blog(): | |||
print(f"Done: http://larlet.test:3579/{post_base}/") | |||
@cli | |||
def pages(): | |||
"""Build the agregations from fragments.""" | |||
root_path = DAVID / "stream" / "2020" | |||
page_list = Page.all(source=root_path) | |||
for page in page_list: | |||
template = environment.get_template("stream_2020_article.html") | |||
content = template.render(page=page) | |||
target_path = Path(page.url[1:]) | |||
target_path.mkdir(parents=True, exist_ok=True) | |||
open(target_path / "index.html", "w").write(content) | |||
template = environment.get_template("stream_2020_archives.html") | |||
content = template.render(page_list=page_list) | |||
open(root_path / "index.html", "w").write(content) | |||
@cli | |||
def home(): | |||
"""Build the home page with last published items.""" | |||
@@ -255,6 +322,7 @@ def feed(): | |||
"""Generate a feed from last published items.""" | |||
template = environment.get_template("feed.xml") | |||
content = template.render( | |||
page_list=Page.all(source=DAVID / "stream" / "2020"), | |||
note_list=Note.all(source=DAVID / "stream" / "2019")[:15], | |||
post_list=Post.all(source=DAVID / "blog")[:5], | |||
current_dt=datetime.now().strftime(NORMALIZED_STRFTIME), |