@@ -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 :
@@ -442,16 +439,16 @@ def main(
442439 before copying them. ``.md`` files are transformed to HTML.
443440 """
444441 # Sanity check: validate that versions.json is valid JSON
445- versions_path = os . path . join (source_path , "versions.json" )
446- with open (versions_path , encoding = "utf-8" ) as f :
442+ versions_path = pathlib . Path (source_path ) / "versions.json"
443+ with versions_path . open (encoding = "utf-8" ) as f :
447444 try :
448445 json .load (f )
449446 except json .JSONDecodeError as e :
450447 raise RuntimeError (
451448 f"Invalid versions.json: { e } . Ensure it is valid JSON."
452449 ) from e
453450
454- config_fname = os . path . join (source_path , "config.yml" )
451+ config_fname = pathlib . Path (source_path ) / "config.yml"
455452
456453 shutil .rmtree (target_path , ignore_errors = True )
457454 os .makedirs (target_path , exist_ok = True )
@@ -460,20 +457,19 @@ def main(
460457 context = get_context (config_fname , target_path = target_path )
461458 sys .stderr .write ("Context generated\n " )
462459
463- templates_path = os . path . join (source_path , context ["main" ]["templates_path" ])
460+ templates_path = pathlib . Path (source_path ) / context ["main" ]["templates_path" ]
464461 jinja_env = jinja2 .Environment (loader = jinja2 .FileSystemLoader (templates_path ))
465462
466463 for fname in get_source_files (source_path ):
467- if os . path . normpath (fname ) in context ["main" ]["ignore" ]:
464+ if str ( pathlib . Path (fname ) ) in context ["main" ]["ignore" ]:
468465 continue
469-
470466 sys .stderr .write (f"Processing { fname } \n " )
471- dirname = os . path . dirname (fname )
472- os . makedirs ( os . path . join ( target_path , dirname ), exist_ok = True )
467+ dirname = pathlib . Path (fname ). parent
468+ ( target_path / dirname ). mkdir ( parents = True , exist_ok = True )
473469
474- extension = os . path . splitext (fname )[ - 1 ]
470+ extension = pathlib . Path (fname ). suffix
475471 if extension in (".html" , ".md" ):
476- with open ( os . path . join (source_path , fname ), encoding = "utf-8" ) as f :
472+ with ( pathlib . Path (source_path ) / fname ). open ( encoding = "utf-8" ) as f :
477473 content = f .read ()
478474 if extension == ".md" :
479475 if "pdeps/" in fname :
@@ -503,17 +499,17 @@ def main(
503499 # Python-Markdown doesn't let us config table attributes by hand
504500 body = body .replace ("<table>" , '<table class="table table-bordered">' )
505501 content = extend_base_template (body , context ["main" ]["base_template" ])
506- context ["base_url" ] = "" .join (["../" ] * os .path .normpath (fname ).count ("/" ))
502+ context ["base_url" ] = "" .join (
503+ ["../" ] * pathlib .Path (fname ).parts .count ("/" )
504+ )
507505 content = jinja_env .from_string (content ).render (** context )
508- fname_html = os . path . splitext (fname )[ 0 ] + ".html"
509- with open (
510- os . path . join ( target_path , fname_html ), "w" , encoding = "utf-8"
506+ fname_html = pathlib . Path (fname ). with_suffix ( ".html" ). name
507+ with ( pathlib . Path ( target_path ) / fname_html ). open (
508+ "w" , encoding = "utf-8"
511509 ) as f :
512510 f .write (content )
513511 else :
514- shutil .copy (
515- os .path .join (source_path , fname ), os .path .join (target_path , dirname )
516- )
512+ shutil .copy (pathlib .Path (source_path ) / fname , target_path / dirname )
517513
518514
519515if __name__ == "__main__" :
0 commit comments