def _show_metrics(metrics, all_branches=False, all_tags=False, all_commits=False): from dvc.utils.diff import format_dict from dvc.utils.flatten import flatten # When `metrics` contains a `None` key, it means that some files # specified as `targets` in `repo.metrics.show` didn't contain any metrics. missing = metrics.pop(None, None) lines = [] for branch, val in metrics.items(): if all_branches or all_tags or all_commits: lines.append(f"{branch}:") for fname, metric in val.items(): if not isinstance(metric, dict): lines.append("\t{}: {}".format(fname, str(metric))) continue lines.append(f"\t{fname}:") for key, value in flatten(format_dict(metric)).items(): lines.append(f"\t\t{key}: {value}") if missing: raise BadMetricError(missing) return "\n".join(lines)
def show_metrics(metrics, all_branches=False, all_tags=False, all_commits=False): from flatten_json import flatten from dvc.utils.diff import format_dict # When `metrics` contains a `None` key, it means that some files # specified as `targets` in `repo.metrics.show` didn't contain any metrics. missing = metrics.pop(None, None) for branch, val in metrics.items(): if all_branches or all_tags or all_commits: logger.info("{branch}:".format(branch=branch)) for fname, metric in val.items(): if not isinstance(metric, dict): logger.info("\t{}: {}".format(fname, str(metric))) continue logger.info("\t{}:".format(fname)) for key, value in flatten(format_dict(metric), ".").items(): logger.info("\t\t{}: {}".format(key, value)) if missing: raise BadMetricError(missing)
def show_metrics(metrics, all_branches=False, all_tags=False): """ Args: metrics (list): Where each element is either a `list` if an xpath was specified, otherwise a `str` """ # When `metrics` contains a `None` key, it means that some files # specified as `targets` in `repo.metrics.show` didn't contain any metrics. missing = metrics.pop(None, None) for branch, val in metrics.items(): if all_branches or all_tags: logger.info("{branch}:".format(branch=branch)) for fname, metric in val.items(): lines = metric if type(metric) is list else metric.splitlines() if len(lines) > 1: logger.info("\t{fname}:".format(fname=fname)) for line in lines: logger.info("\t\t{content}".format(content=line)) else: logger.info("\t{}: {}".format(fname, metric)) if missing: raise BadMetricError(missing)
def _show_metrics( metrics, markdown=False, all_branches=False, all_tags=False, all_commits=False, precision=None, ): from dvc.utils.diff import format_dict, table from dvc.utils.flatten import flatten # When `metrics` contains a `None` key, it means that some files # specified as `targets` in `repo.metrics.show` didn't contain any metrics. missing = metrics.pop(None, None) with_rev = any([all_branches, all_tags, all_commits]) header_set = set() rows = [] if precision is None: precision = DEFAULT_PRECISION def _round(val): if isinstance(val, float): return round(val, precision) return val for _branch, val in metrics.items(): for _fname, metric in val.items(): if not isinstance(metric, dict): header_set.add("") continue for key, _val in flatten(format_dict(metric)).items(): header_set.add(key) header = sorted(header_set) for branch, val in metrics.items(): for fname, metric in val.items(): row = [] if with_rev: row.append(branch) row.append(fname) if not isinstance(metric, dict): row.append(str(metric)) rows.append(row) continue flattened_val = flatten(format_dict(metric)) for i in header: row.append(_round(flattened_val.get(i))) rows.append(row) header.insert(0, "Path") if with_rev: header.insert(0, "Revision") if missing: raise BadMetricError(missing) return table(header, rows, markdown)
def run(self): try: metrics = self.repo.metrics.show( self.args.targets, all_branches=self.args.all_branches, all_tags=self.args.all_tags, all_commits=self.args.all_commits, recursive=self.args.recursive, ) except DvcException: logger.exception("") return 1 if self.args.show_json: import json logger.info(json.dumps(metrics)) else: from dvc.compare import show_metrics # When `metrics` contains a `None` key, it means that some files # specified as `targets` in `repo.metrics.show` didn't contain any # metrics. missing = metrics.pop(None, None) if missing: raise BadMetricError(missing) show_metrics( metrics, markdown=self.args.show_md, all_branches=self.args.all_branches, all_tags=self.args.all_tags, all_commits=self.args.all_commits, precision=self.args.precision or DEFAULT_PRECISION, round_digits=True, ) return 0
def show( self, path=None, typ=None, xpath=None, all_branches=False, all_tags=False, recursive=False, ): res = {} for branch in self.brancher(all_branches=all_branches, all_tags=all_tags): entries = _collect_metrics(self, path, recursive, typ, xpath, branch) metrics = _read_metrics(self, entries, branch) if metrics: res[branch] = metrics if not res: if path: raise BadMetricError(path) raise NoMetricsError() return res