def fill_from_lock(stage, lock_data=None): """Fill values for params, checksums for outs and deps from lock.""" if not lock_data: return assert isinstance(lock_data, dict) items = chain( ((StageParams.PARAM_DEPS, dep) for dep in stage.deps), ((StageParams.PARAM_OUTS, out) for out in stage.outs), ) checksums = { key: {item["path"]: item for item in lock_data.get(key, {})} for key in [StageParams.PARAM_DEPS, StageParams.PARAM_OUTS] } for key, item in items: path = item.def_path if isinstance(item, dependency.ParamsDependency): item.fill_values(get_in(lock_data, [stage.PARAM_PARAMS, path])) continue info = get_in(checksums, [key, path], {}) info = info.copy() info.pop("path", None) item.meta = Meta.from_dict(info) item.hash_info = HashInfo.from_dict(info)
def __init__( self, stage, path, info=None, cache=True, metric=False, plot=False, persist=False, checkpoint=False, live=False, desc=None, remote=None, repo=None, ): self.repo = stage.repo if not repo and stage else repo fs_cls, fs_config, fs_path = get_cloud_fs(self.repo, url=path) self.fs = fs_cls(**fs_config) if (self.fs.protocol == "local" and stage and isinstance(stage.repo.fs, LocalFileSystem) and path_isin(path, stage.repo.root_dir)): self.def_path = relpath(path, stage.wdir) self.fs = stage.repo.fs else: self.def_path = path if (self.repo and self.fs.protocol == "local" and not self.fs.path.isabs(self.def_path)): self.fs = self.repo.fs self._validate_output_path(path, stage) # This output (and dependency) objects have too many paths/urls # here is a list and comments: # # .def_path - path from definition in DVC file # .fspath - local only, resolved # .__str__ - for presentation purposes, def_path/relpath # # By resolved path, which contains actual location, # should be absolute and don't contain remote:// refs. self.stage = stage self.meta = Meta.from_dict(info) self.hash_info = HashInfo.from_dict(info) self.use_cache = False if self.IS_DEPENDENCY else cache self.metric = False if self.IS_DEPENDENCY else metric self.plot = False if self.IS_DEPENDENCY else plot self.persist = persist self.checkpoint = checkpoint self.live = live self.desc = desc self.fs_path = self._parse_path(self.fs, fs_path) self.obj = None self.remote = remote