Skip to content

Commit adbb0a0

Browse files
committed
refactor: remove frequency from YamlModel
1 parent 0571c97 commit adbb0a0

20 files changed

Lines changed: 42 additions & 93 deletions

src/ecalc_cli/commands/run.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ def run(
124124
model = YamlModel(
125125
configuration=configuration,
126126
resource_service=resource_service,
127-
output_frequency=frequency, # ignore IDE warning due to "instantioation" of an Enum that it doesn't understand type wise
128127
).validate_for_run()
129128

130129
if (flow_diagram or ltp_export) and (model.start is None or model.end is None):

src/ecalc_cli/io/output.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from ecalc_cli.emission_intensity import EmissionIntensityResults
99
from ecalc_cli.errors import EcalcCLIError
1010
from libecalc.common.run_info import RunInfo
11-
from libecalc.common.time_utils import Period, resample_periods
11+
from libecalc.common.time_utils import Period
1212
from libecalc.domain.energy import EnergyModel
1313
from libecalc.infrastructure.file_utils import OutputFormat, dataframe_to_csv, get_result_output
1414
from libecalc.presentation.exporter.configs.configs import LTPConfig, ResultConfig, STPConfig
@@ -149,10 +149,8 @@ def export_tsv(
149149
Returns:
150150
151151
"""
152-
resampled_periods = resample_periods(model.variables.periods, frequency)
153-
154152
prognosis_filter = config.filter(frequency=frequency)
155-
result = prognosis_filter.filter(ExportableYamlModel(model), resampled_periods)
153+
result = prognosis_filter.filter(ExportableYamlModel(model))
156154

157155
row_based_data: dict[str, list[str]] = CSVFormatter(
158156
separation_character="\t", index_formatters=PeriodFormatterConfig.get_row_index_formatters()

src/libecalc/fixtures/case_types.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from typing import TextIO
55

66
from ecalc_cli.infrastructure.file_resource_service import FileResourceService
7-
from libecalc.common.time_utils import Frequency
87
from libecalc.presentation.yaml.file_configuration_service import FileConfigurationService
98
from libecalc.presentation.yaml.model import YamlModel
109
from libecalc.presentation.yaml.yaml_entities import MemoryResource
@@ -21,12 +20,11 @@ def main_file(self) -> TextIO:
2120
lines = f.read()
2221
return io.StringIO(lines)
2322

24-
def get_yaml_model(self, frequency: Frequency = Frequency.NONE) -> YamlModel:
23+
def get_yaml_model(self) -> YamlModel:
2524
configuration_service = FileConfigurationService(self.main_file_path)
2625
configuration = configuration_service.get_configuration()
2726
resource_service = FileResourceService(self.main_file_path.parent, configuration=configuration)
2827
return YamlModel(
2928
configuration=configuration,
3029
resource_service=resource_service,
31-
output_frequency=frequency,
3230
)

src/libecalc/presentation/exporter/dto/dtos.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections.abc import Iterator
2-
from dataclasses import dataclass
2+
from dataclasses import dataclass, field
33

44
from libecalc.common.time_utils import Period, Periods
55
from libecalc.common.units import Unit
@@ -53,7 +53,14 @@ class GroupedQueryResult:
5353
@dataclass
5454
class FormattableGroupedQuery(Formattable):
5555
query_results: list[QueryResult]
56-
periods: Periods
56+
periods: Periods = field(init=False)
57+
58+
def __post_init__(self):
59+
if len(self.query_results) > 1:
60+
periods: set[Period] = set(self.query_results[0].values.keys())
61+
for result in self.query_results[1:]:
62+
assert periods == set(result.values.keys()), "Periods for all query results should match"
63+
self.periods = Periods(periods=sorted(periods))
5764

5865
@property
5966
def row_ids(self) -> list[RowIndex]:
@@ -80,15 +87,13 @@ def get_value(self, row_id: RowIndex, column_id: ColumnIndex) -> int | float:
8087
@dataclass
8188
class FilteredResult(FormattableGroup):
8289
query_results: list[GroupedQueryResult]
83-
periods: Periods
8490

8591
@property
8692
def groups(self) -> Iterator[tuple[str, Formattable]]:
8793
return (
8894
(
8995
group.group_name,
9096
FormattableGroupedQuery(
91-
periods=self.periods,
9297
query_results=group.query_results,
9398
),
9499
)

src/libecalc/presentation/exporter/filters.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from dataclasses import dataclass
22

3-
from libecalc.common.time_utils import Periods
43
from libecalc.presentation.exporter.aggregators import Aggregator
54
from libecalc.presentation.exporter.domain.exportable import ExportableSet
65
from libecalc.presentation.exporter.dto.dtos import FilteredResult
@@ -21,8 +20,6 @@ class Filter:
2120
def filter(
2221
self,
2322
energy_calculator_result: ExportableSet,
24-
periods: Periods,
2523
) -> FilteredResult:
2624
query_result_collection = self.aggregator.aggregate(energy_calculator_result)
27-
28-
return FilteredResult(query_results=query_result_collection, periods=periods)
25+
return FilteredResult(query_results=query_result_collection)

src/libecalc/presentation/yaml/model.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from typing import Any, Self
77

88
from libecalc.common.component_type import ComponentType
9-
from libecalc.common.time_utils import Frequency, Period, Periods
9+
from libecalc.common.time_utils import Period, Periods
1010
from libecalc.common.units import Unit
1111
from libecalc.common.utils.rates import TimeSeriesBoolean, TimeSeriesFloat, TimeSeriesInt, TimeSeriesStreamDayRate
1212
from libecalc.common.variables import ExpressionEvaluator, VariablesMap
@@ -34,7 +34,6 @@
3434
)
3535
from libecalc.domain.process.pump.pump import PumpModel
3636
from libecalc.domain.regularity import Regularity
37-
from libecalc.dto import ResultOptions
3837
from libecalc.dto.node_info import NodeInfo
3938
from libecalc.presentation.yaml.domain.category_service import CategoryService
4039
from libecalc.presentation.yaml.domain.default_process_service import DefaultProcessService
@@ -124,9 +123,7 @@ def __init__(
124123
self,
125124
configuration: YamlValidator,
126125
resource_service: ResourceService,
127-
output_frequency: Frequency,
128126
) -> None:
129-
self._output_frequency = output_frequency
130127
self._configuration = configuration
131128
self._resource_service = resource_service
132129

@@ -272,14 +269,6 @@ def variables(self) -> VariablesMap:
272269
assert self._variables is not None
273270
return self._variables
274271

275-
@property
276-
def result_options(self) -> ResultOptions:
277-
return ResultOptions(
278-
start=self._configuration.start,
279-
end=self._configuration.end,
280-
output_frequency=self._output_frequency,
281-
)
282-
283272
def _get_token_references(self, time_series_references: list[str]) -> list[str]:
284273
token_references = time_series_references
285274
for reference in self._configuration.variables:

tests/conftest.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,15 +410,13 @@ def yaml_model_factory(configuration_service_factory, resource_service_factory):
410410
def create_yaml_model(
411411
configuration: ResourceStream | YamlValidator,
412412
resources: dict[str, MemoryResource],
413-
frequency: Frequency = Frequency.NONE,
414413
) -> YamlModel:
415414
if isinstance(configuration, ResourceStream):
416415
configuration = configuration_service_factory(configuration).get_configuration()
417416

418417
return YamlModel(
419418
configuration=configuration,
420419
resource_service=resource_service_factory(resources, configuration),
421-
output_frequency=frequency,
422420
)
423421

424422
return create_yaml_model

tests/libecalc/dto/test_fuel_consumer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def test_no_fuel_installation_and_blank_reference_consumer(self, yaml_model_fact
9999
asset_stream = fuel_consumer_helper.get_stream(installation_fuel=None, consumer_fuel="")
100100

101101
with pytest.raises(ModelValidationException) as exc_info:
102-
yaml_model_factory(configuration=asset_stream, resources={}, frequency=Frequency.YEAR).validate_for_run()
102+
yaml_model_factory(configuration=asset_stream, resources={}).validate_for_run()
103103

104104
assert str(exc_info.value) == snapshot("""\
105105
Validation error

tests/libecalc/dto/test_generator_set.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ def test_missing_installation_fuel(self, yaml_model_factory, generator_set_helpe
241241

242242
with pytest.raises(ModelValidationException) as exc_info:
243243
yaml_model_factory(
244-
configuration=asset_data.resource_stream, resources=asset_data.resources, frequency=Frequency.YEAR
244+
configuration=asset_data.resource_stream, resources=asset_data.resources
245245
).validate_for_run()
246246

247247
assert str(exc_info.value) == snapshot("""\

tests/libecalc/input/test_yaml_configuration.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def test_invalid_timeseries_type(
2929
model = YamlModel(
3030
configuration=configuration,
3131
resource_service=resource_service_factory({}, configuration=configuration),
32-
output_frequency=Frequency.NONE,
3332
)
3433

3534
with pytest.raises(ModelValidationException) as exc_info:

0 commit comments

Comments
 (0)