@@ -100,20 +100,17 @@ def blog_add_posts(context):
100100 posts = []
101101 # posts from the file system
102102 if context ["blog" ]["posts_path" ]:
103- posts_path = os . path . join (
104- context ["source_path" ], * context [ " blog" ]["posts_path" ]. split ( "/" )
103+ posts_path = pathlib . Path ( context [ "source_path" ]) / pathlib . Path (
104+ context ["blog" ]["posts_path" ]
105105 )
106- for fname in os . listdir ( posts_path ):
107- if fname .startswith ("index." ):
106+ for fname in posts_path . iterdir ( ):
107+ if fname .name . startswith ("index." ):
108108 continue
109- link = (
110- f"/{ context ['blog' ]['posts_path' ]} "
111- f"/{ os .path .splitext (fname )[0 ]} .html"
112- )
109+ link = f"/{ context ['blog' ]['posts_path' ]} /{ fname .stem } .html"
113110 md = markdown .Markdown (
114111 extensions = context ["main" ]["markdown_extensions" ]
115112 )
116- with open (os . path . join ( posts_path , fname ), encoding = "utf-8" ) as f :
113+ with fname . open (encoding = "utf-8" ) as f :
117114 html = md .convert (f .read ())
118115 title = md .Meta ["title" ][0 ]
119116 summary = re .sub (tag_expr , "" , html )
@@ -394,7 +391,7 @@ def get_context(config_fname: str, **kwargs):
394391 with open (config_fname , encoding = "utf-8" ) as f :
395392 context = yaml .safe_load (f )
396393
397- context ["source_path" ] = os . path . dirname (config_fname )
394+ context ["source_path" ] = pathlib . Path (config_fname ). parent
398395 context .update (kwargs )
399396
400397 preprocessors = (
@@ -414,9 +411,9 @@ def get_source_files(source_path: str) -> typing.Generator[str, None, None]:
414411 Generate the list of files present in the source directory.
415412 """
416413 for root , dirs , fnames in os .walk (source_path ):
417- root_rel_path = os . path . relpath (root , source_path )
414+ root_rel_path = pathlib . Path (root ). relative_to ( source_path )
418415 for fname in fnames :
419- yield os . path . join (root_rel_path , fname )
416+ yield str (root_rel_path / fname )
420417
421418
422419def extend_base_template (content : str , base_template : str ) -> str :
@@ -441,7 +438,7 @@ def main(
441438 For ``.md`` and ``.html`` files, render them with the context
442439 before copying them. ``.md`` files are transformed to HTML.
443440 """
444- config_fname = os . path . join (source_path , "config.yml" )
441+ config_fname = pathlib . Path (source_path ) / "config.yml"
445442
446443 shutil .rmtree (target_path , ignore_errors = True )
447444 os .makedirs (target_path , exist_ok = True )
@@ -450,20 +447,19 @@ def main(
450447 context = get_context (config_fname , target_path = target_path )
451448 sys .stderr .write ("Context generated\n " )
452449
453- templates_path = os . path . join (source_path , context ["main" ]["templates_path" ])
450+ templates_path = pathlib . Path (source_path ) / context ["main" ]["templates_path" ]
454451 jinja_env = jinja2 .Environment (loader = jinja2 .FileSystemLoader (templates_path ))
455452
456453 for fname in get_source_files (source_path ):
457- if os . path . normpath (fname ) in context ["main" ]["ignore" ]:
454+ if str ( pathlib . Path (fname ) ) in context ["main" ]["ignore" ]:
458455 continue
459-
460456 sys .stderr .write (f"Processing { fname } \n " )
461- dirname = os . path . dirname (fname )
462- os . makedirs ( os . path . join ( target_path , dirname ), exist_ok = True )
457+ dirname = pathlib . Path (fname ). parent
458+ ( target_path / dirname ). mkdir ( parents = True , exist_ok = True )
463459
464- extension = os . path . splitext (fname )[ - 1 ]
460+ extension = pathlib . Path (fname ). suffix
465461 if extension in (".html" , ".md" ):
466- with open ( os . path . join (source_path , fname ), encoding = "utf-8" ) as f :
462+ with ( pathlib . Path (source_path ) / fname ). open ( encoding = "utf-8" ) as f :
467463 content = f .read ()
468464 if extension == ".md" :
469465 body = markdown .markdown (
@@ -473,17 +469,17 @@ def main(
473469 # Python-Markdown doesn't let us config table attributes by hand
474470 body = body .replace ("<table>" , '<table class="table table-bordered">' )
475471 content = extend_base_template (body , context ["main" ]["base_template" ])
476- context ["base_url" ] = "" .join (["../" ] * os .path .normpath (fname ).count ("/" ))
472+ context ["base_url" ] = "" .join (
473+ ["../" ] * pathlib .Path (fname ).parts .count ("/" )
474+ )
477475 content = jinja_env .from_string (content ).render (** context )
478- fname_html = os . path . splitext (fname )[ 0 ] + ".html"
479- with open (
480- os . path . join ( target_path , fname_html ), "w" , encoding = "utf-8"
476+ fname_html = pathlib . Path (fname ). with_suffix ( ".html" ). name
477+ with ( pathlib . Path ( target_path ) / fname_html ). open (
478+ "w" , encoding = "utf-8"
481479 ) as f :
482480 f .write (content )
483481 else :
484- shutil .copy (
485- os .path .join (source_path , fname ), os .path .join (target_path , dirname )
486- )
482+ shutil .copy (pathlib .Path (source_path ) / fname , target_path / dirname )
487483
488484
489485if __name__ == "__main__" :
0 commit comments