spcd/spcd/util.py
2024-09-16 01:03:41 +02:00

76 lines
1.8 KiB
Python

"""Basic utilities."""
import os
from pathlib import Path
from urllib.parse import urlparse, urlunparse
from rwx import fs
from rwx.log import stream as log
from spcd import shell
from spcd.shell import env
def add_url_path(url: str, extra_path: str) -> str:
"""Append an extra segment to an existing URL."""
parts = urlparse(url)
parts = parts._replace(path=str(Path(parts.path) / extra_path))
return urlunparse(parts)
def browse(root: Path) -> None:
"""Frame the browsing of a root directory in the log output."""
paths = []
for directory, _, files in os.walk(root):
for file in files:
absolute_path = Path(directory) / file
relative_path = os.path.relpath(absolute_path, start=root)
paths.append(relative_path)
text = str(root)
frame(text)
for path in sorted(paths):
log.info(path)
shut(text)
def cat(file: Path) -> None:
"""Frame the content of a file in the log output."""
text = str(file)
frame(text)
log.info(fs.read_file_text(file).rstrip())
shut(text)
def frame(text: str) -> None:
"""Open a new frame in the log output.
:param text: text to start the frame with
:type text: str
"""
log.info("%s%s", env.SPCD_OPEN, text)
def shut(text: str) -> None:
"""Close current frame in the log output.
:param text: text to shut the frame with
:type text: str
"""
log.info("%s%s", env.SPCD_SHUT, text)
def split() -> None:
"""Separate previous log outputs from the ones following."""
log.info(env.SPCD_SPLT)
def step(text: str) -> None:
"""Increment the step number of the current build process.
:param text: text to display
:type text: str
"""
shell.STEP += 1
log.info(env.SPCD_DOWN)
log.info("%s %s %s", env.SPCD_VERT, shell.STEP, text)
log.info(env.SPCD___UP)