Skip to content

Commit

Permalink
Simplify writing of criteria to log
Browse files Browse the repository at this point in the history
  • Loading branch information
danielhuppmann committed Feb 20, 2025
1 parent 1ce7832 commit 81a8542
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions nomenclature/processor/data_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from pathlib import Path

import yaml
import pandas as pd
from pyam import IamDataFrame
from pyam.logging import adjust_log_level
from pydantic import (
Expand Down Expand Up @@ -36,6 +37,13 @@ class DataValidationCriteria(BaseModel):

warning_level: WarningEnum = WarningEnum.error

@property
def criteria(self):
pass

def __str__(self):
return ", ".join([f"{key}: {value}" for key, value in self.criteria.items()])


class DataValidationValue(DataValidationCriteria):
value: float
Expand Down Expand Up @@ -167,6 +175,7 @@ def filter_args(self):
def __str__(self):
return ", ".join([f"{key}: {value}" for key, value in self.filter_args.items()])


class DataValidator(Processor):
"""Processor for validating IAMC datapoints"""

Expand Down Expand Up @@ -207,25 +216,24 @@ def apply(self, df: IamDataFrame) -> IamDataFrame:
**criterion.validation_args
)
if failed_validation is not None:
criteria_msg = (
" Criteria: " + str(item) + ", "
+ ", ".join(
[
f"{key}: {value}"
for key, value in criterion.criteria.items()
]
)
per_item_df = IamDataFrame(
pd.concat(
[per_item_df.data, failed_validation]
).drop_duplicates(keep=False)
)
failed_validation["warning_level"] = (
criterion.warning_level.value
)
if criterion.warning_level == WarningEnum.error:
error = True
fail_list.append(criteria_msg)
fail_list.append(
" Criteria: " + str(item) + ", " + str(criterion)
)
fail_list.append(
textwrap.indent(str(failed_validation), prefix=" ")
+ "\n"
)

fail_msg = "(file %s):\n" % get_relative_path(self.file)
if error:
fail_msg = (
Expand Down

0 comments on commit 81a8542

Please sign in to comment.