diff --git a/flupdt/cli.py b/flupdt/cli.py index 6de67bc..ae5c15c 100644 --- a/flupdt/cli.py +++ b/flupdt/cli.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import argparse diff --git a/flupdt/common.py b/flupdt/common.py new file mode 100644 index 0000000..fb76c94 --- /dev/null +++ b/flupdt/common.py @@ -0,0 +1,45 @@ +"""common.""" + +import itertools +import logging +import sys + + +def configure_logger(level: str = "INFO") -> None: + """Configure the logger. + + Args: + level (str, optional): The logging level. Defaults to "INFO". + """ + logging.basicConfig( + level=level, + datefmt="%Y-%m-%dT%H:%M:%S%z", + format="%(asctime)s %(levelname)s %(filename)s:%(lineno)d - %(message)s", + handlers=[logging.StreamHandler(sys.stdout)], + ) + +def partition(predicate, iterable): + """Partition entries into false entries and true entries. + + If *predicate* is slow, consider wrapping it with functools.lru_cache(). + """ + # partition(is_odd, range(10)) → 0 2 4 6 8 and 1 3 5 7 9 + t1, t2 = itertools.tee(iterable) + return itertools.filterfalse(predicate, t1), filter(predicate, t2) + +def bash_wrapper(command: str, path: str = ".") -> tuple[str, str, int]: + """Execute a bash command and capture the output. + + Args: + command (str): The bash command to be executed. + path (str): The current working directory, '.' by default + + Returns: + Tuple[str, int]: A tuple containing the output of the command (stdout) as a string, + the error output (stderr) as a string (optional), and the return code as an integer. + """ + # This is a acceptable risk + process = Popen(command.split(), stdout=PIPE, stderr=PIPE, cwd=path) # noqa: S603 + output, error = process.communicate() + + return output.decode(), error.decode(), process.returncode diff --git a/flupdt/flake_eval.py b/flupdt/flake_eval.py index 7203e99..316caa3 100644 --- a/flupdt/flake_eval.py +++ b/flupdt/flake_eval.py @@ -1,8 +1,6 @@ -#!/usr/bin/env python3 - import logging from typing import Optional -from rad_development_python import bash_wrapper +from flupdt.common import bash_wrapper import re drv_re = re.compile(r".*(/nix/store/.*\.drv).*") diff --git a/flupdt/flake_show.py b/flupdt/flake_show.py index 1c53ce6..804028d 100644 --- a/flupdt/flake_show.py +++ b/flupdt/flake_show.py @@ -6,7 +6,7 @@ import re import shutil import typing -from rad_development_python import bash_wrapper +from flupdt.common import bash_wrapper output_regexes = [ re.compile(r"checking derivation (.*)..."), diff --git a/flupdt/main.py b/flupdt/main.py index c5b287e..5525732 100644 --- a/flupdt/main.py +++ b/flupdt/main.py @@ -4,7 +4,6 @@ from flupdt.flake_show import get_derivations from flupdt.cli import parse_inputs from flupdt.flake_eval import evaluate_output import logging -import rad_development_python as rd def main() -> None: