def show( self, targets: List[str] = None, revs=None, props=None, recursive=False, onerror=None, ): if onerror is None: onerror = onerror_collect result: Dict[str, Dict] = {} for data in self.collect(targets, revs, recursive, onerror=onerror, props=props): assert len(data) == 1 revision_data = first(data.values()) if "data" in revision_data: for path_data in revision_data["data"].values(): result_source = path_data.pop("data_source", None) if result_source: path_data.update(result_source()) result.update(data) errored = errored_revisions(result) if errored: from dvc.ui import ui ui.error_write( "DVC failed to load some plots for following revisions: " f"'{', '.join(errored)}'.") return result
def show(repo, revs=None, targets=None, deps=False, onerror: Callable = None): if onerror is None: onerror = onerror_collect res = {} for branch in repo.brancher(revs=revs): params = error_handler(_gather_params)(repo=repo, rev=branch, targets=targets, deps=deps, onerror=onerror) if params: res[branch] = params # Hide workspace params if they are the same as in the active branch try: active_branch = repo.scm.active_branch() except (SCMError, NoSCMError): # SCMError - detached head # NoSCMError - no repo case pass else: if res.get("workspace") == res.get(active_branch): res.pop("workspace", None) errored = errored_revisions(res) if errored: ui.error_write( "DVC failed to load some parameters for following revisions:" f" '{', '.join(errored)}'.") return res
def show( self, targets: List[str] = None, revs=None, props=None, recursive=False, onerror=None, ): if onerror is None: onerror = onerror_collect data: Dict[str, Dict] = {} for rev_data in self.collect(targets, revs, recursive, onerror=onerror, props=props): data.update(rev_data) errored = errored_revisions(data) if errored: from dvc.ui import ui ui.error_write( "DVC failed to load some plots for following revisions: " f"'{', '.join(errored)}'.") return data
def show( repo, targets=None, all_branches=False, all_tags=False, recursive=False, revs=None, all_commits=False, onerror=None, ): if onerror is None: onerror = onerror_collect res = {} for rev in repo.brancher( revs=revs, all_branches=all_branches, all_tags=all_tags, all_commits=all_commits, ): res[rev] = error_handler(_gather_metrics)(repo, targets, rev, recursive, onerror=onerror) # Hide workspace metrics if they are the same as in the active branch try: active_branch = repo.scm.active_branch() except (SCMError, NoSCMError): # SCMError - detached head # NoSCMError - no repo case pass else: if res.get("workspace") == res.get(active_branch): res.pop("workspace", None) errored = errored_revisions(res) if errored: from dvc.ui import ui ui.error_write( "DVC failed to load some metrics for following revisions:" f" '{', '.join(errored)}'.") return res
def collect( self, targets: List[str] = None, revs: List[str] = None, recursive: bool = False, onerror: Optional[Callable] = None, props: Optional[Dict] = None, ) -> Dict[str, Dict]: """Collects all props and data for plots. Returns a structure like: {rev: {plots.csv: { props: {x: ..., "header": ..., ...}, data: "unstructured data (as stored for given extension)", }}} """ from dvc.utils.collections import ensure_list targets = ensure_list(targets) data: Dict[str, Dict] = {} for rev in self.repo.brancher(revs=revs): # .brancher() adds unwanted workspace if revs is not None and rev not in revs: continue rev = rev or "workspace" data[rev] = self._collect_from_revision( revision=rev, targets=targets, recursive=recursive, onerror=onerror, props=props, ) errored = errored_revisions(data) if errored: from dvc.ui import ui ui.error_write( "DVC failed to load some plots for following revisions: " f"'{', '.join(errored)}'.") return data