Skip to content

Commit 0e9e486

Browse files
committed
fix: error message when model/facility input does not exist
Refs: https://equinor-ecalc.atlassian.net/browse/ECALC-501
1 parent 94dc003 commit 0e9e486

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

src/libecalc/common/errors/exceptions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ class IllegalStateException(EcalcError):
6262

6363
def __init__(self, message: str):
6464
super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
65+
66+
67+
class InvalidReferenceException(EcalcError):
68+
"""This exception should hopefully never occur, and indicates a bug in the code."""
69+
70+
def __init__(self, message: str):
71+
super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)

src/libecalc/presentation/yaml/mappers/component_mapper.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from libecalc.presentation.yaml.mappers.consumer_function_mapper import (
1414
ConsumerFunctionMapper,
1515
)
16-
from libecalc.presentation.yaml.mappers.utils import resolve_reference
16+
from libecalc.presentation.yaml.mappers.utils import resolve_and_validate_reference
1717
from libecalc.presentation.yaml.validation_errors import (
1818
DataValidationError,
1919
DtoValidationError,
@@ -70,13 +70,10 @@ def _resolve_fuel(
7070

7171
temporal_fuel_model = {}
7272
for start_time, fuel in time_adjusted_fuel.items():
73-
resolved_fuel = resolve_reference(
73+
resolved_fuel = resolve_and_validate_reference(
7474
fuel,
7575
references=references.fuel_types,
76-
none_if_not_found=True,
7776
)
78-
if resolved_fuel is None:
79-
raise ValueError("Fuel not found")
8077

8178
temporal_fuel_model[start_time] = resolved_fuel
8279

@@ -131,7 +128,7 @@ def from_yaml_to_dto(
131128
except ValidationError as e:
132129
raise DtoValidationError(data=data, validation_error=e) from e
133130

134-
energy_usage_model = resolve_reference(
131+
energy_usage_model = resolve_and_validate_reference(
135132
data.get(EcalcYamlKeywords.energy_usage_model),
136133
references=self.__references.models,
137134
)
@@ -198,7 +195,7 @@ def from_yaml_to_dto(
198195
data.get(EcalcYamlKeywords.el2fuel), target_period=self._target_period
199196
)
200197
generator_set_model = {
201-
start_time: resolve_reference(
198+
start_time: resolve_and_validate_reference(
202199
model_timestep,
203200
references=self.__references.models,
204201
)

src/libecalc/presentation/yaml/mappers/consumer_function_mapper.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from libecalc.expression import Expression
1414
from libecalc.presentation.yaml.mappers.utils import (
1515
resolve_and_validate_reference,
16-
resolve_reference,
1716
)
1817
from libecalc.presentation.yaml.validation_errors import DataValidationError
1918
from libecalc.presentation.yaml.yaml_entities import References
@@ -146,7 +145,10 @@ def _pump_system_mapper(energy_usage_model: Dict, references: References = None)
146145
"""
147146
pumps = []
148147
for pump in energy_usage_model.get(EcalcYamlKeywords.pump_system_pumps, []):
149-
pump_model = resolve_reference(pump.get(EcalcYamlKeywords.pump_system_pump_model), references=references.models)
148+
pump_model = resolve_and_validate_reference(
149+
pump.get(EcalcYamlKeywords.pump_system_pump_model),
150+
references=references.models,
151+
)
150152
pumps.append(dto.PumpSystemPump(name=pump.get(EcalcYamlKeywords.name), pump_model=pump_model))
151153

152154
return dto.PumpSystemConsumerFunction(
@@ -201,7 +203,7 @@ def _direct_mapper(energy_usage_model: Dict, references: References = None) -> d
201203

202204

203205
def _tabulated_mapper(energy_usage_model: Dict, references: References = None) -> dto.TabulatedConsumerFunction:
204-
energy_model = resolve_reference(
206+
energy_model = resolve_and_validate_reference(
205207
energy_usage_model.get(EcalcYamlKeywords.energy_model),
206208
references.models,
207209
)
@@ -223,7 +225,7 @@ def _tabulated_mapper(energy_usage_model: Dict, references: References = None) -
223225

224226

225227
def _pump_mapper(energy_usage_model: Dict, references: References = None) -> dto.PumpConsumerFunction:
226-
energy_model = resolve_reference(
228+
energy_model = resolve_and_validate_reference(
227229
energy_usage_model.get(EcalcYamlKeywords.energy_model),
228230
references=references.models,
229231
)
@@ -337,7 +339,7 @@ def create_model(model: Dict, references: References = None):
337339
raise ValueError(f"Unknown model type: {model.get(EcalcYamlKeywords.type)}")
338340
return model_creator(model, references)
339341

340-
def from_yaml_to_dto(self, data: Dict) -> Optional[Dict[datetime, dto.ConsumerFunction]]:
342+
def from_yaml_to_dto(self, data: dto.EnergyModel) -> Optional[Dict[datetime, dto.ConsumerFunction]]:
341343
if data is None:
342344
return None
343345

src/libecalc/presentation/yaml/mappers/utils.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pandas as pd
55

6+
from libecalc.common.errors.exceptions import InvalidReferenceException
67
from libecalc.common.logger import logger
78
from libecalc.common.units import Unit
89
from libecalc.dto.types import (
@@ -33,10 +34,8 @@
3334
def resolve_reference(
3435
value: Any,
3536
references: Dict[str, Any],
36-
none_if_not_found: bool = False,
3737
) -> Any:
3838
"""Check if value is a reference and return it, if not a reference return the original value
39-
:param none_if_not_found: return None if reference is not found
4039
:param value: reference or value
4140
:param references: mapping from reference name to reference data
4241
{
@@ -49,10 +48,8 @@ def resolve_reference(
4948
resolved = references.get(value, None)
5049
if resolved is not None:
5150
return resolved
52-
elif none_if_not_found:
53-
return None
5451
else:
55-
return value
52+
return None
5653
else:
5754
return value
5855

@@ -61,9 +58,10 @@ def resolve_reference(
6158

6259

6360
def resolve_and_validate_reference(value: str, references: Dict[str, ReferenceValue]) -> ReferenceValue:
64-
model = resolve_reference(value, references, none_if_not_found=True)
61+
model = resolve_reference(value, references)
6562
if model is None:
66-
raise ValueError(f"Reference '{value}' not found. \nAvailable: {', '.join(references.keys())}")
63+
available_references = ",\n".join(references.keys())
64+
raise InvalidReferenceException(f"'{value}' not found. \n\nAvailable references:\n{available_references}")
6765
return model
6866

6967

0 commit comments

Comments
 (0)