Skip to content

Commit

Permalink
refactor: move electricity consumer
Browse files Browse the repository at this point in the history
  • Loading branch information
frodehk committed Dec 16, 2024
1 parent c35d4f8 commit fe64b1b
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 68 deletions.
68 changes: 0 additions & 68 deletions src/libecalc/domain/infrastructure/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,74 +150,6 @@ def validate_fuel_exist(cls, fuel, info: ValidationInfo):
return fuel


class ElectricityConsumer(BaseConsumer, EnergyComponent):
component_type: Literal[
ComponentType.COMPRESSOR,
ComponentType.PUMP,
ComponentType.GENERIC,
ComponentType.PUMP_SYSTEM,
ComponentType.COMPRESSOR_SYSTEM,
]
consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
energy_usage_model: dict[
Period,
ElectricEnergyUsageModel,
]

_validate_el_consumer_temporal_model = field_validator("energy_usage_model")(validate_temporal_model)

_check_model_energy_usage = field_validator("energy_usage_model")(
lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
)

def is_fuel_consumer(self) -> bool:
return False

def is_electricity_consumer(self) -> bool:
return True

def is_provider(self) -> bool:
return False

def is_container(self) -> bool:
return False

def get_component_process_type(self) -> ComponentType:
return self.component_type

def get_name(self) -> str:
return self.name

def evaluate_energy_usage(
self, expression_evaluator: ExpressionEvaluator, context: ComponentEnergyContext
) -> dict[str, EcalcModelResult]:
consumer_results: dict[str, EcalcModelResult] = {}
consumer = ConsumerEnergyComponent(
id=self.id,
name=self.name,
component_type=self.component_type,
regularity=TemporalModel(self.regularity),
consumes=self.consumes,
energy_usage_model=TemporalModel(
{
period: EnergyModelMapper.from_dto_to_domain(model)
for period, model in self.energy_usage_model.items()
}
),
)
consumer_results[self.id] = consumer.evaluate(expression_evaluator=expression_evaluator)

return consumer_results

@field_validator("energy_usage_model", mode="before")
@classmethod
def check_energy_usage_model(cls, energy_usage_model):
"""
Make sure that temporal models are converted to Period objects if they are strings
"""
if isinstance(energy_usage_model, dict) and len(energy_usage_model.values()) > 0:
energy_usage_model = _convert_keys_in_dictionary_from_str_to_periods(energy_usage_model)
return energy_usage_model


Consumer = Annotated[Union[FuelConsumer, ElectricityConsumer], Field(discriminator="consumes")]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
class ElectricityConsumer(BaseConsumer, EnergyComponent):
component_type: Literal[
ComponentType.COMPRESSOR,
ComponentType.PUMP,
ComponentType.GENERIC,
ComponentType.PUMP_SYSTEM,
ComponentType.COMPRESSOR_SYSTEM,
]
consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
energy_usage_model: dict[
Period,
ElectricEnergyUsageModel,
]

_validate_el_consumer_temporal_model = field_validator("energy_usage_model")(validate_temporal_model)

_check_model_energy_usage = field_validator("energy_usage_model")(
lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
)

def is_fuel_consumer(self) -> bool:
return False

def is_electricity_consumer(self) -> bool:
return True

def is_provider(self) -> bool:
return False

def is_container(self) -> bool:
return False

def get_component_process_type(self) -> ComponentType:
return self.component_type

def get_name(self) -> str:
return self.name

def evaluate_energy_usage(
self, expression_evaluator: ExpressionEvaluator, context: ComponentEnergyContext
) -> dict[str, EcalcModelResult]:
consumer_results: dict[str, EcalcModelResult] = {}
consumer = ConsumerEnergyComponent(
id=self.id,
name=self.name,
component_type=self.component_type,
regularity=TemporalModel(self.regularity),
consumes=self.consumes,
energy_usage_model=TemporalModel(
{
period: EnergyModelMapper.from_dto_to_domain(model)
for period, model in self.energy_usage_model.items()
}
),
)
consumer_results[self.id] = consumer.evaluate(expression_evaluator=expression_evaluator)

return consumer_results

@field_validator("energy_usage_model", mode="before")
@classmethod
def check_energy_usage_model(cls, energy_usage_model):
"""
Make sure that temporal models are converted to Period objects if they are strings
"""
if isinstance(energy_usage_model, dict) and len(energy_usage_model.values()) > 0:
energy_usage_model = _convert_keys_in_dictionary_from_str_to_periods(energy_usage_model)
return energy_usage_model

0 comments on commit fe64b1b

Please sign in to comment.