"""Basic utilities.""" import os from pathlib import Path from urllib.parse import urlparse, urlunparse import env from rwx import fs from rwx.log import stream as log 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: str) -> 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) frame(root) for path in sorted(paths): log.info(path) shut(root) def cat(file: str) -> None: """Frame the content of a file in the log output.""" frame(file) log.info(fs.read_file_text(file).rstrip()) shut(file) def frame(text: str) -> None: """Open a new frame in the log output.""" log.info(f"{env.SPCD_OPEN}{text}") def shut(text: str) -> None: """Close current frame in the log output.""" log.info(f"{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.""" env.SPCD_STEP += 1 log.info(env.SPCD_DOWN) log.info(f"{env.SPCD_VERT} {env.SPCD_STEP} {text}") log.info(env.SPCD___UP)