Skip to content

Commit

Permalink
refactor(factory): remove unnecessary complex factory
Browse files Browse the repository at this point in the history
Signed-off-by: Sylvain Leclerc <[email protected]>
  • Loading branch information
sylvlecl committed Feb 13, 2025
1 parent d9f48cc commit 5a3c4d0
Show file tree
Hide file tree
Showing 15 changed files with 156 additions and 311 deletions.
17 changes: 8 additions & 9 deletions src/antares/craft/model/study.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@
from antares.craft.model.output import Output
from antares.craft.model.settings.study_settings import StudySettings, StudySettingsUpdate
from antares.craft.model.simulation import AntaresSimulationParameters, Job
from antares.craft.service.base_services import BaseLinkService, BaseStudyService
from antares.craft.service.service_factory import ServiceFactory
from antares.craft.service.base_services import BaseLinkService, BaseStudyService, StudyServices

"""
The study module defines the data model for antares study.
Expand All @@ -46,18 +45,18 @@ def __init__(
self,
name: str,
version: str,
service_factory: ServiceFactory,
services: StudyServices,
path: PurePath = PurePath("."),
):
self.name = name
self.version = version
self.path = path
self._study_service = service_factory.create_study_service()
self._area_service = service_factory.create_area_service()
self._link_service = service_factory.create_link_service()
self._run_service = service_factory.create_run_service()
self._binding_constraints_service = service_factory.create_binding_constraints_service()
self._settings_service = service_factory.create_settings_service()
self._study_service = services.study_service
self._area_service = services.area_service
self._link_service = services.link_service
self._run_service = services.run_service
self._binding_constraints_service = services.bc_service
self._settings_service = services.settings_service
self._settings = StudySettings()
self._areas: dict[str, Area] = dict()
self._links: dict[str, Link] = dict()
Expand Down
107 changes: 30 additions & 77 deletions src/antares/craft/service/api_services/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,80 +30,35 @@
from antares.craft.service.api_services.services.thermal import ThermalApiService
from antares.craft.service.api_services.study_api import StudyApiService
from antares.craft.service.base_services import (
BaseAreaService,
BaseBindingConstraintService,
BaseHydroService,
BaseLinkService,
BaseOutputService,
BaseRenewableService,
BaseRunService,
BaseShortTermStorageService,
BaseStudyService,
BaseStudySettingsService,
BaseThermalService,
StudyServices,
)
from antares.craft.service.service_factory import ServiceFactory
from typing_extensions import override


class ApiServiceFactory(ServiceFactory):
def __init__(self, config: APIconf, study_id: str = "", study_name: str = ""):
self.config = config
self.study_id = study_id
self.study_name = study_name

@override
def create_area_service(self) -> BaseAreaService:
# TODO: we should not have multiple instances of those services
storage_service: BaseShortTermStorageService = ShortTermStorageApiService(self.config, self.study_id)
thermal_service: BaseThermalService = ThermalApiService(self.config, self.study_id)
renewable_service: BaseRenewableService = RenewableApiService(self.config, self.study_id)
hydro_service: BaseHydroService = HydroApiService(self.config, self.study_id)
area_service: BaseAreaService = AreaApiService(
self.config, self.study_id, storage_service, thermal_service, renewable_service, hydro_service
)
return area_service

@override
def create_link_service(self) -> BaseLinkService:
return LinkApiService(self.config, self.study_id)

@override
def create_thermal_service(self) -> BaseThermalService:
return ThermalApiService(self.config, self.study_id)

@override
def create_binding_constraints_service(self) -> BaseBindingConstraintService:
return BindingConstraintApiService(self.config, self.study_id)

@override
def create_study_service(self) -> BaseStudyService:
output_service = self.create_output_service()
return StudyApiService(self.config, self.study_id, output_service)

@override
def create_renewable_service(self) -> BaseRenewableService:
return RenewableApiService(self.config, self.study_id)

@override
def create_st_storage_service(self) -> BaseShortTermStorageService:
return ShortTermStorageApiService(self.config, self.study_id)

@override
def create_run_service(self) -> BaseRunService:
return RunApiService(self.config, self.study_id)

@override
def create_output_service(self) -> BaseOutputService:
return OutputApiService(self.config, self.study_id)

@override
def create_settings_service(self) -> BaseStudySettingsService:
return StudySettingsAPIService(self.config, self.study_id)

@override
def create_hydro_service(self) -> BaseHydroService:
return HydroApiService(self.config, self.study_id)
def create_api_services(config: APIconf, study_id: str = "") -> StudyServices:
storage_service = ShortTermStorageApiService(config, study_id)
thermal_service = ThermalApiService(config, study_id)
renewable_service = RenewableApiService(config, study_id)
hydro_service = HydroApiService(config, study_id)
area_service = AreaApiService(config, study_id, storage_service, thermal_service, renewable_service, hydro_service)
link_service = LinkApiService(config, study_id)
output_service = OutputApiService(config, study_id)
study_service = StudyApiService(config, study_id, output_service)
bc_service = BindingConstraintApiService(config, study_id)
run_service = RunApiService(config, study_id)
settings_service = StudySettingsAPIService(config, study_id)
return StudyServices(
area_service=area_service,
bc_service=bc_service,
run_service=run_service,
thermal_service=thermal_service,
hydro_service=hydro_service,
output_service=output_service,
study_service=study_service,
link_service=link_service,
renewable_service=renewable_service,
settings_service=settings_service,
short_term_storage_service=storage_service,
)


def create_study_api(
Expand Down Expand Up @@ -132,7 +87,7 @@ def create_study_api(
response = wrapper.post(url)
study_id = response.json()
# Settings part
study = Study(study_name, version, ApiServiceFactory(api_config, study_id))
study = Study(study_name, version, create_api_services(api_config, study_id))
study.read_settings()
# Move part
if parent_path:
Expand Down Expand Up @@ -181,7 +136,7 @@ def read_study_api(api_config: APIconf, study_id: str) -> "Study":
path = json_study.pop("folder")
pure_path = PurePath(path) if path else PurePath(".")

study = Study(study_name, study_version, ApiServiceFactory(api_config, study_id, study_name), pure_path)
study = Study(study_name, study_version, create_api_services(api_config, study_id), pure_path)

study.read_settings()
study.read_areas()
Expand All @@ -200,7 +155,5 @@ def create_variant_api(api_config: APIconf, study_id: str, variant_name: str) ->
variant_name: the name of the new variant
Returns: The variant in the form of a Study object
"""
factory = ApiServiceFactory(api_config, study_id)
api_service = factory.create_study_service()

return api_service.create_variant(variant_name)
services = create_api_services(api_config, study_id)
return services.study_service.create_variant(variant_name)
16 changes: 16 additions & 0 deletions src/antares/craft/service/base_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
# This file is part of the Antares project.

from abc import ABC, abstractmethod
from dataclasses import dataclass
from pathlib import Path, PurePath
from typing import TYPE_CHECKING, Optional

Expand Down Expand Up @@ -803,3 +804,18 @@ def read_study_settings(self) -> StudySettings:
Reads the settings of a study
"""
pass


@dataclass(frozen=True)
class StudyServices:
settings_service: BaseStudySettingsService
study_service: BaseStudyService
area_service: BaseAreaService
link_service: BaseLinkService
thermal_service: BaseThermalService
hydro_service: BaseHydroService
bc_service: BaseBindingConstraintService
renewable_service: BaseRenewableService
short_term_storage_service: BaseShortTermStorageService
run_service: BaseRunService
output_service: BaseOutputService
105 changes: 31 additions & 74 deletions src/antares/craft/service/local_services/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,7 @@
from antares.craft.model.settings.study_settings import StudySettings
from antares.craft.model.study import Study
from antares.craft.service.base_services import (
BaseAreaService,
BaseBindingConstraintService,
BaseHydroService,
BaseLinkService,
BaseOutputService,
BaseRenewableService,
BaseRunService,
BaseShortTermStorageService,
BaseStudyService,
BaseStudySettingsService,
BaseThermalService,
StudyServices,
)
from antares.craft.service.local_services.area_local import AreaLocalService
from antares.craft.service.local_services.binding_constraint_local import BindingConstraintLocalService
Expand All @@ -42,70 +32,37 @@
from antares.craft.service.local_services.services.st_storage import ShortTermStorageLocalService
from antares.craft.service.local_services.services.thermal import ThermalLocalService
from antares.craft.service.local_services.study_local import StudyLocalService
from antares.craft.service.service_factory import ServiceFactory
from antares.craft.tools.ini_tool import IniFile, InitializationFilesTypes
from typing_extensions import override


class LocalServiceFactory(ServiceFactory):
def __init__(self, config: LocalConfiguration, study_id: str = "", study_name: str = ""):
self.config = config
self.study_id = study_id
self.study_name = study_name

@override
def create_area_service(self) -> BaseAreaService:
# TODO: we should not have multiple instances of those services
storage_service = ShortTermStorageLocalService(self.config, self.study_name)
thermal_service = ThermalLocalService(self.config, self.study_name)
renewable_service = RenewableLocalService(self.config, self.study_name)
hydro_service = HydroLocalService(self.config, self.study_name)
area_service = AreaLocalService(
self.config, self.study_name, storage_service, thermal_service, renewable_service, hydro_service
)
return area_service

@override
def create_link_service(self) -> BaseLinkService:
return LinkLocalService(self.config, self.study_name)

@override
def create_thermal_service(self) -> BaseThermalService:
return ThermalLocalService(self.config, self.study_name)

@override
def create_binding_constraints_service(self) -> BaseBindingConstraintService:
return BindingConstraintLocalService(self.config, self.study_name)

@override
def create_study_service(self) -> BaseStudyService:
output_service = self.create_output_service()
study_service = StudyLocalService(self.config, self.study_name, output_service)
return study_service

@override
def create_renewable_service(self) -> BaseRenewableService:
return RenewableLocalService(self.config, self.study_name)

@override
def create_st_storage_service(self) -> BaseShortTermStorageService:
return ShortTermStorageLocalService(self.config, self.study_name)

@override
def create_run_service(self) -> BaseRunService:
return RunLocalService(self.config, self.study_name)

@override
def create_output_service(self) -> BaseOutputService:
return OutputLocalService(self.config, self.study_name)

@override
def create_settings_service(self) -> BaseStudySettingsService:
return StudySettingsLocalService(self.config, self.study_name)

@override
def create_hydro_service(self) -> BaseHydroService:
return HydroLocalService(self.config, self.study_name)
def create_local_services(config: LocalConfiguration, study_name: str = "") -> StudyServices:
storage_service = ShortTermStorageLocalService(config, study_name)
thermal_service = ThermalLocalService(config, study_name)
renewable_service = RenewableLocalService(config, study_name)
hydro_service = HydroLocalService(config, study_name)
area_service = AreaLocalService(
config, study_name, storage_service, thermal_service, renewable_service, hydro_service
)
link_service = LinkLocalService(config, study_name)
output_service = OutputLocalService(config, study_name)
study_service = StudyLocalService(config, study_name, output_service)
bc_service = BindingConstraintLocalService(config, study_name)
run_service = RunLocalService(config, study_name)
settings_service = StudySettingsLocalService(config, study_name)
short_term_storage_service = ShortTermStorageLocalService(config, study_name)
return StudyServices(
area_service=area_service,
bc_service=bc_service,
run_service=run_service,
thermal_service=thermal_service,
hydro_service=hydro_service,
output_service=output_service,
study_service=study_service,
link_service=link_service,
renewable_service=renewable_service,
settings_service=settings_service,
short_term_storage_service=short_term_storage_service,
)


def _create_correlation_ini_files(study_directory: Path) -> None:
Expand Down Expand Up @@ -207,7 +164,7 @@ def create_study_local(study_name: str, version: str, parent_directory: Path) ->
study = Study(
name=study_name,
version=version,
service_factory=LocalServiceFactory(config=local_config, study_name=study_name),
services=create_local_services(config=local_config, study_name=study_name),
path=study_directory,
)
# We need to create the file with default value
Expand Down Expand Up @@ -243,7 +200,7 @@ def _directory_not_exists(local_path: Path) -> None:
study = Study(
name=study_params["caption"],
version=study_params["version"],
service_factory=LocalServiceFactory(config=local_config, study_name=study_params["caption"]),
services=create_local_services(config=local_config, study_name=study_params["caption"]),
path=study_directory,
)
study.read_settings()
Expand Down
4 changes: 1 addition & 3 deletions src/antares/craft/service/local_services/services/output.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
# SPDX-License-Identifier: MPL-2.0
#
# This file is part of the Antares project.
from typing import Any

import pandas as pd

Expand All @@ -20,8 +19,7 @@


class OutputLocalService(BaseOutputService):
def __init__(self, config: LocalConfiguration, study_name: str, **kwargs: Any) -> None:
super().__init__(**kwargs)
def __init__(self, config: LocalConfiguration, study_name: str) -> None:
self.config = config
self.study_name = study_name

Expand Down
7 changes: 2 additions & 5 deletions src/antares/craft/service/local_services/study_local.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# This file is part of the Antares project.
from pathlib import Path, PurePath
from typing import TYPE_CHECKING, Any
from typing import TYPE_CHECKING

from antares.craft.config.local_configuration import LocalConfiguration
from antares.craft.model.binding_constraint import BindingConstraint
Expand All @@ -23,10 +23,7 @@


class StudyLocalService(BaseStudyService):
def __init__(
self, config: LocalConfiguration, study_name: str, output_service: BaseOutputService, **kwargs: Any
) -> None:
super().__init__(**kwargs)
def __init__(self, config: LocalConfiguration, study_name: str, output_service: BaseOutputService) -> None:
self._config = config
self._study_name = study_name
self._output_service: BaseOutputService = output_service
Expand Down
Loading

0 comments on commit 5a3c4d0

Please sign in to comment.