Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions antarest/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def get_file_transfer_manager(request: Request) -> FileTransferManager:


def get_output_service(request: Request) -> OutputService:
return get_app_state(request).services.output_service
return get_app_state(request).services.output


def get_favorite_study_service(request: Request) -> FavoriteStudyService:
Expand All @@ -136,15 +136,15 @@ def get_favorite_external_directory_service(request: Request) -> FavoriteExterna


def get_favorite_aggregate_service(request: Request) -> FavoriteAggregateService:
return get_app_state(request).services.favorite_aggregate_service
return get_app_state(request).services.favorite_aggregate


def get_tablemode_service(request: Request) -> TableModeService:
return get_app_state(request).services.tablemode_service
return get_app_state(request).services.tablemode


def get_task_service(request: Request) -> ITaskService:
return get_app_state(request).services.task_service
return get_app_state(request).services.task


def get_maintenance_service(request: Request) -> MaintenanceService:
Expand Down
21 changes: 9 additions & 12 deletions antarest/maintenance/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,14 @@

from antarest.core.tasks.service import ITaskService
from antarest.core.utils.fastapi_sqlalchemy.middleware import init_db_singleton
from antarest.service_creator import SESSION_ARGS, Services, create_core_services, create_services, init_db_engine
from antarest.service_creator import SESSION_ARGS, Services, create_services, init_db_engine
from antarest.study.repository import StudyDiskSpaceRepository

if TYPE_CHECKING:
from antarest.blobstore.service import BlobService
from antarest.core.config import Config
from antarest.matrixstore.service import MatrixService
from antarest.output.service import OutputService
from antarest.service_creator import CoreServices
from antarest.study.service import StudyService

logger = logging.getLogger(__name__)
Expand All @@ -38,9 +37,8 @@
class MaintenanceContext:
"""Holds services needed by maintenance tasks."""

def __init__(self, config: "Config", core_services: "CoreServices", services: "Services") -> None:
def __init__(self, config: "Config", services: "Services") -> None:
self.config = config
self.core_services = core_services
self.services = services

@classmethod
Expand All @@ -50,31 +48,30 @@ def create(cls, config: "Config") -> "MaintenanceContext":

engine = init_db_engine(config, auto_upgrade_db=False)
init_db_singleton(custom_engine=engine, session_args=SESSION_ARGS)
core_services = create_core_services(config=config)
services = create_services(config=config)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this method invocation we re-created the core services, effectively creating duplicates.

I got an error on my local env with metrics being added multiple times.


return cls(config, core_services, services)
return cls(config, services)

@property
def matrix_service(self) -> "MatrixService":
return self.core_services.matrix_service
return self.services.matrix

@property
def blob_service(self) -> "BlobService":
return self.core_services.blob_service
return self.services.blob

@property
def study_service(self) -> "StudyService":
return self.core_services.study_service
return self.services.study

@property
def output_service(self) -> "OutputService":
return self.core_services.output_service
return self.services.output

@property
def task_service(self) -> "ITaskService":
return self.core_services.task_service
return self.services.task

@property
def study_disk_space_repository(self) -> "StudyDiskSpaceRepository":
return self.core_services.study_disk_space_repository
return self.services.study_disk_space_repository
31 changes: 18 additions & 13 deletions antarest/service_creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,22 +425,25 @@ class Services:
study: StudyService
directory: DirectoryService
matrix: MatrixService
blob: BlobService
favorite_study: FavoriteStudyService
favorite_directory: FavoriteDirectoryService
favorite_external_directory: FavoriteExternalDirectoryService
favorite_aggregate_service: FavoriteAggregateService
tablemode_service: TableModeService
favorite_aggregate: FavoriteAggregateService
tablemode: TableModeService
user: LoginService
cache: ICache
maintenance: MaintenanceService
task_service: ITaskService
task: ITaskService
file_transfer_manager: FileTransferManager
output_service: OutputService
launcher: LauncherService | None = None
matrix_gc: MatrixGarbageCollector | None = None
auto_archiver: AutoArchiveService | None = None
blob_gc: BlobGarbageCollector | None = None
variable_view_gc: VariableViewGarbageCollector | None = None
output: OutputService
launcher: LauncherService | None
matrix_gc: MatrixGarbageCollector | None
auto_archiver: AutoArchiveService | None
blob_gc: BlobGarbageCollector | None
variable_view_gc: VariableViewGarbageCollector | None

study_disk_space_repository: StudyDiskSpaceRepository # TODO: does not belong here


def create_services(config: Config, create_all: bool = False) -> Services:
Expand Down Expand Up @@ -487,20 +490,22 @@ def create_services(config: Config, create_all: bool = False) -> Services:
study=core_services.study_service,
directory=core_services.directory_service,
matrix=core_services.matrix_service,
blob=core_services.blob_service,
favorite_study=core_services.favorite_study_service,
favorite_directory=core_services.favorite_directory_service,
favorite_external_directory=core_services.favorite_external_directory_service,
favorite_aggregate_service=core_services.favorite_aggregate_service,
tablemode_service=core_services.tablemode_service,
favorite_aggregate=core_services.favorite_aggregate_service,
tablemode=core_services.tablemode_service,
user=core_services.login_service,
cache=core_services.cache,
maintenance=maintenance_service,
task_service=core_services.task_service,
task=core_services.task_service,
file_transfer_manager=core_services.file_transfer_manager,
output_service=core_services.output_service,
output=core_services.output_service,
launcher=launcher,
matrix_gc=matrix_garbage_collector,
auto_archiver=auto_archiver,
blob_gc=blob_garbage_collector,
variable_view_gc=variable_view_gc,
study_disk_space_repository=core_services.study_disk_space_repository,
)
70 changes: 0 additions & 70 deletions tests/maintenance/test_context.py

This file was deleted.

23 changes: 16 additions & 7 deletions tests/storage/integration/test_STA_mini.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,12 @@
from antarest.core.utils.fastapi_sqlalchemy import DBSessionMiddleware, db
from antarest.core.utils.fastapi_sqlalchemy.middleware import init_db_singleton
from antarest.core.utils.polars import create_polars_dataframe
from antarest.dependencies import AppState
from antarest.dependencies import (
get_config,
get_login_service,
get_output_service,
get_study_service,
)
from antarest.main import add_exception_handlers
from antarest.matrixstore.service import ISimpleMatrixService
from antarest.output.model import OutputVariablesInformation
Expand All @@ -55,19 +60,23 @@

@pytest.fixture
def client(services, db_engine: Engine) -> TestClient:
study_service, output_service, config = services
services = Mock()
services.study = study_service
services.output_service = output_service
services.file_transfer_manager = study_service.file_transfer_manager

app = FastAPI(title=__name__)
init_db_singleton(custom_engine=db_engine, session_args={"autocommit": False, "autoflush": False})
app.add_middleware(DBSessionMiddleware)
add_exception_handlers(app)
app.state.app_state = AppState(config=config, services=services, ws_manager=Mock())

# inject only necessary dependencies
study_service, output_service, config = services
app.dependency_overrides[get_study_service] = lambda: study_service
app.dependency_overrides[get_config] = lambda: config
app.dependency_overrides[get_output_service] = lambda: output_service
app.dependency_overrides[get_login_service] = lambda: Mock()

app.include_router(create_study_routes())
app.include_router(create_raw_study_routes())
app.include_router(create_output_routes())

return TestClient(app)


Expand Down
25 changes: 17 additions & 8 deletions tests/storage/web/test_studies_bp.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,14 @@
from antarest.core.model import PublicMode
from antarest.core.roles import RoleType
from antarest.core.utils.archives import ArchiveFormat
from antarest.dependencies import AppState
from antarest.dependencies import (
get_config,
get_file_transfer_manager,
get_login_service,
get_output_service,
get_study_service,
)
from antarest.main import add_exception_handlers
from antarest.matrixstore.service import MatrixService
from antarest.output.routes import create_output_routes
from antarest.output.service import OutputService
from antarest.study.model import (
Expand Down Expand Up @@ -76,18 +81,22 @@ def create_test_client(
file_transfer_manager: FileTransferManager = Mock(),
raise_server_exceptions: bool = True,
) -> TestClient:
services = Mock()
services.study = service
services.output_service = output_service
services.file_transfer_manager = file_transfer_manager
services.matrix = Mock(spec=MatrixService)

app = FastAPI(title=__name__)
add_exception_handlers(app)
app.state.app_state = AppState(config=CONFIG, services=services, ws_manager=Mock())

# inject only necessary dependencies
app.dependency_overrides[get_study_service] = lambda: service
app.dependency_overrides[get_config] = lambda: CONFIG
app.dependency_overrides[get_output_service] = lambda: output_service
app.dependency_overrides[get_file_transfer_manager] = lambda: file_transfer_manager
app.dependency_overrides[get_login_service] = lambda: Mock()

app.include_router(create_study_routes())
app.include_router(create_raw_study_routes())
app.include_router(create_study_variant_routes())
app.include_router(create_output_routes())

return TestClient(app, raise_server_exceptions=raise_server_exceptions)


Expand Down
Loading