Loading data_repo_renderer/__init__.py +44 −19 Original line number Diff line number Diff line Loading @@ -592,6 +592,11 @@ def cli_run_renderer(argvec=None): parser = argparse.ArgumentParser(description="Data repo renderer") parser.add_argument("--verbose", action='store_true', help="Print debugging output.") parser.add_argument("--in-place", action='store_true', help=( "Render in place? This will render everything in " "the parent directory of `yaml_file`. " "Incompatible with --prefix and --util.")) parser.add_argument("--prefix", help=("Custom path to a directory that " "will contain the rendered repo. " "Defaults to: './rendered/'")) Loading @@ -602,11 +607,27 @@ def cli_run_renderer(argvec=None): help="Use this YAML file to render repo.") args = parser.parse_args(argvec) # extract arguments # are we verbose? verbose = (args.verbose is True) util_src = Path(args.util if args.util is not None else "./util/") prefix = Path(args.prefix if args.prefix is not None else "./rendered/") # do we do in-place rerendering? in_place = (args.in_place is True) # check for incompatible args if in_place and args.prefix is not None: raise ValueError("--prefix and --in-place are incompatible.") if in_place and args.util is not None: raise ValueError("--util and --in-place are incompatible.") # Read paths from cli yaml_file = Path(args.yaml_file) if in_place: prefix = yaml_file.parent util_src = prefix / "util" else: util_src = Path(args.util if args.util is not None else "./util/") prefix = Path(args.prefix if args.prefix is not None else "./rendered/") # set up logging logger = logging.getLogger("data_repo_renderer") Loading Loading @@ -668,6 +689,7 @@ def cli_run_renderer(argvec=None): ReadmeRenderer(yaml_dict, output_file=readme_file) # copy yaml file if not in_place: try: shutil.copy(str(yaml_file), str(prefix / "meta.yaml")) except shutil.SameFileError as e: Loading @@ -676,11 +698,13 @@ def cli_run_renderer(argvec=None): # copy util scripts (if any): First, remove targed util, and then copy # source util directory. if not in_place: try: shutil.rmtree(str(util_dst)) except Exception as e: logger.debug("failed to unlink {} with: {}".format(util_dst, e)) pass try: shutil.copytree(str(util_src), str(util_dst)) except Exception as e: logger.debug("failed to copy {} to {} with: {}".format( Loading @@ -690,4 +714,5 @@ def cli_run_renderer(argvec=None): # make scripts executable _make_file_executable(update_script) _make_file_executable(init_script) if not in_place: list(map(_make_file_executable, util_dst.glob("*.*"))) tests/test_full_yaml_file_and_cli.py +18 −1 Original line number Diff line number Diff line Loading @@ -236,8 +236,10 @@ def util(tmp_path): return util_path @pytest.mark.parametrize("cli_args_verbose", [[], ["--verbose"]]) @pytest.mark.parametrize("util_after", [True, False]) def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after, cli_args_verbose): # Set up command line args cli_args = ["--prefix", str(tmp_path / "rendered"), Loading @@ -248,6 +250,9 @@ def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): if util_after: cli_args.insert(2, cli_args.pop(-1)) # cycle over verbose flag cli_args = cli_args_verbose + cli_args # and run the renderer data_repo_renderer.cli_run_renderer(cli_args) Loading @@ -260,3 +265,15 @@ def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): assert all( (tmp_path / "rendered" / "util" / file_name).exists() for file_name in ["postprocessing_01.sh", "postprocessing_02.sh"]) @pytest.mark.parametrize("cli_args_verbose", [[], ["--verbose"]]) @pytest.mark.parametrize( "cli_args_i_p_u", [["--in-place", "--prefix", "some_prefix"], ["--in-place", "--util", "some_util"], ["--in-place", "--prefix", "some_prefix", "--util", "some_util"]]) def test_incompatible_cli_args(cli_args_i_p_u, cli_args_verbose): cli_args = cli_args_verbose + cli_args_i_p_u + ["meta.yaml"] with pytest.raises(ValueError): data_repo_renderer.cli_run_renderer(cli_args) Loading
data_repo_renderer/__init__.py +44 −19 Original line number Diff line number Diff line Loading @@ -592,6 +592,11 @@ def cli_run_renderer(argvec=None): parser = argparse.ArgumentParser(description="Data repo renderer") parser.add_argument("--verbose", action='store_true', help="Print debugging output.") parser.add_argument("--in-place", action='store_true', help=( "Render in place? This will render everything in " "the parent directory of `yaml_file`. " "Incompatible with --prefix and --util.")) parser.add_argument("--prefix", help=("Custom path to a directory that " "will contain the rendered repo. " "Defaults to: './rendered/'")) Loading @@ -602,11 +607,27 @@ def cli_run_renderer(argvec=None): help="Use this YAML file to render repo.") args = parser.parse_args(argvec) # extract arguments # are we verbose? verbose = (args.verbose is True) util_src = Path(args.util if args.util is not None else "./util/") prefix = Path(args.prefix if args.prefix is not None else "./rendered/") # do we do in-place rerendering? in_place = (args.in_place is True) # check for incompatible args if in_place and args.prefix is not None: raise ValueError("--prefix and --in-place are incompatible.") if in_place and args.util is not None: raise ValueError("--util and --in-place are incompatible.") # Read paths from cli yaml_file = Path(args.yaml_file) if in_place: prefix = yaml_file.parent util_src = prefix / "util" else: util_src = Path(args.util if args.util is not None else "./util/") prefix = Path(args.prefix if args.prefix is not None else "./rendered/") # set up logging logger = logging.getLogger("data_repo_renderer") Loading Loading @@ -668,6 +689,7 @@ def cli_run_renderer(argvec=None): ReadmeRenderer(yaml_dict, output_file=readme_file) # copy yaml file if not in_place: try: shutil.copy(str(yaml_file), str(prefix / "meta.yaml")) except shutil.SameFileError as e: Loading @@ -676,11 +698,13 @@ def cli_run_renderer(argvec=None): # copy util scripts (if any): First, remove targed util, and then copy # source util directory. if not in_place: try: shutil.rmtree(str(util_dst)) except Exception as e: logger.debug("failed to unlink {} with: {}".format(util_dst, e)) pass try: shutil.copytree(str(util_src), str(util_dst)) except Exception as e: logger.debug("failed to copy {} to {} with: {}".format( Loading @@ -690,4 +714,5 @@ def cli_run_renderer(argvec=None): # make scripts executable _make_file_executable(update_script) _make_file_executable(init_script) if not in_place: list(map(_make_file_executable, util_dst.glob("*.*")))
tests/test_full_yaml_file_and_cli.py +18 −1 Original line number Diff line number Diff line Loading @@ -236,8 +236,10 @@ def util(tmp_path): return util_path @pytest.mark.parametrize("cli_args_verbose", [[], ["--verbose"]]) @pytest.mark.parametrize("util_after", [True, False]) def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after, cli_args_verbose): # Set up command line args cli_args = ["--prefix", str(tmp_path / "rendered"), Loading @@ -248,6 +250,9 @@ def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): if util_after: cli_args.insert(2, cli_args.pop(-1)) # cycle over verbose flag cli_args = cli_args_verbose + cli_args # and run the renderer data_repo_renderer.cli_run_renderer(cli_args) Loading @@ -260,3 +265,15 @@ def test_full_yaml_example_01(util, yaml_example, tmp_path, util_after): assert all( (tmp_path / "rendered" / "util" / file_name).exists() for file_name in ["postprocessing_01.sh", "postprocessing_02.sh"]) @pytest.mark.parametrize("cli_args_verbose", [[], ["--verbose"]]) @pytest.mark.parametrize( "cli_args_i_p_u", [["--in-place", "--prefix", "some_prefix"], ["--in-place", "--util", "some_util"], ["--in-place", "--prefix", "some_prefix", "--util", "some_util"]]) def test_incompatible_cli_args(cli_args_i_p_u, cli_args_verbose): cli_args = cli_args_verbose + cli_args_i_p_u + ["meta.yaml"] with pytest.raises(ValueError): data_repo_renderer.cli_run_renderer(cli_args)