Compare commits

...

6 Commits

4 changed files with 36 additions and 23 deletions

View File

@@ -1,12 +1,13 @@
import glob import glob
import shutil import shutil
import datetime import datetime
import textwrap import textwrap
from pathlib import Path from pathlib import Path
from blog.page import Page from blog.page import Page
from blog.config import Config from blog.config import Config
from jinja2 import Environment, FileSystemLoader, Template from jinja2 import Environment, FileSystemLoader, Template
class Blog: class Blog:
def __init__(self, conf: Config): def __init__(self, conf: Config):
@@ -69,7 +70,8 @@ class Blog:
if updated < date: if updated < date:
updated = date updated = date
articles += textwrap.indent( articles += textwrap.indent(
textwrap.dedent(f"""\ textwrap.dedent(
f"""\
<entry> <entry>
<title>{self.pages[filename].title}</title> <title>{self.pages[filename].title}</title>
<link href="{self.conf.url}/pages/{filename}.html"/> <link href="{self.conf.url}/pages/{filename}.html"/>
@@ -81,10 +83,13 @@ class Blog:
</div> </div>
</content> </content>
</entry> </entry>
"""), """
" ") ),
" ",
)
header = textwrap.dedent(f""" <?xml version="1.0" encoding="utf-8"?> header = textwrap.dedent(
f""" <?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"> <feed xmlns="http://www.w3.org/2005/Atom">
<title>{self.conf.title}</title> <title>{self.conf.title}</title>
<subtitle>{self.conf.presentation}</subtitle> <subtitle>{self.conf.presentation}</subtitle>
@@ -96,11 +101,12 @@ class Blog:
<email>{self.conf.author_mail}</email> <email>{self.conf.author_mail}</email>
</author> </author>
<id>urn:uuid:{self.conf.id}</id> <id>urn:uuid:{self.conf.id}</id>
""") """
)
footer = "</feed>" footer = "</feed>"
with open(Path(self.conf.outbox) / "atom.xml", 'w+') as rss_file: with open(Path(self.conf.outbox) / "atom.xml", "w+") as rss_file:
rss_file.write(header + articles + footer) rss_file.write(header + articles + footer)
def _copy_css(self): def _copy_css(self):

View File

@@ -4,7 +4,13 @@ from pathlib import Path
class Config: class Config:
_conf = dict() _conf = {
"inbox": "./inbox/",
"outbox": "./outbox/",
"draft": "./draft/",
"theme": "./themes/default/"
}
_list_valid_parameters = { _list_valid_parameters = {
"inbox", "inbox",
"outbox", "outbox",
@@ -15,7 +21,7 @@ class Config:
"draft", "draft",
"author_name", "author_name",
"author_mail", "author_mail",
"id" "id",
} }
def __init__(self, config_file: Path): def __init__(self, config_file: Path):
@@ -37,4 +43,5 @@ class Config:
"""Surcharge les paramètres depuis une liste fournie""" """Surcharge les paramètres depuis une liste fournie"""
for valid_parameter in self._list_valid_parameters: for valid_parameter in self._list_valid_parameters:
if valid_parameter in parameters: if valid_parameter in parameters:
self._conf[valid_parameter] = parameters[valid_parameter] if parameters[valid_parameter] != None:
self._conf[valid_parameter] = parameters[valid_parameter]

View File

@@ -14,13 +14,13 @@ def new_page(title: str, path: Path) -> Path:
today = date.today().strftime("%Y-%m-%d") today = date.today().strftime("%Y-%m-%d")
filename = path + '/' + re.sub("[^a-zA-Z0-9-]", "_", title) + ".md" filename = path + "/" + re.sub("[^a-zA-Z0-9-]", "_", title) + ".md"
id = uuid.uuid4() id = uuid.uuid4()
content = textwrap.dedent( content = textwrap.dedent(
f"""\ f"""\
--- ---
date: {today} date: {today}
title: {title} title: "{title}"
id: {id} id: {id}
category: category:
tags: tags:
@@ -43,6 +43,8 @@ class Page:
md_content = "" md_content = ""
filename = "" filename = ""
_cache = ""
def __init__(self, filename: Path): def __init__(self, filename: Path):
"""Constructeur : nouvelle page""" """Constructeur : nouvelle page"""
self.filename = filename self.filename = filename
@@ -84,12 +86,14 @@ class Page:
def html(self) -> str: def html(self) -> str:
"""Convertit le markdown en html""" """Convertit le markdown en html"""
return markdown.markdown( if not self._cache:
self.md_content, extensions=["codehilite", "fenced_code"] self._cache = markdown.markdown(
) self.md_content, extensions=["codehilite", "fenced_code"]
)
return self._cache
def html_template(self, template: jinja2.Template) -> str: def html_template(self, template: jinja2.Template) -> str:
"""Convertit la page en html a partir d'un template jinja2""" """Convertit la page en html a partir d'un template jinja2"""
title = self.meta["title"] or "Sans titre" title = self.meta["title"] or "Sans titre"
date = self.meta["date"] or None date = self.meta["date"] or None

10
main.py
View File

@@ -25,7 +25,6 @@ def load_args():
) )
parser.add_argument( parser.add_argument(
"--inbox", "--inbox",
default="./inbox",
help="Chemin vers les fichiers markdown du blog", help="Chemin vers les fichiers markdown du blog",
) )
parser.add_argument( parser.add_argument(
@@ -35,7 +34,6 @@ def load_args():
) )
parser.add_argument( parser.add_argument(
"--draft", "--draft",
default="./draft",
help="Chemin vers les brouillons", help="Chemin vers les brouillons",
) )
parser.add_argument("all", nargs=argparse.REMAINDER, help=argparse.SUPPRESS) parser.add_argument("all", nargs=argparse.REMAINDER, help=argparse.SUPPRESS)
@@ -48,12 +46,10 @@ def load_make_args(args: str) -> dict:
parser.add_argument( parser.add_argument(
"--theme", "--theme",
default="./themes/default",
help="Chemin vers le theme utilisé", help="Chemin vers le theme utilisé",
) )
parser.add_argument( parser.add_argument(
"--output", "--output",
default="./output",
help="Nom du dossier où sera exporté le blog en html", help="Nom du dossier où sera exporté le blog en html",
) )
return vars(parser.parse_args(args)) return vars(parser.parse_args(args))
@@ -74,9 +70,9 @@ def main():
case "new": case "new":
page_title = " ".join(args["all"]) page_title = " ".join(args["all"])
path = conf.inbox print(conf._conf)
if args["d"]:
path = conf.draft path = conf.draft
subprocess.run( subprocess.run(
["nvim", "+normal G$", "+startinsert", new_page(page_title, path)] ["nvim", "+normal G$", "+startinsert", new_page(page_title, path)]
) )