From d9687956286069d4f43905cf345179de3b456a92 Mon Sep 17 00:00:00 2001 From: Hazel Noack Date: Tue, 29 Jul 2025 12:46:56 +0200 Subject: [PATCH] cli script to recompile config --- pyproject.toml | 1 + python_mommy_venv/__main__.py | 53 ++++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a3f8368..893e634 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ version = "0.0.0" license-files = ["LICENSE"] [project.scripts] +mommify-venv-compile = "python_mommy_venv.__main__:cli_compile_config" mommify-venv = "python_mommy_venv.__main__:mommify_venv" [build-system] diff --git a/python_mommy_venv/__main__.py b/python_mommy_venv/__main__.py index 57695f1..2e2d7f8 100644 --- a/python_mommy_venv/__main__.py +++ b/python_mommy_venv/__main__.py @@ -85,11 +85,27 @@ PIP_HOOK = """# GENERATED BY MOMMY sys.exit(code)""" -def assert_venv(): +def assert_venv(only_warn: bool = False): if not IS_VENV: mommy_logger.error("mommy doesn't run in a virtual environment~") - serious_logger.error("this has to run in a virtual environment") - exit(1) + serious_logger.error("this should run in a virtual environment") + if not only_warn: + exit(1) + + +def write_compile_config(local: bool): + assert_venv(only_warn=not local) + + compiled_base_dir = VENV_DIRECTORY if local else CONFIG_DIRECTORY + compiled_config_file = compiled_base_dir / COMPILED_CONFIG_FILE_NAME + compiled = compile_config() + mommy_logger.info("mommy writes its moods in %s", compiled_config_file) + serious_logger.info("writing compiled config file to %s", compiled_config_file) + compiled_base_dir.mkdir(parents=True, exist_ok=True) + with compiled_config_file.open("w") as f: + json.dump(compiled, f, indent=4) + if not local: + (VENV_DIRECTORY / COMPILED_CONFIG_FILE_NAME).unlink(missing_ok=True) def wrap_interpreter(path: Path): @@ -138,6 +154,26 @@ def install_pip_hook(path: Path): f.write(text) +def cli_compile_config(): + parser = argparse.ArgumentParser(description="only recompile the config") + + parser.add_argument( + "-v", "--verbose", + action="store_true", + help="enable verbose and serious output" + ) + + parser.add_argument( + "-l", "--local", + action="store_true", + help="compile the config only for the current virtual environment" + ) + + args = parser.parse_args() + + write_compile_config(args.local) + + def mommify_venv(): parser = argparse.ArgumentParser(description="patch the virtual environment to use mommy") @@ -158,16 +194,7 @@ def mommify_venv(): config_logging(args.verbose) assert_venv() - compiled_base_dir = VENV_DIRECTORY if args.local else CONFIG_DIRECTORY - compiled_config_file = compiled_base_dir / COMPILED_CONFIG_FILE_NAME - compiled = compile_config() - mommy_logger.info("mommy writes its moods in %s", compiled_config_file) - serious_logger.info("writing compiled config file to %s", compiled_config_file) - compiled_base_dir.mkdir(parents=True, exist_ok=True) - with compiled_config_file.open("w") as f: - json.dump(compiled, f, indent=4) - if not args.local: - (VENV_DIRECTORY / COMPILED_CONFIG_FILE_NAME).unlink(missing_ok=True) + write_compile_config(args.local) mommy_logger.info("")