From 11cfd663acecc83c222ffac1e81062c1cbb43d2e Mon Sep 17 00:00:00 2001 From: pared Date: Tue, 16 Jul 2019 12:38:06 +0200 Subject: [PATCH] reproduce: use kwargs instead of explicit arguments --- dvc/repo/reproduce.py | 79 +++++++++---------------------------------- dvc/stage.py | 9 +++-- 2 files changed, 20 insertions(+), 68 deletions(-) diff --git a/dvc/repo/reproduce.py b/dvc/repo/reproduce.py index bc8b70775..f5391fbeb 100644 --- a/dvc/repo/reproduce.py +++ b/dvc/repo/reproduce.py @@ -10,7 +10,7 @@ from dvc.utils import relpath logger = logging.getLogger(__name__) -def _reproduce_stage(stages, node, force, dry, interactive, no_commit): +def _reproduce_stage(stages, node, **kwargs): stage = stages[node] if stage.locked: @@ -19,13 +19,11 @@ def _reproduce_stage(stages, node, force, dry, interactive, no_commit): " not going to be reproduced.".format(path=stage.relpath) ) - stage = stage.reproduce( - force=force, dry=dry, interactive=interactive, no_commit=no_commit - ) + stage = stage.reproduce(**kwargs) if not stage: return [] - if not dry: + if not kwargs.get("dry", False): stage.dump() return [stage] @@ -35,16 +33,10 @@ def _reproduce_stage(stages, node, force, dry, interactive, no_commit): def reproduce( self, target=None, - single_item=False, - force=False, - dry=False, - interactive=False, + recursive=False, pipeline=False, all_pipelines=False, - ignore_build_cache=False, - no_commit=False, - downstream=False, - recursive=False, + **kwargs ): import networkx as nx from dvc.stage import Stage @@ -52,10 +44,13 @@ def reproduce( if not target and not all_pipelines: raise ValueError() + interactive = kwargs.get("interactive", False) if not interactive: config = self.config core = config.config[config.SECTION_CORE] - interactive = core.get(config.SECTION_CORE_INTERACTIVE, False) + kwargs["interactive"] = core.get( + config.SECTION_CORE_INTERACTIVE, False + ) targets = [] if recursive and os.path.isdir(target): @@ -82,33 +77,13 @@ def reproduce( ret = [] with self.state: for target in targets: - stages = _reproduce( - self, - target, - single_item=single_item, - force=force, - dry=dry, - interactive=interactive, - ignore_build_cache=ignore_build_cache, - no_commit=no_commit, - downstream=downstream, - ) + stages = _reproduce(self, target, **kwargs) ret.extend(stages) return ret -def _reproduce( - self, - target, - single_item=False, - force=False, - dry=False, - interactive=False, - ignore_build_cache=False, - no_commit=False, - downstream=False, -): +def _reproduce(self, target, single_item=False, **kwargs): import networkx as nx from dvc.stage import Stage @@ -118,35 +93,15 @@ def _reproduce( node = relpath(stage.path, self.root_dir) if single_item: - ret = _reproduce_stage( - stages, node, force, dry, interactive, no_commit - ) + ret = _reproduce_stage(stages, node, **kwargs) else: - ret = _reproduce_stages( - G, - stages, - node, - force, - dry, - interactive, - ignore_build_cache, - no_commit, - downstream, - ) + ret = _reproduce_stages(G, stages, node, **kwargs) return ret def _reproduce_stages( - G, - stages, - node, - force, - dry, - interactive, - ignore_build_cache, - no_commit, - downstream, + G, stages, node, downstream=False, ignore_build_cache=False, **kwargs ): r"""Derive the evaluation of the given node for the given graph. @@ -200,9 +155,7 @@ def _reproduce_stages( result = [] for n in pipeline: try: - ret = _reproduce_stage( - stages, n, force, dry, interactive, no_commit - ) + ret = _reproduce_stage(stages, n, **kwargs) if len(ret) != 0 and ignore_build_cache: # NOTE: we are walking our pipeline from the top to the @@ -210,7 +163,7 @@ def _reproduce_stages( # which tells us that we should force reproducing all of # the other stages down below, even if their direct # dependencies didn't change. - force = True + kwargs["force"] = True result += ret except Exception as ex: diff --git a/dvc/stage.py b/dvc/stage.py index 1bcef642c..071359d46 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -312,10 +312,9 @@ class Stage(object): self.unprotect_outs() os.unlink(self.path) - def reproduce( - self, force=False, dry=False, interactive=False, no_commit=False - ): - if not force and not self.changed(): + def reproduce(self, interactive=False, **kwargs): + + if not kwargs.get("force", False) and not self.changed(): return None msg = ( @@ -328,7 +327,7 @@ class Stage(object): logger.info("Reproducing '{stage}'".format(stage=self.relpath)) - self.run(dry=dry, no_commit=no_commit, force=force) + self.run(**kwargs) logger.debug("'{stage}' was reproduced".format(stage=self.relpath))