Source code for scfile.cli.utils

"""
CLI wrapper small utils.
"""

from pathlib import Path

import click
from rich import print

from scfile.consts import CLI, NBT_FILENAMES, SUPPORTED_SUFFIXES, Formats
from scfile.enums import L

from . import types


[docs] def no_args(ctx: click.Context) -> None: """Prints help message when no arguments provided.""" click.echo(ctx.get_help()) print( "", f"{L.INVALID} No files paths arguments provided. Showing help.", f"{L.HINT} Next time drag and drop files onto scfile.exe OR use terminal for parameters.", sep="\n", ) click.pause(CLI.PAUSE)
[docs] def check_feature_unsupported(user_formats: Formats, unsupported_formats: Formats, feature: str) -> None: """Checks that user formats contain unsupported feature.""" matching_formats = list(filter(lambda fmt: fmt in unsupported_formats, user_formats)) if bool(matching_formats): suffixes = ", ".join(map(lambda fmt: fmt.suffix, matching_formats)) print(L.WARN, f"Specified formats [b]({suffixes})[/] doesn't support {feature}.")
[docs] def is_supported(path: Path) -> bool: """Checks that file is supported (by suffix).""" return path.is_file() and (path.suffix in SUPPORTED_SUFFIXES or path.name in NBT_FILENAMES)
[docs] def paths_to_files_map(paths: types.FilesPaths) -> types.FilesIter: """Maps parent directories to their supported files.""" for path in paths: path = path.resolve() if path.is_file(): if is_supported(path): yield path.parent, path elif path.is_dir(): for file in path.rglob("*"): if is_supported(file): yield path, file
[docs] def output_to_destination(root: Path, source: Path, output: types.OutputDir, relative: bool, parent: bool) -> types.OutputDir: """Output path with source relative subdirectory appended if relative flag.""" if relative and output: basedir = root.parent if parent else root return output / source.relative_to(basedir).parent return output