def from_dict()

in lib/metric-config-parser/metric_config_parser/outcome.py [0:0]


    def from_dict(cls, d: Mapping[str, Any]) -> "OutcomeSpec":
        params: Dict[str, Any] = {}
        params["friendly_name"] = d["friendly_name"]
        params["description"] = d["description"]
        params["data_sources"] = converter.structure(d.get("data_sources", {}), DataSourcesSpec)
        params["metrics"] = {
            k: converter.structure(
                {"name": k, **dict((kk.lower(), vv) for kk, vv in v.items())},
                MetricDefinition,
            )
            for k, v in d.get("metrics", {}).items()
        }
        params["default_metrics"] = [
            converter.structure(m, MetricReference) for m in d.get("default_metrics", [])
        ]

        params["parameters"] = ParameterSpec.from_dict(d.get("parameters", dict()))

        # check that default metrics are actually defined in outcome
        for default_metric in params["default_metrics"]:
            if default_metric.name not in params["metrics"].keys():
                raise ValueError(f"Default metric {default_metric} is not defined in outcome.")

        return cls(**params)