2
2
# copied from https://github.com/tonybaloney/tonybaloney.github.io/blob/master/blog-gen.py
3
3
import markdown
4
4
import jinja2
5
- import glob
5
+ from pathlib import Path
6
6
from datetime import date , datetime
7
7
from email .utils import formatdate , format_datetime # for RFC2822 formatting
8
8
9
9
TEMPLATE_FILE = "templates/blog_post_template.html"
10
10
FEED_TEMPLATE_FILE = "templates/rss_feed_template.xml"
11
- BASE_URL = "https://tonybaloney.github.io/"
11
+ BLOG_POSTS_PATH = Path ("posts" )
12
+ OUTPUT_DIR = Path ("_site" )
12
13
13
14
from dataclasses import dataclass
14
15
15
16
@dataclass
16
17
class Post :
17
18
title : str
18
19
author : str
19
- md_path : str
20
+ md_path : Path
20
21
date : date
21
22
22
23
@property
23
24
def html_path (self ):
24
- return self . md_path . replace ( 'blog/' , ' posts/' ) .replace ('.md' , '.html' )
25
+ return OUTPUT_DIR / " posts" / self . md_path . name .replace ('.md' , '.html' )
25
26
27
+ @property
28
+ def url (self ):
29
+ return f"posts/{ self .html_path .name } "
26
30
27
31
28
32
29
33
def main ():
30
- md_post_paths = sorted (glob .glob ("blog/ *.md" ))
34
+ md_post_paths = sorted (BLOG_POSTS_PATH .glob ("*.md" ))
31
35
extensions = ['extra' , 'smarty' , 'meta' , 'codehilite' ]
32
36
_md = markdown .Markdown (extensions = extensions , output_format = 'html5' )
33
37
@@ -36,34 +40,30 @@ def main():
36
40
37
41
all_posts = []
38
42
for md_post_path in md_post_paths :
39
- print ("rendering" , md_post_path )
40
- post_date = date .fromisoformat (md_post_path [5 :15 ])
41
- with open (md_post_path ) as f :
42
- html = _md .convert (f .read ())
43
+ # print("rendering", md_post_path)
44
+ post_date = date .fromisoformat (md_post_path .name [:10 ])
45
+ html_content = _md .convert (md_post_path .read_text ())
43
46
post = Post (
44
47
md_path = md_post_path , date = post_date ,
45
48
author = _md .Meta ['author' ][0 ],
46
49
title = _md .Meta ['title' ][0 ],
47
50
)
48
- doc = env .get_template (TEMPLATE_FILE ).render (
49
- content = html , baseurl = BASE_URL , url = post .html_path , post = post ,
51
+ post_html = env .get_template (TEMPLATE_FILE ).render (
52
+ content = html_content , url = post .html_path , post = post ,
50
53
)
54
+ print ("writing" , post .html_path )
55
+ post .html_path .write_text (post_html )
51
56
52
- with open (post .html_path , "w" ) as f :
53
- f .write (doc )
54
- # all_posts.append(dict(**_md.Meta, date=post_date, rfc2822_date=format_datetime(post_date), link="{0}{1}".format(BASE_URL, url)))
55
- all_posts .append (post ) # TODO fix date
57
+ all_posts .append (post ) # TODO rfc2822_date=format_datetime(post_date),
56
58
57
59
# index
58
- print ("rendering index.html" )
59
- with open ('index.md' ) as f :
60
- index_html = _md .convert (f .read ())
61
- doc = env .get_template ('templates/index.html' ).render (
62
- content = index_html ,
60
+ # print("rendering index.html")
61
+ index_html = env .get_template ('pages/index.html' ).render (
63
62
posts = all_posts ,
64
63
)
65
- with open ('index.html' , "w" ) as f :
66
- f .write (doc )
64
+ index_html_path = OUTPUT_DIR / 'index.html'
65
+ print ("writing" , index_html_path )
66
+ index_html_path .write_text (index_html )
67
67
68
68
# Order blog posts by date published
69
69
all_posts .sort (key = lambda p : p .date , reverse = True )
0 commit comments