Skip to content

Commit 9492f87

Browse files
committed
REF: Replace os.path with pathlib.Path in pandas_web.py
1 parent 2096b28 commit 9492f87

File tree

1 file changed

+29
-36
lines changed

1 file changed

+29
-36
lines changed

web/pandas_web.py

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -100,20 +100,15 @@ 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("/")
105-
)
106-
for fname in os.listdir(posts_path):
107-
if fname.startswith("index."):
103+
posts_path = context["source_path"] / context["blog"]["posts_path"]
104+
for fname in posts_path.iterdir():
105+
if fname.name.startswith("index."):
108106
continue
109-
link = (
110-
f"/{context['blog']['posts_path']}"
111-
f"/{os.path.splitext(fname)[0]}.html"
112-
)
107+
link = f"/{context['blog']['posts_path']}/{fname.stem}.html"
113108
md = markdown.Markdown(
114109
extensions=context["main"]["markdown_extensions"]
115110
)
116-
with open(os.path.join(posts_path, fname), encoding="utf-8") as f:
111+
with fname.open(encoding="utf-8") as f:
117112
html = md.convert(f.read())
118113
title = md.Meta["title"][0]
119114
summary = re.sub(tag_expr, "", html)
@@ -386,15 +381,15 @@ def get_callable(obj_as_str: str) -> object:
386381
return obj
387382

388383

389-
def get_context(config_fname: str, **kwargs):
384+
def get_context(config_fname: pathlib.Path, **kwargs):
390385
"""
391386
Load the config yaml as the base context, and enrich it with the
392387
information added by the context preprocessors defined in the file.
393388
"""
394-
with open(config_fname, encoding="utf-8") as f:
389+
with config_fname.open(encoding="utf-8") as f:
395390
context = yaml.safe_load(f)
396391

397-
context["source_path"] = os.path.dirname(config_fname)
392+
context["source_path"] = config_fname.parent
398393
context.update(kwargs)
399394

400395
preprocessors = (
@@ -409,14 +404,14 @@ def get_context(config_fname: str, **kwargs):
409404
return context
410405

411406

412-
def get_source_files(source_path: str) -> typing.Generator[str, None, None]:
407+
def get_source_files(source_path: pathlib.Path) -> typing.Generator[str, None, None]:
413408
"""
414409
Generate the list of files present in the source directory.
415410
"""
416-
for root, dirs, fnames in os.walk(source_path):
417-
root_rel_path = os.path.relpath(root, source_path)
411+
for root, dirs, fnames in os.walk(str(source_path)):
412+
root_rel_path = pathlib.Path(root).relative_to(source_path)
418413
for fname in fnames:
419-
yield os.path.join(root_rel_path, fname)
414+
yield root_rel_path / fname
420415

421416

422417
def extend_base_template(content: str, base_template: str) -> str:
@@ -441,17 +436,20 @@ def main(
441436
For ``.md`` and ``.html`` files, render them with the context
442437
before copying them. ``.md`` files are transformed to HTML.
443438
"""
439+
source_path = pathlib.Path(source_path)
440+
target_path = pathlib.Path(target_path)
441+
444442
# 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:
443+
versions_path = source_path / "versions.json"
444+
with versions_path.open(encoding="utf-8") as f:
447445
try:
448446
json.load(f)
449447
except json.JSONDecodeError as e:
450448
raise RuntimeError(
451449
f"Invalid versions.json: {e}. Ensure it is valid JSON."
452450
) from e
453451

454-
config_fname = os.path.join(source_path, "config.yml")
452+
config_fname = source_path / "config.yml"
455453

456454
shutil.rmtree(target_path, ignore_errors=True)
457455
os.makedirs(target_path, exist_ok=True)
@@ -460,23 +458,22 @@ def main(
460458
context = get_context(config_fname, target_path=target_path)
461459
sys.stderr.write("Context generated\n")
462460

463-
templates_path = os.path.join(source_path, context["main"]["templates_path"])
461+
templates_path = pathlib.Path(source_path) / context["main"]["templates_path"]
464462
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path))
465463

466464
for fname in get_source_files(source_path):
467-
if os.path.normpath(fname) in context["main"]["ignore"]:
465+
if fname.as_posix() in context["main"]["ignore"]:
468466
continue
469-
470467
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)
468+
dirname = fname.parent
469+
(target_path / dirname).mkdir(parents=True, exist_ok=True)
473470

474-
extension = os.path.splitext(fname)[-1]
471+
extension = fname.suffix
475472
if extension in (".html", ".md"):
476-
with open(os.path.join(source_path, fname), encoding="utf-8") as f:
473+
with (source_path / fname).open(encoding="utf-8") as f:
477474
content = f.read()
478475
if extension == ".md":
479-
if "pdeps/" in fname:
476+
if "pdeps" in fname.parts:
480477
from markdown.extensions.toc import TocExtension
481478

482479
body = markdown.markdown(
@@ -503,17 +500,13 @@ def main(
503500
# Python-Markdown doesn't let us config table attributes by hand
504501
body = body.replace("<table>", '<table class="table table-bordered">')
505502
content = extend_base_template(body, context["main"]["base_template"])
506-
context["base_url"] = "".join(["../"] * os.path.normpath(fname).count("/"))
503+
context["base_url"] = "".join(["../"] * len(fname.parts[:-1]))
507504
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"
511-
) as f:
505+
fname_html = fname.with_suffix(".html").name
506+
with (target_path / dirname / fname_html).open("w", encoding="utf-8") as f:
512507
f.write(content)
513508
else:
514-
shutil.copy(
515-
os.path.join(source_path, fname), os.path.join(target_path, dirname)
516-
)
509+
shutil.copy(source_path / fname, target_path / dirname / fname.name)
517510

518511

519512
if __name__ == "__main__":

0 commit comments

Comments
 (0)