def test_should_raise_if_git_command_fail(work_dir, mocker): """ Test a MlVTool message is raised if git command fail """ mocker.patch('subprocess.check_output', side_effect=SubprocessError) with pytest.raises(MlVToolException) as e: get_git_top_dir(work_dir) assert isinstance(e.value.__cause__, SubprocessError)
def test_should_return_git_top_dir(work_dir, mocker): """ Test get git top dir call subprocess """ mocked_check_output = mocker.patch('subprocess.check_output', return_value=b'/work_dir') assert get_git_top_dir(work_dir) == '/work_dir' assert mocked_check_output.mock_calls == [ mocker.call(['git', 'rev-parse', '--show-toplevel'], cwd=work_dir) ]
def run(self, *args, **kwargs): args = ArgumentBuilder(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description='Export a DVC pipeline to sequential execution.') \ .add_force_argument() \ .add_work_dir_argument() \ .add_argument('--dvc', type=str, required=True, help='DVC targeted pipeline metadata step') \ .add_argument('-o', '--output', type=str, help='The Python pipeline script output path', required=True) \ .parse(args) self.set_log_level(args) work_dir = args.working_directory or get_git_top_dir(dirname(args.dvc)) if not args.force and exists(args.output): raise MlVToolException( f'Output file {args.output} already exists, use --force option to overwrite it' ) export_pipeline(args.dvc, args.output, work_dir)
def get_work_directory(input_path: str) -> str: if not exists(input_path): raise MlVToolException(f'Input file {input_path} does not exist.') return get_git_top_dir(dirname(input_path))