From dada67d7e2f12eee49c765d2eb6b24ed39bb2e50 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Thu, 16 Jan 2025 18:02:39 +0100 Subject: [PATCH 01/11] feat(bc): add constraint duplication endpoint (#2295) --- .../business/areas/st_storage_management.py | 2 +- .../business/areas/thermal_management.py | 2 +- .../business/binding_constraint_management.py | 69 ++++++++++++++ antarest/study/web/study_data_blueprint.py | 21 +++++ .../test_binding_constraints.py | 90 +++++++++++++++++++ 5 files changed, 182 insertions(+), 2 deletions(-) diff --git a/antarest/study/business/areas/st_storage_management.py b/antarest/study/business/areas/st_storage_management.py index b0ef5322ab..962ce5d7f1 100644 --- a/antarest/study/business/areas/st_storage_management.py +++ b/antarest/study/business/areas/st_storage_management.py @@ -548,7 +548,7 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus The duplicated cluster configuration. Raises: - ClusterAlreadyExists: If a cluster with the new name already exists in the area. + DuplicateSTStorage: If a cluster with the new name already exists in the area. """ new_id = transform_name_to_id(new_cluster_name) lower_new_id = new_id.lower() diff --git a/antarest/study/business/areas/thermal_management.py b/antarest/study/business/areas/thermal_management.py index cbd0f7e997..13380b54b3 100644 --- a/antarest/study/business/areas/thermal_management.py +++ b/antarest/study/business/areas/thermal_management.py @@ -429,7 +429,7 @@ def duplicate_cluster( The duplicated cluster configuration. Raises: - ClusterAlreadyExists: If a cluster with the new name already exists in the area. + DuplicateThermalCluster: If a cluster with the new name already exists in the area. """ new_id = transform_name_to_id(new_cluster_name, lower=False) lower_new_id = new_id.lower() diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index 19e9c0f782..7c4175ff53 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -795,6 +795,75 @@ def create_binding_constraint( new_constraint["id"] = bc_id return self.constraint_model_adapter(new_constraint, version) + def duplicate_binding_constraint(self, study: Study, source_id: str, new_constraint_name: str) -> ConstraintOutput: + """ + Creates a duplicate constraint with a new name. + + Args: + study: The study in which the cluster will be duplicated. + source_id: The identifier of the constraint to be duplicated. + new_constraint_name: The new name for the duplicated constraint. + + Returns: + The duplicated constraint configuration. + + Raises: + DuplicateConstraintName: If a constraint with the new name already exists in the study. + """ + + # Checks if the new constraint already exists + new_constraint_id = transform_name_to_id(new_constraint_name) + existing_constraints = self.get_binding_constraints(study) + if new_constraint_id in {bc.id for bc in existing_constraints}: + raise DuplicateConstraintName( + f"A binding constraint with the same name already exists: {new_constraint_name}." + ) + + # Retrieval of the source constraint properties + source_constraint = next(iter(bc for bc in existing_constraints if bc.id == source_id), None) + if not source_constraint: + raise BindingConstraintNotFound(f"Binding constraint '{source_id}' not found") + + new_constraint = { + "name": new_constraint_name, + **source_constraint.model_dump(mode="json", exclude={"terms", "name", "id"}), + } + args = { + **new_constraint, + "command_context": self.storage_service.variant_study_service.command_factory.command_context, + "study_version": StudyVersion.parse(study.version), + } + if source_constraint.terms: + args["coeffs"] = self.terms_to_coeffs(source_constraint.terms) + + # Retrieval of the source constraint matrices + file_study = self.storage_service.get_storage(study).get_raw(study) + if file_study.config.version < STUDY_VERSION_8_7: + matrix = file_study.tree.get(["input", "bindingconstraints", source_id]) + args["values"] = matrix["data"] + else: + correspondence_map = { + "lt": TermMatrices.LESS.value, + "gt": TermMatrices.GREATER.value, + "eq": TermMatrices.EQUAL.value, + } + source_matrices = OPERATOR_MATRIX_FILE_MAP[source_constraint.operator] + for matrix_name in source_matrices: + matrix = file_study.tree.get(["input", "bindingconstraints", matrix_name.format(bc_id=source_id)])[ + "data" + ] + command_attribute = correspondence_map[matrix_name.removeprefix("{bc_id}_")] + args[command_attribute] = matrix + + # Creates and applies constraint + command = CreateBindingConstraint(**args) + execute_or_add_commands(study, file_study, [command], self.storage_service) + + # Returns the new constraint + source_constraint.name = new_constraint_name + source_constraint.id = new_constraint_id + return source_constraint + def update_binding_constraint( self, study: Study, diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 9f267df774..6fa84387ee 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -1340,6 +1340,27 @@ def create_binding_constraint( study = study_service.check_study_access(uuid, StudyPermissionType.READ, params) return study_service.binding_constraint_manager.create_binding_constraint(study, data) + @bp.post( + "/studies/{uuid}/bindingconstraints/{binding_constraint_id}", + tags=[APITag.study_data], + summary="Duplicates a given binding constraint", + ) + def duplicate_binding_constraint( + uuid: str, + binding_constraint_id: str, + new_constraint_name: str, + current_user: JWTUser = Depends(auth.get_current_user), + ) -> ConstraintOutput: + logger.info( + f"Duplicates constraint {binding_constraint_id} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) + return study_service.binding_constraint_manager.duplicate_binding_constraint( + study, binding_constraint_id, new_constraint_name + ) + @bp.delete( "/studies/{uuid}/bindingconstraints/{binding_constraint_id}", tags=[APITag.study_data], diff --git a/tests/integration/study_data_blueprint/test_binding_constraints.py b/tests/integration/study_data_blueprint/test_binding_constraints.py index c5e8d17b5b..e0f19a21cc 100644 --- a/tests/integration/study_data_blueprint/test_binding_constraints.py +++ b/tests/integration/study_data_blueprint/test_binding_constraints.py @@ -462,10 +462,61 @@ def test_lifecycle__nominal(self, client: TestClient, user_access_token: str, st assert len(dataframe["index"]) == 366 assert len(dataframe["columns"]) == 3 # less, equal, greater + # ============================= + # CONSTRAINT DUPLICATION + # ============================= + + # Change source constraint matrix to ensure it will be copied correctly + new_matrix = np.ones((366, 3)).tolist() + res = client.post( + f"/v1/studies/{study_id}/raw", params={"path": f"input/bindingconstraints/{bc_id}"}, json=new_matrix + ) + res.raise_for_status() + + # Get the source constraint properties to ensure there are copied correctly + res = client.get(f"/v1/studies/{study_id}/bindingconstraints/{bc_id}") + res.raise_for_status() + current_constraint = res.json() + current_constraint.pop("name") + current_constraint.pop("id") + + # Duplicates the constraint + duplicated_name = "BC_4" + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id}", params={"new_constraint_name": duplicated_name} + ) + res.raise_for_status() + duplicated_constraint = res.json() + + # Asserts the duplicated constraint has the right name and the right properties + assert duplicated_constraint.pop("name") == duplicated_name + new_id = duplicated_constraint.pop("id") + assert current_constraint == duplicated_constraint + + # Asserts the matrix is duplicated correctly + res = client.get(f"/v1/studies/{study_id}/raw", params={"path": f"input/bindingconstraints/{new_id}"}) + res.raise_for_status() + assert res.json()["data"] == new_matrix + # ============================= # ERRORS # ============================= + # Asserts duplication fails if given an non-exisiting constraint + fake_name = "fake_name" + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{fake_name}", params={"new_constraint_name": "aa"} + ) + assert res.status_code == 404 + assert res.json()["exception"] == "BindingConstraintNotFound" + assert res.json()["description"] == f"Binding constraint '{fake_name}' not found" + + # Asserts duplication fails if given an already existing name + res = client.post(f"/v1/studies/{study_id}/bindingconstraints/{bc_id}", params={"new_constraint_name": bc_id}) + assert res.status_code == 409 + assert res.json()["exception"] == "DuplicateConstraintName" + assert res.json()["description"] == f"A binding constraint with the same name already exists: {bc_id}." + # Assert empty name res = client.post( f"/v1/studies/{study_id}/bindingconstraints", @@ -921,6 +972,45 @@ def test_for_version_870(self, client: TestClient, user_access_token: str, study binding_constraints_list = preparer.get_binding_constraints(study_id) assert len(binding_constraints_list) == 2 + # ============================= + # CONSTRAINT DUPLICATION + # ============================= + + # Change source constraint matrix to ensure it will be copied correctly + new_matrix = np.ones((366, 1)).tolist() + res = client.post( + f"/v1/studies/{study_id}/raw", + params={"path": f"input/bindingconstraints/{bc_id_w_matrix}_lt"}, + json=new_matrix, + ) + res.raise_for_status() + + # Get the source constraint properties to ensure there are copied correctly + res = client.get(f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_matrix}") + res.raise_for_status() + current_constraint = res.json() + current_constraint.pop("name") + current_constraint.pop("id") + + # Duplicates the constraint + duplicated_name = "BC_4" + res = client.post( + f"/v1/studies/{study_id}/bindingconstraints/{bc_id_w_matrix}", + params={"new_constraint_name": duplicated_name}, + ) + res.raise_for_status() + duplicated_constraint = res.json() + + # Asserts the duplicated constraint has the right name and the right properties + assert duplicated_constraint.pop("name") == duplicated_name + new_id = duplicated_constraint.pop("id") + assert current_constraint == duplicated_constraint + + # Asserts the matrix is duplicated correctly + res = client.get(f"/v1/studies/{study_id}/raw", params={"path": f"input/bindingconstraints/{new_id}_lt"}) + res.raise_for_status() + assert res.json()["data"] == new_matrix + # ============================= # ERRORS # ============================= From abc882cc1f367d10034763b88d1d87b767a8fbe7 Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:13:28 +0100 Subject: [PATCH 02/11] feat: happy new year (#2299) Change all headers to 2025 --- antarest/__init__.py | 2 +- antarest/core/__init__.py | 2 +- antarest/core/application.py | 2 +- antarest/core/cache/__init__.py | 2 +- antarest/core/cache/business/__init__.py | 2 +- antarest/core/cache/business/local_chache.py | 2 +- antarest/core/cache/business/redis_cache.py | 2 +- antarest/core/cache/main.py | 2 +- antarest/core/cli.py | 2 +- antarest/core/config.py | 2 +- antarest/core/configdata/__init__.py | 2 +- antarest/core/configdata/model.py | 2 +- antarest/core/configdata/repository.py | 2 +- antarest/core/core_blueprint.py | 2 +- antarest/core/exceptions.py | 2 +- antarest/core/filesystem_blueprint.py | 2 +- antarest/core/filetransfer/__init__.py | 2 +- antarest/core/filetransfer/main.py | 2 +- antarest/core/filetransfer/model.py | 2 +- antarest/core/filetransfer/repository.py | 2 +- antarest/core/filetransfer/service.py | 2 +- antarest/core/filetransfer/web.py | 2 +- antarest/core/interfaces/__init__.py | 2 +- antarest/core/interfaces/cache.py | 2 +- antarest/core/interfaces/eventbus.py | 2 +- antarest/core/interfaces/service.py | 2 +- antarest/core/jwt.py | 2 +- antarest/core/logging/__init__.py | 2 +- antarest/core/logging/utils.py | 2 +- antarest/core/maintenance/__init__.py | 2 +- antarest/core/maintenance/main.py | 2 +- antarest/core/maintenance/model.py | 2 +- antarest/core/maintenance/repository.py | 2 +- antarest/core/maintenance/service.py | 2 +- antarest/core/maintenance/web.py | 2 +- antarest/core/model.py | 2 +- antarest/core/permissions.py | 2 +- antarest/core/persistence.py | 2 +- antarest/core/requests.py | 2 +- antarest/core/roles.py | 2 +- antarest/core/serialization/__init__.py | 2 +- antarest/core/swagger.py | 2 +- antarest/core/tasks/__init__.py | 2 +- antarest/core/tasks/main.py | 2 +- antarest/core/tasks/model.py | 2 +- antarest/core/tasks/repository.py | 2 +- antarest/core/tasks/service.py | 2 +- antarest/core/tasks/web.py | 2 +- antarest/core/utils/__init__.py | 2 +- antarest/core/utils/archives.py | 2 +- antarest/core/utils/string.py | 2 +- antarest/core/utils/utils.py | 2 +- antarest/core/utils/web.py | 2 +- antarest/core/version_info.py | 2 +- antarest/dbmodel.py | 2 +- antarest/desktop/__init__.py | 2 +- antarest/desktop/systray_app.py | 2 +- antarest/eventbus/__init__.py | 2 +- antarest/eventbus/business/__init__.py | 2 +- antarest/eventbus/business/interfaces.py | 2 +- antarest/eventbus/business/local_eventbus.py | 2 +- antarest/eventbus/business/redis_eventbus.py | 2 +- antarest/eventbus/main.py | 2 +- antarest/eventbus/service.py | 2 +- antarest/eventbus/web.py | 2 +- antarest/front.py | 2 +- antarest/gui.py | 2 +- antarest/launcher/__init__.py | 2 +- antarest/launcher/adapters/__init__.py | 2 +- antarest/launcher/adapters/abstractlauncher.py | 2 +- antarest/launcher/adapters/factory_launcher.py | 2 +- antarest/launcher/adapters/local_launcher/__init__.py | 2 +- antarest/launcher/adapters/local_launcher/local_launcher.py | 2 +- antarest/launcher/adapters/log_manager.py | 2 +- antarest/launcher/adapters/log_parser.py | 2 +- antarest/launcher/adapters/slurm_launcher/__init__.py | 2 +- antarest/launcher/adapters/slurm_launcher/slurm_launcher.py | 2 +- antarest/launcher/extensions/__init__.py | 2 +- antarest/launcher/extensions/adequacy_patch/__init__.py | 2 +- antarest/launcher/extensions/adequacy_patch/extension.py | 2 +- antarest/launcher/extensions/interface.py | 2 +- antarest/launcher/main.py | 2 +- antarest/launcher/model.py | 2 +- antarest/launcher/repository.py | 2 +- antarest/launcher/service.py | 2 +- antarest/launcher/ssh_client.py | 2 +- antarest/launcher/ssh_config.py | 2 +- antarest/launcher/web.py | 2 +- antarest/login/__init__.py | 2 +- antarest/login/auth.py | 2 +- antarest/login/ldap.py | 2 +- antarest/login/main.py | 2 +- antarest/login/model.py | 2 +- antarest/login/repository.py | 2 +- antarest/login/service.py | 2 +- antarest/login/utils.py | 2 +- antarest/login/web.py | 2 +- antarest/main.py | 2 +- antarest/matrixstore/__init__.py | 2 +- antarest/matrixstore/exceptions.py | 2 +- antarest/matrixstore/main.py | 2 +- antarest/matrixstore/matrix_editor.py | 2 +- antarest/matrixstore/matrix_garbage_collector.py | 2 +- antarest/matrixstore/model.py | 2 +- antarest/matrixstore/repository.py | 2 +- antarest/matrixstore/service.py | 2 +- antarest/matrixstore/uri_resolver_service.py | 2 +- antarest/matrixstore/web.py | 2 +- antarest/service_creator.py | 2 +- antarest/singleton_services.py | 2 +- antarest/study/__init__.py | 2 +- antarest/study/business/__init__.py | 2 +- antarest/study/business/adequacy_patch_management.py | 2 +- antarest/study/business/advanced_parameters_management.py | 2 +- antarest/study/business/aggregator_management.py | 2 +- antarest/study/business/all_optional_meta.py | 2 +- antarest/study/business/allocation_management.py | 2 +- antarest/study/business/area_management.py | 2 +- antarest/study/business/areas/__init__.py | 2 +- antarest/study/business/areas/hydro_management.py | 2 +- antarest/study/business/areas/properties_management.py | 2 +- antarest/study/business/areas/renewable_management.py | 2 +- antarest/study/business/areas/st_storage_management.py | 2 +- antarest/study/business/areas/thermal_management.py | 2 +- antarest/study/business/binding_constraint_management.py | 2 +- antarest/study/business/config_management.py | 2 +- antarest/study/business/correlation_management.py | 2 +- antarest/study/business/district_manager.py | 2 +- antarest/study/business/enum_ignore_case.py | 2 +- antarest/study/business/general_management.py | 2 +- antarest/study/business/link_management.py | 2 +- antarest/study/business/matrix_management.py | 2 +- antarest/study/business/model/__init__.py | 2 +- antarest/study/business/model/link_model.py | 2 +- antarest/study/business/optimization_management.py | 2 +- antarest/study/business/playlist_management.py | 2 +- antarest/study/business/scenario_builder_management.py | 2 +- antarest/study/business/table_mode_management.py | 2 +- antarest/study/business/thematic_trimming_field_infos.py | 2 +- antarest/study/business/thematic_trimming_management.py | 2 +- antarest/study/business/timeseries_config_management.py | 2 +- antarest/study/business/utils.py | 2 +- antarest/study/business/xpansion_management.py | 2 +- antarest/study/common/__init__.py | 2 +- antarest/study/common/studystorage.py | 2 +- antarest/study/css4_colors.py | 2 +- antarest/study/main.py | 2 +- antarest/study/model.py | 2 +- antarest/study/repository.py | 2 +- antarest/study/service.py | 2 +- antarest/study/storage/__init__.py | 2 +- antarest/study/storage/abstract_storage_service.py | 2 +- antarest/study/storage/auto_archive_service.py | 2 +- antarest/study/storage/df_download.py | 2 +- antarest/study/storage/explorer_service.py | 2 +- antarest/study/storage/matrix_profile.py | 2 +- antarest/study/storage/patch_service.py | 2 +- antarest/study/storage/rawstudy/__init__.py | 2 +- antarest/study/storage/rawstudy/ini_reader.py | 2 +- antarest/study/storage/rawstudy/ini_writer.py | 2 +- antarest/study/storage/rawstudy/model/__init__.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/__init__.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/bucket_node.py | 2 +- .../study/storage/rawstudy/model/filesystem/common/__init__.py | 2 +- .../rawstudy/model/filesystem/common/area_matrix_list.py | 2 +- .../study/storage/rawstudy/model/filesystem/common/prepro.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/__init__.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/config/area.py | 2 +- .../rawstudy/model/filesystem/config/binding_constraint.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/cluster.py | 2 +- .../storage/rawstudy/model/filesystem/config/exceptions.py | 2 +- .../rawstudy/model/filesystem/config/field_validators.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/files.py | 2 +- .../storage/rawstudy/model/filesystem/config/identifier.py | 2 +- .../storage/rawstudy/model/filesystem/config/ini_properties.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/model.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/renewable.py | 2 +- .../rawstudy/model/filesystem/config/ruleset_matrices.py | 2 +- .../storage/rawstudy/model/filesystem/config/st_storage.py | 2 +- .../study/storage/rawstudy/model/filesystem/config/thermal.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/context.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/exceptions.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/factory.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/folder_node.py | 2 +- .../study/storage/rawstudy/model/filesystem/ini_file_node.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/inode.py | 2 +- .../study/storage/rawstudy/model/filesystem/json_file_node.py | 2 +- antarest/study/storage/rawstudy/model/filesystem/lazy_node.py | 2 +- .../study/storage/rawstudy/model/filesystem/matrix/__init__.py | 2 +- .../study/storage/rawstudy/model/filesystem/matrix/constants.py | 2 +- .../storage/rawstudy/model/filesystem/matrix/date_serializer.py | 2 +- .../storage/rawstudy/model/filesystem/matrix/head_writer.py | 2 +- .../rawstudy/model/filesystem/matrix/input_series_matrix.py | 2 +- .../study/storage/rawstudy/model/filesystem/matrix/matrix.py | 2 +- .../rawstudy/model/filesystem/matrix/output_series_matrix.py | 2 +- .../study/storage/rawstudy/model/filesystem/raw_file_node.py | 2 +- .../study/storage/rawstudy/model/filesystem/root/__init__.py | 2 +- .../study/storage/rawstudy/model/filesystem/root/desktop.py | 2 +- .../storage/rawstudy/model/filesystem/root/filestudytree.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/areas/__init__.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/areas/areas.py | 2 +- .../rawstudy/model/filesystem/root/input/areas/item/__init__.py | 2 +- .../model/filesystem/root/input/areas/item/adequacy_patch.py | 2 +- .../rawstudy/model/filesystem/root/input/areas/item/item.py | 2 +- .../model/filesystem/root/input/areas/item/optimization.py | 2 +- .../rawstudy/model/filesystem/root/input/areas/item/ui.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/areas/list.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/areas/sets.py | 2 +- .../model/filesystem/root/input/bindingconstraints/__init__.py | 2 +- .../root/input/bindingconstraints/bindingconstraints_ini.py | 2 +- .../root/input/bindingconstraints/bindingcontraints.py | 2 +- .../rawstudy/model/filesystem/root/input/commons/__init__.py | 2 +- .../model/filesystem/root/input/commons/prepro_series.py | 2 +- .../rawstudy/model/filesystem/root/input/hydro/__init__.py | 2 +- .../model/filesystem/root/input/hydro/allocation/__init__.py | 2 +- .../model/filesystem/root/input/hydro/allocation/allocation.py | 2 +- .../model/filesystem/root/input/hydro/allocation/area.py | 2 +- .../model/filesystem/root/input/hydro/common/__init__.py | 2 +- .../filesystem/root/input/hydro/common/capacity/__init__.py | 2 +- .../filesystem/root/input/hydro/common/capacity/capacity.py | 2 +- .../rawstudy/model/filesystem/root/input/hydro/common/common.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/hydro/hydro.py | 2 +- .../rawstudy/model/filesystem/root/input/hydro/hydro_ini.py | 2 +- .../model/filesystem/root/input/hydro/prepro/__init__.py | 2 +- .../model/filesystem/root/input/hydro/prepro/area/__init__.py | 2 +- .../model/filesystem/root/input/hydro/prepro/area/area.py | 2 +- .../model/filesystem/root/input/hydro/prepro/area/prepro.py | 2 +- .../rawstudy/model/filesystem/root/input/hydro/prepro/prepro.py | 2 +- .../model/filesystem/root/input/hydro/series/__init__.py | 2 +- .../model/filesystem/root/input/hydro/series/area/__init__.py | 2 +- .../model/filesystem/root/input/hydro/series/area/area.py | 2 +- .../rawstudy/model/filesystem/root/input/hydro/series/series.py | 2 +- .../study/storage/rawstudy/model/filesystem/root/input/input.py | 2 +- .../rawstudy/model/filesystem/root/input/link/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/link/area/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/link/area/area.py | 2 +- .../filesystem/root/input/link/area/capacities/__init__.py | 2 +- .../filesystem/root/input/link/area/capacities/capacities.py | 2 +- .../model/filesystem/root/input/link/area/properties.py | 2 +- .../storage/rawstudy/model/filesystem/root/input/link/link.py | 2 +- .../rawstudy/model/filesystem/root/input/miscgen/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/miscgen/miscgen.py | 2 +- .../rawstudy/model/filesystem/root/input/renewables/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/renewables/clusters.py | 2 +- .../model/filesystem/root/input/renewables/renewable.py | 2 +- .../rawstudy/model/filesystem/root/input/renewables/series.py | 2 +- .../rawstudy/model/filesystem/root/input/reserves/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/reserves/reserves.py | 2 +- .../rawstudy/model/filesystem/root/input/st_storage/__init__.py | 2 +- .../model/filesystem/root/input/st_storage/clusters/__init__.py | 2 +- .../filesystem/root/input/st_storage/clusters/area/__init__.py | 2 +- .../filesystem/root/input/st_storage/clusters/area/area.py | 2 +- .../filesystem/root/input/st_storage/clusters/area/list.py | 2 +- .../model/filesystem/root/input/st_storage/clusters/clusters.py | 2 +- .../model/filesystem/root/input/st_storage/series/__init__.py | 2 +- .../filesystem/root/input/st_storage/series/area/__init__.py | 2 +- .../model/filesystem/root/input/st_storage/series/area/area.py | 2 +- .../root/input/st_storage/series/area/st_storage/__init__.py | 2 +- .../root/input/st_storage/series/area/st_storage/st_storage.py | 2 +- .../model/filesystem/root/input/st_storage/series/series.py | 2 +- .../model/filesystem/root/input/st_storage/st_storage.py | 2 +- .../rawstudy/model/filesystem/root/input/thermal/__init__.py | 2 +- .../rawstudy/model/filesystem/root/input/thermal/areas_ini.py | 2 +- .../model/filesystem/root/input/thermal/cluster/__init__.py | 2 +- .../filesystem/root/input/thermal/cluster/area/__init__.py | 2 +- .../model/filesystem/root/input/thermal/cluster/area/area.py | 2 +- .../model/filesystem/root/input/thermal/cluster/area/list.py | 2 +- .../model/filesystem/root/input/thermal/cluster/cluster.py | 2 +- .../model/filesystem/root/input/thermal/prepro/__init__.py | 2 +- .../model/filesystem/root/input/thermal/prepro/area/__init__.py | 2 +- .../model/filesystem/root/input/thermal/prepro/area/area.py | 2 +- .../root/input/thermal/prepro/area/thermal/__init__.py | 2 +- .../root/input/thermal/prepro/area/thermal/thermal.py | 2 +- .../model/filesystem/root/input/thermal/prepro/prepro.py | 2 +- .../model/filesystem/root/input/thermal/series/__init__.py | 2 +- .../model/filesystem/root/input/thermal/series/area/__init__.py | 2 +- .../model/filesystem/root/input/thermal/series/area/area.py | 2 +- .../root/input/thermal/series/area/thermal/__init__.py | 2 +- .../root/input/thermal/series/area/thermal/thermal.py | 2 +- .../model/filesystem/root/input/thermal/series/series.py | 2 +- .../rawstudy/model/filesystem/root/input/thermal/thermal.py | 2 +- .../storage/rawstudy/model/filesystem/root/layers/__init__.py | 2 +- .../storage/rawstudy/model/filesystem/root/layers/layer_ini.py | 2 +- .../storage/rawstudy/model/filesystem/root/layers/layers.py | 2 +- .../storage/rawstudy/model/filesystem/root/output/__init__.py | 2 +- .../storage/rawstudy/model/filesystem/root/output/output.py | 2 +- .../model/filesystem/root/output/simulation/__init__.py | 2 +- .../model/filesystem/root/output/simulation/about/__init__.py | 2 +- .../model/filesystem/root/output/simulation/about/about.py | 2 +- .../model/filesystem/root/output/simulation/about/study.py | 2 +- .../filesystem/root/output/simulation/info_antares_output.py | 2 +- .../model/filesystem/root/output/simulation/mode/__init__.py | 2 +- .../filesystem/root/output/simulation/mode/common/__init__.py | 2 +- .../model/filesystem/root/output/simulation/mode/common/area.py | 2 +- .../filesystem/root/output/simulation/mode/common/areas.py | 2 +- .../root/output/simulation/mode/common/binding_const.py | 2 +- .../model/filesystem/root/output/simulation/mode/common/link.py | 2 +- .../filesystem/root/output/simulation/mode/common/links.py | 2 +- .../model/filesystem/root/output/simulation/mode/common/set.py | 2 +- .../filesystem/root/output/simulation/mode/common/utils.py | 2 +- .../model/filesystem/root/output/simulation/mode/economy.py | 2 +- .../filesystem/root/output/simulation/mode/mcall/__init__.py | 2 +- .../model/filesystem/root/output/simulation/mode/mcall/grid.py | 2 +- .../filesystem/root/output/simulation/mode/mcind/__init__.py | 2 +- .../model/filesystem/root/output/simulation/mode/mcind/mcind.py | 2 +- .../model/filesystem/root/output/simulation/simulation.py | 2 +- .../filesystem/root/output/simulation/ts_generator/__init__.py | 2 +- .../root/output/simulation/ts_generator/ts_generator.py | 2 +- .../filesystem/root/output/simulation/ts_numbers/__init__.py | 2 +- .../filesystem/root/output/simulation/ts_numbers/ts_numbers.py | 2 +- .../root/output/simulation/ts_numbers/ts_numbers_data.py | 2 +- .../filesystem/root/output/simulation/xpansion/__init__.py | 2 +- .../model/filesystem/root/output/simulation/xpansion/lp.py | 2 +- .../filesystem/root/output/simulation/xpansion/sensitivity.py | 2 +- .../filesystem/root/output/simulation/xpansion/xpansion.py | 2 +- .../storage/rawstudy/model/filesystem/root/settings/__init__.py | 2 +- .../rawstudy/model/filesystem/root/settings/generaldata.py | 2 +- .../model/filesystem/root/settings/resources/__init__.py | 2 +- .../model/filesystem/root/settings/resources/resources.py | 2 +- .../rawstudy/model/filesystem/root/settings/scenariobuilder.py | 2 +- .../storage/rawstudy/model/filesystem/root/settings/settings.py | 2 +- .../model/filesystem/root/settings/simulations/__init__.py | 2 +- .../model/filesystem/root/settings/simulations/simulations.py | 2 +- .../storage/rawstudy/model/filesystem/root/study_antares.py | 2 +- .../storage/rawstudy/model/filesystem/root/user/__init__.py | 2 +- .../rawstudy/model/filesystem/root/user/expansion/__init__.py | 2 +- .../rawstudy/model/filesystem/root/user/expansion/candidates.py | 2 +- .../filesystem/root/user/expansion/constraint_resources.py | 2 +- .../rawstudy/model/filesystem/root/user/expansion/expansion.py | 2 +- .../model/filesystem/root/user/expansion/matrix_resources.py | 2 +- .../model/filesystem/root/user/expansion/sensitivity.py | 2 +- .../rawstudy/model/filesystem/root/user/expansion/settings.py | 2 +- .../study/storage/rawstudy/model/filesystem/root/user/user.py | 2 +- antarest/study/storage/rawstudy/model/helpers.py | 2 +- antarest/study/storage/rawstudy/raw_study_service.py | 2 +- antarest/study/storage/rawstudy/watcher.py | 2 +- antarest/study/storage/storage_service.py | 2 +- antarest/study/storage/study_download_utils.py | 2 +- antarest/study/storage/study_upgrader/__init__.py | 2 +- antarest/study/storage/utils.py | 2 +- antarest/study/storage/variantstudy/__init__.py | 2 +- antarest/study/storage/variantstudy/business/__init__.py | 2 +- .../study/storage/variantstudy/business/command_extractor.py | 2 +- .../study/storage/variantstudy/business/command_reverter.py | 2 +- .../storage/variantstudy/business/matrix_constants/__init__.py | 2 +- .../business/matrix_constants/binding_constraint/__init__.py | 2 +- .../matrix_constants/binding_constraint/series_after_v87.py | 2 +- .../matrix_constants/binding_constraint/series_before_v87.py | 2 +- .../storage/variantstudy/business/matrix_constants/common.py | 2 +- .../variantstudy/business/matrix_constants/hydro/__init__.py | 2 +- .../storage/variantstudy/business/matrix_constants/hydro/v6.py | 2 +- .../storage/variantstudy/business/matrix_constants/hydro/v7.py | 2 +- .../variantstudy/business/matrix_constants/link/__init__.py | 2 +- .../storage/variantstudy/business/matrix_constants/link/v7.py | 2 +- .../storage/variantstudy/business/matrix_constants/link/v8.py | 2 +- .../storage/variantstudy/business/matrix_constants/prepro.py | 2 +- .../business/matrix_constants/st_storage/__init__.py | 2 +- .../variantstudy/business/matrix_constants/st_storage/series.py | 2 +- .../variantstudy/business/matrix_constants/thermals/__init__.py | 2 +- .../variantstudy/business/matrix_constants/thermals/prepro.py | 2 +- .../storage/variantstudy/business/matrix_constants_generator.py | 2 +- antarest/study/storage/variantstudy/business/utils.py | 2 +- .../storage/variantstudy/business/utils_binding_constraint.py | 2 +- antarest/study/storage/variantstudy/command_factory.py | 2 +- antarest/study/storage/variantstudy/model/__init__.py | 2 +- antarest/study/storage/variantstudy/model/command/__init__.py | 2 +- antarest/study/storage/variantstudy/model/command/common.py | 2 +- .../study/storage/variantstudy/model/command/create_area.py | 2 +- .../variantstudy/model/command/create_binding_constraint.py | 2 +- .../study/storage/variantstudy/model/command/create_cluster.py | 2 +- .../study/storage/variantstudy/model/command/create_district.py | 2 +- .../study/storage/variantstudy/model/command/create_link.py | 2 +- .../variantstudy/model/command/create_renewables_cluster.py | 2 +- .../storage/variantstudy/model/command/create_st_storage.py | 2 +- .../storage/variantstudy/model/command/create_user_resource.py | 2 +- .../model/command/generate_thermal_cluster_timeseries.py | 2 +- antarest/study/storage/variantstudy/model/command/icommand.py | 2 +- .../study/storage/variantstudy/model/command/remove_area.py | 2 +- .../variantstudy/model/command/remove_binding_constraint.py | 2 +- .../study/storage/variantstudy/model/command/remove_cluster.py | 2 +- .../study/storage/variantstudy/model/command/remove_district.py | 2 +- .../study/storage/variantstudy/model/command/remove_link.py | 2 +- .../variantstudy/model/command/remove_renewables_cluster.py | 2 +- .../storage/variantstudy/model/command/remove_st_storage.py | 2 +- .../storage/variantstudy/model/command/remove_user_resource.py | 2 +- .../study/storage/variantstudy/model/command/replace_matrix.py | 2 +- .../variantstudy/model/command/update_binding_constraint.py | 2 +- .../study/storage/variantstudy/model/command/update_comments.py | 2 +- .../study/storage/variantstudy/model/command/update_config.py | 2 +- .../study/storage/variantstudy/model/command/update_district.py | 2 +- .../study/storage/variantstudy/model/command/update_link.py | 2 +- .../study/storage/variantstudy/model/command/update_playlist.py | 2 +- .../study/storage/variantstudy/model/command/update_raw_file.py | 2 +- .../variantstudy/model/command/update_scenario_builder.py | 2 +- antarest/study/storage/variantstudy/model/command_context.py | 2 +- .../storage/variantstudy/model/command_listener/__init__.py | 2 +- .../variantstudy/model/command_listener/command_listener.py | 2 +- antarest/study/storage/variantstudy/model/dbmodel.py | 2 +- antarest/study/storage/variantstudy/model/interfaces.py | 2 +- antarest/study/storage/variantstudy/model/model.py | 2 +- antarest/study/storage/variantstudy/repository.py | 2 +- antarest/study/storage/variantstudy/snapshot_generator.py | 2 +- .../study/storage/variantstudy/variant_command_extractor.py | 2 +- .../study/storage/variantstudy/variant_command_generator.py | 2 +- antarest/study/storage/variantstudy/variant_study_service.py | 2 +- antarest/study/web/__init__.py | 2 +- antarest/study/web/explorer_blueprint.py | 2 +- antarest/study/web/raw_studies_blueprint.py | 2 +- antarest/study/web/studies_blueprint.py | 2 +- antarest/study/web/study_data_blueprint.py | 2 +- antarest/study/web/variant_blueprint.py | 2 +- antarest/study/web/watcher_blueprint.py | 2 +- antarest/study/web/xpansion_studies_blueprint.py | 2 +- antarest/tools/__init__.py | 2 +- antarest/tools/admin.py | 2 +- antarest/tools/admin_lib.py | 2 +- antarest/tools/cli.py | 2 +- antarest/tools/lib.py | 2 +- antarest/worker/__init__.py | 2 +- antarest/worker/archive_worker.py | 2 +- antarest/worker/archive_worker_service.py | 2 +- antarest/worker/worker.py | 2 +- antarest/wsgi.py | 2 +- scripts/license_checker_and_adder.py | 2 +- tests/__init__.py | 2 +- tests/cache/__init__.py | 2 +- tests/cache/test_local_cache.py | 2 +- tests/cache/test_redis_cache.py | 2 +- tests/cache/test_service.py | 2 +- tests/conftest.py | 2 +- tests/conftest_db.py | 2 +- tests/conftest_instances.py | 2 +- tests/conftest_services.py | 2 +- tests/core/__init__.py | 2 +- tests/core/assets/__init__.py | 2 +- tests/core/tasks/__init__.py | 2 +- tests/core/tasks/test_model.py | 2 +- tests/core/tasks/test_task_job_service.py | 2 +- tests/core/test_auth.py | 2 +- tests/core/test_exceptions.py | 2 +- tests/core/test_file_transfer.py | 2 +- tests/core/test_jwt.py | 2 +- tests/core/test_maintenance.py | 2 +- tests/core/test_tasks.py | 2 +- tests/core/test_utils.py | 2 +- tests/core/test_utils_bp.py | 2 +- tests/core/test_version_info.py | 2 +- tests/core/utils/__init__.py | 2 +- tests/core/utils/test_extract_zip.py | 2 +- tests/db_statement_recorder.py | 2 +- tests/eventbus/__init__.py | 2 +- tests/eventbus/test_local_eventbus.py | 2 +- tests/eventbus/test_redis_event_bus.py | 2 +- tests/eventbus/test_service.py | 2 +- tests/eventbus/test_websocket_manager.py | 2 +- tests/helpers.py | 2 +- tests/integration/__init__.py | 2 +- tests/integration/assets/__init__.py | 2 +- tests/integration/conftest.py | 2 +- tests/integration/explorer_blueprint/test_explorer.py | 2 +- tests/integration/filesystem_blueprint/__init__.py | 2 +- .../filesystem_blueprint/test_filesystem_endpoints.py | 2 +- tests/integration/filesystem_blueprint/test_model.py | 2 +- tests/integration/launcher_blueprint/__init__.py | 2 +- tests/integration/launcher_blueprint/test_launcher_local.py | 2 +- tests/integration/launcher_blueprint/test_solver_versions.py | 2 +- tests/integration/prepare_proxy.py | 2 +- tests/integration/raw_studies_blueprint/__init__.py | 2 +- tests/integration/raw_studies_blueprint/assets/__init__.py | 2 +- .../raw_studies_blueprint/test_aggregate_raw_data.py | 2 +- .../integration/raw_studies_blueprint/test_download_matrices.py | 2 +- tests/integration/raw_studies_blueprint/test_fetch_raw_data.py | 2 +- tests/integration/studies_blueprint/__init__.py | 2 +- tests/integration/studies_blueprint/assets/__init__.py | 2 +- tests/integration/studies_blueprint/test_comments.py | 2 +- tests/integration/studies_blueprint/test_disk_usage.py | 2 +- tests/integration/studies_blueprint/test_get_studies.py | 2 +- tests/integration/studies_blueprint/test_move.py | 2 +- tests/integration/studies_blueprint/test_study_matrix_index.py | 2 +- tests/integration/studies_blueprint/test_study_version.py | 2 +- tests/integration/studies_blueprint/test_synthesis.py | 2 +- tests/integration/studies_blueprint/test_update_tags.py | 2 +- tests/integration/study_data_blueprint/__init__.py | 2 +- .../study_data_blueprint/test_advanced_parameters.py | 2 +- .../study_data_blueprint/test_binding_constraints.py | 2 +- tests/integration/study_data_blueprint/test_config_general.py | 2 +- tests/integration/study_data_blueprint/test_edit_matrix.py | 2 +- .../test_generate_thermal_cluster_timeseries.py | 2 +- tests/integration/study_data_blueprint/test_hydro_allocation.py | 2 +- .../integration/study_data_blueprint/test_hydro_correlation.py | 2 +- .../study_data_blueprint/test_hydro_inflow_structure.py | 2 +- tests/integration/study_data_blueprint/test_link.py | 2 +- tests/integration/study_data_blueprint/test_playlist.py | 2 +- tests/integration/study_data_blueprint/test_renewable.py | 2 +- tests/integration/study_data_blueprint/test_st_storage.py | 2 +- tests/integration/study_data_blueprint/test_table_mode.py | 2 +- tests/integration/study_data_blueprint/test_thermal.py | 2 +- tests/integration/test_apidoc.py | 2 +- tests/integration/test_core_blueprint.py | 2 +- tests/integration/test_integration.py | 2 +- tests/integration/test_integration_token_end_to_end.py | 2 +- tests/integration/test_integration_variantmanager_tool.py | 2 +- tests/integration/test_integration_watcher.py | 2 +- tests/integration/test_studies_upgrade.py | 2 +- tests/integration/utils.py | 2 +- tests/integration/variant_blueprint/__init__.py | 2 +- tests/integration/variant_blueprint/test_renewable_cluster.py | 2 +- tests/integration/variant_blueprint/test_st_storage.py | 2 +- tests/integration/variant_blueprint/test_thermal_cluster.py | 2 +- tests/integration/variant_blueprint/test_variant_manager.py | 2 +- tests/integration/xpansion_studies_blueprint/__init__.py | 2 +- .../xpansion_studies_blueprint/test_integration_xpansion.py | 2 +- tests/launcher/__init__.py | 2 +- tests/launcher/assets/__init__.py | 2 +- tests/launcher/test_extension_adequacy_patch.py | 2 +- tests/launcher/test_local_launcher.py | 2 +- tests/launcher/test_log_manager.py | 2 +- tests/launcher/test_log_parser.py | 2 +- tests/launcher/test_model.py | 2 +- tests/launcher/test_repository.py | 2 +- tests/launcher/test_service.py | 2 +- tests/launcher/test_slurm_launcher.py | 2 +- tests/launcher/test_ssh_client.py | 2 +- tests/launcher/test_web.py | 2 +- tests/login/__init__.py | 2 +- tests/login/conftest.py | 2 +- tests/login/test_ldap.py | 2 +- tests/login/test_login_service.py | 2 +- tests/login/test_model.py | 2 +- tests/login/test_repository.py | 2 +- tests/login/test_web.py | 2 +- tests/matrixstore/__init__.py | 2 +- tests/matrixstore/conftest.py | 2 +- tests/matrixstore/test_matrix_editor.py | 2 +- tests/matrixstore/test_matrix_garbage_collector.py | 2 +- tests/matrixstore/test_repository.py | 2 +- tests/matrixstore/test_service.py | 2 +- tests/matrixstore/test_web.py | 2 +- tests/storage/__init__.py | 2 +- tests/storage/business/__init__.py | 2 +- tests/storage/business/assets/__init__.py | 2 +- tests/storage/business/test_arealink_manager.py | 2 +- tests/storage/business/test_autoarchive_service.py | 2 +- tests/storage/business/test_config_manager.py | 2 +- tests/storage/business/test_explorer_service.py | 2 +- tests/storage/business/test_export.py | 2 +- tests/storage/business/test_import.py | 2 +- tests/storage/business/test_patch_service.py | 2 +- tests/storage/business/test_raw_study_service.py | 2 +- tests/storage/business/test_repository.py | 2 +- tests/storage/business/test_study_service_utils.py | 2 +- tests/storage/business/test_study_version_upgrader.py | 2 +- tests/storage/business/test_timeseries_config_manager.py | 2 +- tests/storage/business/test_url_resolver_service.py | 2 +- tests/storage/business/test_variant_study_service.py | 2 +- tests/storage/business/test_watcher.py | 2 +- tests/storage/business/test_xpansion_manager.py | 2 +- tests/storage/conftest.py | 2 +- tests/storage/integration/conftest.py | 2 +- tests/storage/integration/data/__init__.py | 2 +- tests/storage/integration/data/de_details_hourly.py | 2 +- tests/storage/integration/data/de_fr_values_hourly.py | 2 +- tests/storage/integration/data/digest_file.py | 2 +- tests/storage/integration/data/set_id_annual.py | 2 +- tests/storage/integration/data/set_values_monthly.py | 2 +- tests/storage/integration/test_STA_mini.py | 2 +- tests/storage/integration/test_exporter.py | 2 +- tests/storage/integration/test_write_STA_mini.py | 2 +- tests/storage/rawstudies/__init__.py | 2 +- tests/storage/rawstudies/samples/__init__.py | 2 +- tests/storage/rawstudies/test_factory.py | 2 +- tests/storage/rawstudies/test_helpers.py | 2 +- tests/storage/repository/__init__.py | 2 +- tests/storage/repository/antares_io/__init__.py | 2 +- tests/storage/repository/antares_io/reader/test_ini_reader.py | 2 +- tests/storage/repository/antares_io/writer/test_ini_writer.py | 2 +- tests/storage/repository/filesystem/__init__.py | 2 +- tests/storage/repository/filesystem/config/__init__.py | 2 +- tests/storage/repository/filesystem/config/test_config_files.py | 2 +- tests/storage/repository/filesystem/config/test_files.py | 2 +- .../repository/filesystem/config/test_ruleset_matrices.py | 2 +- tests/storage/repository/filesystem/config/test_utils.py | 2 +- tests/storage/repository/filesystem/matrix/__init__.py | 2 +- .../repository/filesystem/matrix/test_date_serializer.py | 2 +- tests/storage/repository/filesystem/matrix/test_head_writer.py | 2 +- .../repository/filesystem/matrix/test_input_series_matrix.py | 2 +- tests/storage/repository/filesystem/matrix/test_matrix_node.py | 2 +- .../repository/filesystem/matrix/test_output_series_matrix.py | 2 +- tests/storage/repository/filesystem/root/__init__.py | 2 +- tests/storage/repository/filesystem/root/input/__init__.py | 2 +- .../storage/repository/filesystem/root/input/hydro/__init__.py | 2 +- .../repository/filesystem/root/input/hydro/common/__init__.py | 2 +- .../filesystem/root/input/hydro/common/capacity/__init__.py | 2 +- .../root/input/hydro/common/capacity/test_capacity.py | 2 +- .../repository/filesystem/root/input/hydro/series/__init__.py | 2 +- .../filesystem/root/input/hydro/series/area/__init__.py | 2 +- .../filesystem/root/input/hydro/series/area/test_area.py | 2 +- tests/storage/repository/filesystem/root/output/__init__.py | 2 +- .../repository/filesystem/root/output/simulation/__init__.py | 2 +- .../filesystem/root/output/simulation/mode/__init__.py | 2 +- .../filesystem/root/output/simulation/mode/common/__init__.py | 2 +- .../filesystem/root/output/simulation/mode/common/test_area.py | 2 +- .../root/output/simulation/mode/common/test_binding_const.py | 2 +- .../filesystem/root/output/simulation/mode/common/test_link.py | 2 +- .../filesystem/root/output/simulation/mode/common/test_set.py | 2 +- tests/storage/repository/filesystem/special_node/__init__.py | 2 +- .../repository/filesystem/special_node/input_areas_list_test.py | 2 +- tests/storage/repository/filesystem/test_bucket_node.py | 2 +- tests/storage/repository/filesystem/test_folder_node.py | 2 +- tests/storage/repository/filesystem/test_ini_file_node.py | 2 +- tests/storage/repository/filesystem/test_lazy_node.py | 2 +- tests/storage/repository/filesystem/test_raw_file_node.py | 2 +- tests/storage/repository/filesystem/test_scenariobuilder.py | 2 +- tests/storage/repository/filesystem/test_ts_numbers_vector.py | 2 +- tests/storage/repository/filesystem/utils.py | 2 +- tests/storage/repository/test_study.py | 2 +- tests/storage/test_model.py | 2 +- tests/storage/test_service.py | 2 +- tests/storage/web/__init__.py | 2 +- tests/storage/web/test_studies_bp.py | 2 +- tests/study/__init__.py | 2 +- tests/study/business/__init__.py | 2 +- tests/study/business/areas/__init__.py | 2 +- tests/study/business/areas/assets/__init__.py | 2 +- tests/study/business/areas/test_st_storage_management.py | 2 +- tests/study/business/areas/test_thermal_management.py | 2 +- tests/study/business/test_all_optional_metaclass.py | 2 +- tests/study/business/test_allocation_manager.py | 2 +- tests/study/business/test_binding_constraint_management.py | 2 +- tests/study/business/test_correlation_manager.py | 2 +- tests/study/business/test_district_manager.py | 2 +- tests/study/business/test_matrix_management.py | 2 +- tests/study/storage/__init__.py | 2 +- tests/study/storage/rawstudy/__init__.py | 2 +- tests/study/storage/rawstudy/test_raw_study_service.py | 2 +- tests/study/storage/test_abstract_storage_service.py | 2 +- tests/study/storage/test_utils.py | 2 +- tests/study/storage/variantstudy/__init__.py | 2 +- tests/study/storage/variantstudy/business/__init__.py | 2 +- .../variantstudy/business/test_matrix_constants_generator.py | 2 +- tests/study/storage/variantstudy/model/__init__.py | 2 +- tests/study/storage/variantstudy/model/test_dbmodel.py | 2 +- tests/study/storage/variantstudy/test_snapshot_generator.py | 2 +- tests/study/storage/variantstudy/test_variant_study_service.py | 2 +- tests/study/test_model.py | 2 +- tests/study/test_repository.py | 2 +- tests/study/test_service.py | 2 +- tests/test_front.py | 2 +- tests/test_resources.py | 2 +- tests/variantstudy/__init__.py | 2 +- tests/variantstudy/assets/__init__.py | 2 +- tests/variantstudy/conftest.py | 2 +- tests/variantstudy/model/__init__.py | 2 +- tests/variantstudy/model/command/__init__.py | 2 +- tests/variantstudy/model/command/helpers.py | 2 +- tests/variantstudy/model/command/test_alias_decoder.py | 2 +- tests/variantstudy/model/command/test_create_area.py | 2 +- tests/variantstudy/model/command/test_create_cluster.py | 2 +- tests/variantstudy/model/command/test_create_link.py | 2 +- .../model/command/test_create_renewables_cluster.py | 2 +- tests/variantstudy/model/command/test_create_st_storage.py | 2 +- .../model/command/test_manage_binding_constraints.py | 2 +- tests/variantstudy/model/command/test_manage_district.py | 2 +- tests/variantstudy/model/command/test_remove_area.py | 2 +- tests/variantstudy/model/command/test_remove_cluster.py | 2 +- tests/variantstudy/model/command/test_remove_link.py | 2 +- .../model/command/test_remove_renewables_cluster.py | 2 +- tests/variantstudy/model/command/test_remove_st_storage.py | 2 +- tests/variantstudy/model/command/test_replace_matrix.py | 2 +- tests/variantstudy/model/command/test_update_comments.py | 2 +- tests/variantstudy/model/command/test_update_config.py | 2 +- tests/variantstudy/model/command/test_update_rawfile.py | 2 +- tests/variantstudy/model/test_variant_model.py | 2 +- tests/variantstudy/test_command_factory.py | 2 +- tests/variantstudy/test_utils.py | 2 +- tests/variantstudy/test_variant_command_extractor.py | 2 +- tests/worker/__init__.py | 2 +- tests/worker/test_archive_worker.py | 2 +- tests/worker/test_archive_worker_service.py | 2 +- tests/worker/test_worker.py | 2 +- tests/xml_compare.py | 2 +- 682 files changed, 682 insertions(+), 682 deletions(-) diff --git a/antarest/__init__.py b/antarest/__init__.py index adaa163763..76b50ff27b 100644 --- a/antarest/__init__.py +++ b/antarest/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/__init__.py b/antarest/core/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/__init__.py +++ b/antarest/core/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/application.py b/antarest/core/application.py index 3f09bd4102..ec1ee40798 100644 --- a/antarest/core/application.py +++ b/antarest/core/application.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cache/__init__.py b/antarest/core/cache/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/cache/__init__.py +++ b/antarest/core/cache/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cache/business/__init__.py b/antarest/core/cache/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/cache/business/__init__.py +++ b/antarest/core/cache/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cache/business/local_chache.py b/antarest/core/cache/business/local_chache.py index 493322b9c6..0defd81a4b 100644 --- a/antarest/core/cache/business/local_chache.py +++ b/antarest/core/cache/business/local_chache.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cache/business/redis_cache.py b/antarest/core/cache/business/redis_cache.py index ee7e30a6d1..60bd3885ba 100644 --- a/antarest/core/cache/business/redis_cache.py +++ b/antarest/core/cache/business/redis_cache.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cache/main.py b/antarest/core/cache/main.py index c707732fec..cbc11cc6a2 100644 --- a/antarest/core/cache/main.py +++ b/antarest/core/cache/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/cli.py b/antarest/core/cli.py index e7de0a8140..162f1dedb7 100644 --- a/antarest/core/cli.py +++ b/antarest/core/cli.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/config.py b/antarest/core/config.py index 02394efc55..1a93131a0a 100644 --- a/antarest/core/config.py +++ b/antarest/core/config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/configdata/__init__.py b/antarest/core/configdata/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/configdata/__init__.py +++ b/antarest/core/configdata/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/configdata/model.py b/antarest/core/configdata/model.py index faa6589709..531a77935b 100644 --- a/antarest/core/configdata/model.py +++ b/antarest/core/configdata/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/configdata/repository.py b/antarest/core/configdata/repository.py index 3b7aea6ada..b8c458bd6b 100644 --- a/antarest/core/configdata/repository.py +++ b/antarest/core/configdata/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/core_blueprint.py b/antarest/core/core_blueprint.py index d344531699..5c50415d47 100644 --- a/antarest/core/core_blueprint.py +++ b/antarest/core/core_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index 722a385b26..7001d832ca 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filesystem_blueprint.py b/antarest/core/filesystem_blueprint.py index 804746993d..10145d744e 100644 --- a/antarest/core/filesystem_blueprint.py +++ b/antarest/core/filesystem_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/__init__.py b/antarest/core/filetransfer/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/filetransfer/__init__.py +++ b/antarest/core/filetransfer/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/main.py b/antarest/core/filetransfer/main.py index 3583dc5701..797e3652cc 100644 --- a/antarest/core/filetransfer/main.py +++ b/antarest/core/filetransfer/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/model.py b/antarest/core/filetransfer/model.py index 0a5958d57a..772dabf80b 100644 --- a/antarest/core/filetransfer/model.py +++ b/antarest/core/filetransfer/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/repository.py b/antarest/core/filetransfer/repository.py index 3df0594b80..da88f4d4be 100644 --- a/antarest/core/filetransfer/repository.py +++ b/antarest/core/filetransfer/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/service.py b/antarest/core/filetransfer/service.py index dffb5a4908..a82f7af814 100644 --- a/antarest/core/filetransfer/service.py +++ b/antarest/core/filetransfer/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/filetransfer/web.py b/antarest/core/filetransfer/web.py index 6fce2e834a..0c702bc340 100644 --- a/antarest/core/filetransfer/web.py +++ b/antarest/core/filetransfer/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/interfaces/__init__.py b/antarest/core/interfaces/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/interfaces/__init__.py +++ b/antarest/core/interfaces/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/interfaces/cache.py b/antarest/core/interfaces/cache.py index 95d6497864..f851d79102 100644 --- a/antarest/core/interfaces/cache.py +++ b/antarest/core/interfaces/cache.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/interfaces/eventbus.py b/antarest/core/interfaces/eventbus.py index d9075dc49e..e42b7baaf0 100644 --- a/antarest/core/interfaces/eventbus.py +++ b/antarest/core/interfaces/eventbus.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/interfaces/service.py b/antarest/core/interfaces/service.py index 2e735cbbe5..d9c7e7639c 100644 --- a/antarest/core/interfaces/service.py +++ b/antarest/core/interfaces/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/jwt.py b/antarest/core/jwt.py index aa8323abb8..5b7806615e 100644 --- a/antarest/core/jwt.py +++ b/antarest/core/jwt.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/logging/__init__.py b/antarest/core/logging/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/logging/__init__.py +++ b/antarest/core/logging/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/logging/utils.py b/antarest/core/logging/utils.py index 2fa8c4a040..fa24dab0b1 100644 --- a/antarest/core/logging/utils.py +++ b/antarest/core/logging/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/__init__.py b/antarest/core/maintenance/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/maintenance/__init__.py +++ b/antarest/core/maintenance/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/main.py b/antarest/core/maintenance/main.py index 8717150d07..a962d1b013 100644 --- a/antarest/core/maintenance/main.py +++ b/antarest/core/maintenance/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/model.py b/antarest/core/maintenance/model.py index c17beadbc3..5d14623628 100644 --- a/antarest/core/maintenance/model.py +++ b/antarest/core/maintenance/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/repository.py b/antarest/core/maintenance/repository.py index 1a69da65c6..6395785c2b 100644 --- a/antarest/core/maintenance/repository.py +++ b/antarest/core/maintenance/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/service.py b/antarest/core/maintenance/service.py index 4e4cecc24b..22a7a273a3 100644 --- a/antarest/core/maintenance/service.py +++ b/antarest/core/maintenance/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/maintenance/web.py b/antarest/core/maintenance/web.py index ed6e28cf9f..f984b70050 100644 --- a/antarest/core/maintenance/web.py +++ b/antarest/core/maintenance/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/model.py b/antarest/core/model.py index 78aa7a1e82..a0c61e9830 100644 --- a/antarest/core/model.py +++ b/antarest/core/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/permissions.py b/antarest/core/permissions.py index 55defacf7d..9bf073e809 100644 --- a/antarest/core/permissions.py +++ b/antarest/core/permissions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/persistence.py b/antarest/core/persistence.py index 5bc80c4e98..4af73a064a 100644 --- a/antarest/core/persistence.py +++ b/antarest/core/persistence.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/requests.py b/antarest/core/requests.py index 055bbd8cdd..78a8c4ae6c 100644 --- a/antarest/core/requests.py +++ b/antarest/core/requests.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/roles.py b/antarest/core/roles.py index 232b5fa524..3d018c18f5 100644 --- a/antarest/core/roles.py +++ b/antarest/core/roles.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/serialization/__init__.py b/antarest/core/serialization/__init__.py index a8616e3eae..5591290ce8 100644 --- a/antarest/core/serialization/__init__.py +++ b/antarest/core/serialization/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/swagger.py b/antarest/core/swagger.py index 047f6c4809..6856b5d2fa 100644 --- a/antarest/core/swagger.py +++ b/antarest/core/swagger.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/__init__.py b/antarest/core/tasks/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/core/tasks/__init__.py +++ b/antarest/core/tasks/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/main.py b/antarest/core/tasks/main.py index 74685ba836..92b0929413 100644 --- a/antarest/core/tasks/main.py +++ b/antarest/core/tasks/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/model.py b/antarest/core/tasks/model.py index a533b73baf..ce4ab5631a 100644 --- a/antarest/core/tasks/model.py +++ b/antarest/core/tasks/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/repository.py b/antarest/core/tasks/repository.py index 74c9e84b78..87572bb570 100644 --- a/antarest/core/tasks/repository.py +++ b/antarest/core/tasks/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/service.py b/antarest/core/tasks/service.py index b5a40ff84d..4ada902c58 100644 --- a/antarest/core/tasks/service.py +++ b/antarest/core/tasks/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/tasks/web.py b/antarest/core/tasks/web.py index 19c7e8440e..2638347417 100644 --- a/antarest/core/tasks/web.py +++ b/antarest/core/tasks/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/utils/__init__.py b/antarest/core/utils/__init__.py index d1e93fb6a8..9da1a4758a 100644 --- a/antarest/core/utils/__init__.py +++ b/antarest/core/utils/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/utils/archives.py b/antarest/core/utils/archives.py index d12082a835..f1c734c83c 100644 --- a/antarest/core/utils/archives.py +++ b/antarest/core/utils/archives.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/utils/string.py b/antarest/core/utils/string.py index ab45405753..25139ad315 100644 --- a/antarest/core/utils/string.py +++ b/antarest/core/utils/string.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/utils/utils.py b/antarest/core/utils/utils.py index 0abe2a6fb4..90e920e815 100644 --- a/antarest/core/utils/utils.py +++ b/antarest/core/utils/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/utils/web.py b/antarest/core/utils/web.py index aeae230ce9..4d9f53056e 100644 --- a/antarest/core/utils/web.py +++ b/antarest/core/utils/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/core/version_info.py b/antarest/core/version_info.py index ec20a767c9..0b7f312b5b 100644 --- a/antarest/core/version_info.py +++ b/antarest/core/version_info.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/dbmodel.py b/antarest/dbmodel.py index 738134dadd..f2bcb418be 100644 --- a/antarest/dbmodel.py +++ b/antarest/dbmodel.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/desktop/__init__.py b/antarest/desktop/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/desktop/__init__.py +++ b/antarest/desktop/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/desktop/systray_app.py b/antarest/desktop/systray_app.py index 9d53ebb185..65f35777b0 100644 --- a/antarest/desktop/systray_app.py +++ b/antarest/desktop/systray_app.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/__init__.py b/antarest/eventbus/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/eventbus/__init__.py +++ b/antarest/eventbus/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/business/__init__.py b/antarest/eventbus/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/eventbus/business/__init__.py +++ b/antarest/eventbus/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/business/interfaces.py b/antarest/eventbus/business/interfaces.py index 63a90b7ee5..add916410f 100644 --- a/antarest/eventbus/business/interfaces.py +++ b/antarest/eventbus/business/interfaces.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/business/local_eventbus.py b/antarest/eventbus/business/local_eventbus.py index 774278d5e4..34b6a00a13 100644 --- a/antarest/eventbus/business/local_eventbus.py +++ b/antarest/eventbus/business/local_eventbus.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/business/redis_eventbus.py b/antarest/eventbus/business/redis_eventbus.py index db89c7bc68..161a15cc82 100644 --- a/antarest/eventbus/business/redis_eventbus.py +++ b/antarest/eventbus/business/redis_eventbus.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/main.py b/antarest/eventbus/main.py index 6ccf56e644..e1268dc374 100644 --- a/antarest/eventbus/main.py +++ b/antarest/eventbus/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/service.py b/antarest/eventbus/service.py index 63b519e954..f414712743 100644 --- a/antarest/eventbus/service.py +++ b/antarest/eventbus/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/eventbus/web.py b/antarest/eventbus/web.py index d2d9405235..53ea96964a 100644 --- a/antarest/eventbus/web.py +++ b/antarest/eventbus/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/front.py b/antarest/front.py index 33314eb3f4..98f5ab83d8 100644 --- a/antarest/front.py +++ b/antarest/front.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/gui.py b/antarest/gui.py index 86ddd5efd1..1f79e06443 100644 --- a/antarest/gui.py +++ b/antarest/gui.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/__init__.py b/antarest/launcher/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/__init__.py +++ b/antarest/launcher/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/__init__.py b/antarest/launcher/adapters/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/adapters/__init__.py +++ b/antarest/launcher/adapters/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/abstractlauncher.py b/antarest/launcher/adapters/abstractlauncher.py index c25797eb66..599667695b 100644 --- a/antarest/launcher/adapters/abstractlauncher.py +++ b/antarest/launcher/adapters/abstractlauncher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/factory_launcher.py b/antarest/launcher/adapters/factory_launcher.py index a7b3fcfdd2..cc24af3d2b 100644 --- a/antarest/launcher/adapters/factory_launcher.py +++ b/antarest/launcher/adapters/factory_launcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/local_launcher/__init__.py b/antarest/launcher/adapters/local_launcher/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/adapters/local_launcher/__init__.py +++ b/antarest/launcher/adapters/local_launcher/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/local_launcher/local_launcher.py b/antarest/launcher/adapters/local_launcher/local_launcher.py index 3c96f44931..e8400ffaa9 100644 --- a/antarest/launcher/adapters/local_launcher/local_launcher.py +++ b/antarest/launcher/adapters/local_launcher/local_launcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/log_manager.py b/antarest/launcher/adapters/log_manager.py index f85810f1ae..c4aeec907b 100644 --- a/antarest/launcher/adapters/log_manager.py +++ b/antarest/launcher/adapters/log_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/log_parser.py b/antarest/launcher/adapters/log_parser.py index 16cadd74ea..0583340917 100644 --- a/antarest/launcher/adapters/log_parser.py +++ b/antarest/launcher/adapters/log_parser.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/slurm_launcher/__init__.py b/antarest/launcher/adapters/slurm_launcher/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/adapters/slurm_launcher/__init__.py +++ b/antarest/launcher/adapters/slurm_launcher/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/adapters/slurm_launcher/slurm_launcher.py b/antarest/launcher/adapters/slurm_launcher/slurm_launcher.py index 810581e561..79e8b94fb9 100644 --- a/antarest/launcher/adapters/slurm_launcher/slurm_launcher.py +++ b/antarest/launcher/adapters/slurm_launcher/slurm_launcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/extensions/__init__.py b/antarest/launcher/extensions/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/extensions/__init__.py +++ b/antarest/launcher/extensions/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/extensions/adequacy_patch/__init__.py b/antarest/launcher/extensions/adequacy_patch/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/launcher/extensions/adequacy_patch/__init__.py +++ b/antarest/launcher/extensions/adequacy_patch/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/extensions/adequacy_patch/extension.py b/antarest/launcher/extensions/adequacy_patch/extension.py index 093a91d17b..335677c5de 100644 --- a/antarest/launcher/extensions/adequacy_patch/extension.py +++ b/antarest/launcher/extensions/adequacy_patch/extension.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/extensions/interface.py b/antarest/launcher/extensions/interface.py index c7a3b3c39a..b2616451de 100644 --- a/antarest/launcher/extensions/interface.py +++ b/antarest/launcher/extensions/interface.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/main.py b/antarest/launcher/main.py index 1916b9607b..7f794b9a9c 100644 --- a/antarest/launcher/main.py +++ b/antarest/launcher/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/model.py b/antarest/launcher/model.py index 934b2b5753..df5c9cb903 100644 --- a/antarest/launcher/model.py +++ b/antarest/launcher/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/repository.py b/antarest/launcher/repository.py index 21126aac1d..d87d11e858 100644 --- a/antarest/launcher/repository.py +++ b/antarest/launcher/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/service.py b/antarest/launcher/service.py index c919321a39..f30e41faa7 100644 --- a/antarest/launcher/service.py +++ b/antarest/launcher/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/ssh_client.py b/antarest/launcher/ssh_client.py index 175c8a739b..e82a90ceef 100644 --- a/antarest/launcher/ssh_client.py +++ b/antarest/launcher/ssh_client.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/ssh_config.py b/antarest/launcher/ssh_config.py index 7d4524d04d..fd0bf42e9b 100644 --- a/antarest/launcher/ssh_config.py +++ b/antarest/launcher/ssh_config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/launcher/web.py b/antarest/launcher/web.py index c07261384a..55deb68365 100644 --- a/antarest/launcher/web.py +++ b/antarest/launcher/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/__init__.py b/antarest/login/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/login/__init__.py +++ b/antarest/login/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/auth.py b/antarest/login/auth.py index e0227a51f5..01a38cfc09 100644 --- a/antarest/login/auth.py +++ b/antarest/login/auth.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/ldap.py b/antarest/login/ldap.py index 1635efe09d..91f0b12ad9 100644 --- a/antarest/login/ldap.py +++ b/antarest/login/ldap.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/main.py b/antarest/login/main.py index ac6b2956c9..34de1ffbc5 100644 --- a/antarest/login/main.py +++ b/antarest/login/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/model.py b/antarest/login/model.py index 18cc137d76..cfa7a7a015 100644 --- a/antarest/login/model.py +++ b/antarest/login/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/repository.py b/antarest/login/repository.py index d37c75a30d..dbf8cccb57 100644 --- a/antarest/login/repository.py +++ b/antarest/login/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/service.py b/antarest/login/service.py index fef02af68f..d535171a5e 100644 --- a/antarest/login/service.py +++ b/antarest/login/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/utils.py b/antarest/login/utils.py index 85ded68f50..459a1ff2ae 100644 --- a/antarest/login/utils.py +++ b/antarest/login/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/login/web.py b/antarest/login/web.py index 6f3968d6a9..3c0dd9be2d 100644 --- a/antarest/login/web.py +++ b/antarest/login/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/main.py b/antarest/main.py index eabb7bd5c4..3d2bf6ed83 100644 --- a/antarest/main.py +++ b/antarest/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/__init__.py b/antarest/matrixstore/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/matrixstore/__init__.py +++ b/antarest/matrixstore/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/exceptions.py b/antarest/matrixstore/exceptions.py index 9f9051ca4d..31abb679ed 100644 --- a/antarest/matrixstore/exceptions.py +++ b/antarest/matrixstore/exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/main.py b/antarest/matrixstore/main.py index d8eaf0390a..4987e8f8a0 100644 --- a/antarest/matrixstore/main.py +++ b/antarest/matrixstore/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/matrix_editor.py b/antarest/matrixstore/matrix_editor.py index 33bf780cab..a8850e1c41 100644 --- a/antarest/matrixstore/matrix_editor.py +++ b/antarest/matrixstore/matrix_editor.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/matrix_garbage_collector.py b/antarest/matrixstore/matrix_garbage_collector.py index 3d7e513b94..f363c4649b 100644 --- a/antarest/matrixstore/matrix_garbage_collector.py +++ b/antarest/matrixstore/matrix_garbage_collector.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/model.py b/antarest/matrixstore/model.py index a46dad9455..b117e12e1f 100644 --- a/antarest/matrixstore/model.py +++ b/antarest/matrixstore/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/repository.py b/antarest/matrixstore/repository.py index a6d5733d66..4b8aa7840e 100644 --- a/antarest/matrixstore/repository.py +++ b/antarest/matrixstore/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/service.py b/antarest/matrixstore/service.py index 055fbca413..ca69f40fa2 100644 --- a/antarest/matrixstore/service.py +++ b/antarest/matrixstore/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/uri_resolver_service.py b/antarest/matrixstore/uri_resolver_service.py index 87dfdc89c4..542df1a49b 100644 --- a/antarest/matrixstore/uri_resolver_service.py +++ b/antarest/matrixstore/uri_resolver_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/matrixstore/web.py b/antarest/matrixstore/web.py index e50fddfbab..86bf23a17b 100644 --- a/antarest/matrixstore/web.py +++ b/antarest/matrixstore/web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/service_creator.py b/antarest/service_creator.py index b133d29b9c..a9b0351671 100644 --- a/antarest/service_creator.py +++ b/antarest/service_creator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/singleton_services.py b/antarest/singleton_services.py index 99fd44b23c..5437a570f8 100644 --- a/antarest/singleton_services.py +++ b/antarest/singleton_services.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/__init__.py b/antarest/study/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/__init__.py +++ b/antarest/study/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/__init__.py b/antarest/study/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/business/__init__.py +++ b/antarest/study/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/adequacy_patch_management.py b/antarest/study/business/adequacy_patch_management.py index 09ad034aed..3b309e0b01 100644 --- a/antarest/study/business/adequacy_patch_management.py +++ b/antarest/study/business/adequacy_patch_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/advanced_parameters_management.py b/antarest/study/business/advanced_parameters_management.py index 02e0da1134..31a8d880e5 100644 --- a/antarest/study/business/advanced_parameters_management.py +++ b/antarest/study/business/advanced_parameters_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/aggregator_management.py b/antarest/study/business/aggregator_management.py index da2bdf846f..6ee055bf2f 100644 --- a/antarest/study/business/aggregator_management.py +++ b/antarest/study/business/aggregator_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/all_optional_meta.py b/antarest/study/business/all_optional_meta.py index 7a8440226b..5d271f0772 100644 --- a/antarest/study/business/all_optional_meta.py +++ b/antarest/study/business/all_optional_meta.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/allocation_management.py b/antarest/study/business/allocation_management.py index eb18ae9bd2..eafec7f479 100644 --- a/antarest/study/business/allocation_management.py +++ b/antarest/study/business/allocation_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/area_management.py b/antarest/study/business/area_management.py index 5220b0e8e1..c607be980d 100644 --- a/antarest/study/business/area_management.py +++ b/antarest/study/business/area_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/__init__.py b/antarest/study/business/areas/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/business/areas/__init__.py +++ b/antarest/study/business/areas/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/hydro_management.py b/antarest/study/business/areas/hydro_management.py index cba5ec626c..396d2f785c 100644 --- a/antarest/study/business/areas/hydro_management.py +++ b/antarest/study/business/areas/hydro_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/properties_management.py b/antarest/study/business/areas/properties_management.py index df5ab24663..151ff178c3 100644 --- a/antarest/study/business/areas/properties_management.py +++ b/antarest/study/business/areas/properties_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/renewable_management.py b/antarest/study/business/areas/renewable_management.py index 2063750ca3..e82a13f3db 100644 --- a/antarest/study/business/areas/renewable_management.py +++ b/antarest/study/business/areas/renewable_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/st_storage_management.py b/antarest/study/business/areas/st_storage_management.py index 962ce5d7f1..ef89e345d8 100644 --- a/antarest/study/business/areas/st_storage_management.py +++ b/antarest/study/business/areas/st_storage_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/areas/thermal_management.py b/antarest/study/business/areas/thermal_management.py index 13380b54b3..90c2420881 100644 --- a/antarest/study/business/areas/thermal_management.py +++ b/antarest/study/business/areas/thermal_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index 7c4175ff53..1fb5d48a0d 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/config_management.py b/antarest/study/business/config_management.py index 19fdb4acc0..872336cabd 100644 --- a/antarest/study/business/config_management.py +++ b/antarest/study/business/config_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/correlation_management.py b/antarest/study/business/correlation_management.py index 2b1a5b9430..6aab755ab8 100644 --- a/antarest/study/business/correlation_management.py +++ b/antarest/study/business/correlation_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/district_manager.py b/antarest/study/business/district_manager.py index 2cfec172d8..2479760866 100644 --- a/antarest/study/business/district_manager.py +++ b/antarest/study/business/district_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/enum_ignore_case.py b/antarest/study/business/enum_ignore_case.py index 56a06fabc1..a4f3dd572a 100644 --- a/antarest/study/business/enum_ignore_case.py +++ b/antarest/study/business/enum_ignore_case.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/general_management.py b/antarest/study/business/general_management.py index e4b3730d53..7270c63dc2 100644 --- a/antarest/study/business/general_management.py +++ b/antarest/study/business/general_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 7c6a971fde..a1a9cb3916 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/matrix_management.py b/antarest/study/business/matrix_management.py index a80034b603..bc61aaa098 100644 --- a/antarest/study/business/matrix_management.py +++ b/antarest/study/business/matrix_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/model/__init__.py b/antarest/study/business/model/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/business/model/__init__.py +++ b/antarest/study/business/model/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/model/link_model.py b/antarest/study/business/model/link_model.py index f8c8e32ffd..9d6f50e1f5 100644 --- a/antarest/study/business/model/link_model.py +++ b/antarest/study/business/model/link_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/optimization_management.py b/antarest/study/business/optimization_management.py index 8156202f85..bbfa50c767 100644 --- a/antarest/study/business/optimization_management.py +++ b/antarest/study/business/optimization_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/playlist_management.py b/antarest/study/business/playlist_management.py index da70e87fa7..4b3de8c010 100644 --- a/antarest/study/business/playlist_management.py +++ b/antarest/study/business/playlist_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/scenario_builder_management.py b/antarest/study/business/scenario_builder_management.py index 71a7833cee..0ea15dd6d8 100644 --- a/antarest/study/business/scenario_builder_management.py +++ b/antarest/study/business/scenario_builder_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index c7d570163a..efaeeae5c7 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/thematic_trimming_field_infos.py b/antarest/study/business/thematic_trimming_field_infos.py index 9b2e0b06be..2f5c902244 100644 --- a/antarest/study/business/thematic_trimming_field_infos.py +++ b/antarest/study/business/thematic_trimming_field_infos.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/thematic_trimming_management.py b/antarest/study/business/thematic_trimming_management.py index d1db21c0e5..7aef93aedf 100644 --- a/antarest/study/business/thematic_trimming_management.py +++ b/antarest/study/business/thematic_trimming_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/timeseries_config_management.py b/antarest/study/business/timeseries_config_management.py index 226fc75bfb..83cae88554 100644 --- a/antarest/study/business/timeseries_config_management.py +++ b/antarest/study/business/timeseries_config_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/utils.py b/antarest/study/business/utils.py index 03b320c0c6..628dd4a0c4 100644 --- a/antarest/study/business/utils.py +++ b/antarest/study/business/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/business/xpansion_management.py b/antarest/study/business/xpansion_management.py index 3f19e7c8f3..7464de5ec5 100644 --- a/antarest/study/business/xpansion_management.py +++ b/antarest/study/business/xpansion_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/common/__init__.py b/antarest/study/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/common/__init__.py +++ b/antarest/study/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/common/studystorage.py b/antarest/study/common/studystorage.py index cedb352051..221857c339 100644 --- a/antarest/study/common/studystorage.py +++ b/antarest/study/common/studystorage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/css4_colors.py b/antarest/study/css4_colors.py index acac63cdde..11c77f72bf 100644 --- a/antarest/study/css4_colors.py +++ b/antarest/study/css4_colors.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/main.py b/antarest/study/main.py index 1efa9cb00b..b7ddb9715e 100644 --- a/antarest/study/main.py +++ b/antarest/study/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/model.py b/antarest/study/model.py index 9aed7c852a..cc8792ee99 100644 --- a/antarest/study/model.py +++ b/antarest/study/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/repository.py b/antarest/study/repository.py index 6ecad45df7..a904124d4d 100644 --- a/antarest/study/repository.py +++ b/antarest/study/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/service.py b/antarest/study/service.py index c7ab71b63b..e0e1e1a9c2 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/__init__.py b/antarest/study/storage/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/__init__.py +++ b/antarest/study/storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/abstract_storage_service.py b/antarest/study/storage/abstract_storage_service.py index f845eab757..69d9ba6a27 100644 --- a/antarest/study/storage/abstract_storage_service.py +++ b/antarest/study/storage/abstract_storage_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/auto_archive_service.py b/antarest/study/storage/auto_archive_service.py index 5efd2dda1c..aed3ff1027 100644 --- a/antarest/study/storage/auto_archive_service.py +++ b/antarest/study/storage/auto_archive_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/df_download.py b/antarest/study/storage/df_download.py index f1c4b80a3f..acb9471802 100644 --- a/antarest/study/storage/df_download.py +++ b/antarest/study/storage/df_download.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/explorer_service.py b/antarest/study/storage/explorer_service.py index c34d679d30..30ff6ffcb6 100644 --- a/antarest/study/storage/explorer_service.py +++ b/antarest/study/storage/explorer_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/matrix_profile.py b/antarest/study/storage/matrix_profile.py index a6ddf98679..c18808c8b3 100644 --- a/antarest/study/storage/matrix_profile.py +++ b/antarest/study/storage/matrix_profile.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/patch_service.py b/antarest/study/storage/patch_service.py index 1c44e1ddc9..f98870e240 100644 --- a/antarest/study/storage/patch_service.py +++ b/antarest/study/storage/patch_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/__init__.py b/antarest/study/storage/rawstudy/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/__init__.py +++ b/antarest/study/storage/rawstudy/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/ini_reader.py b/antarest/study/storage/rawstudy/ini_reader.py index e51d9c9672..e003878e7c 100644 --- a/antarest/study/storage/rawstudy/ini_reader.py +++ b/antarest/study/storage/rawstudy/ini_reader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/ini_writer.py b/antarest/study/storage/rawstudy/ini_writer.py index d4ba73cf5d..9ff81c213e 100644 --- a/antarest/study/storage/rawstudy/ini_writer.py +++ b/antarest/study/storage/rawstudy/ini_writer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/__init__.py b/antarest/study/storage/rawstudy/model/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/__init__.py +++ b/antarest/study/storage/rawstudy/model/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/bucket_node.py b/antarest/study/storage/rawstudy/model/filesystem/bucket_node.py index 3def015763..a058721d4d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/bucket_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/bucket_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/common/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/common/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/common/area_matrix_list.py b/antarest/study/storage/rawstudy/model/filesystem/common/area_matrix_list.py index e4022a3600..0edb3de396 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/common/area_matrix_list.py +++ b/antarest/study/storage/rawstudy/model/filesystem/common/area_matrix_list.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/common/prepro.py b/antarest/study/storage/rawstudy/model/filesystem/common/prepro.py index b18d53b81d..4cb5d533b4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/common/prepro.py +++ b/antarest/study/storage/rawstudy/model/filesystem/common/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/config/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/area.py b/antarest/study/storage/rawstudy/model/filesystem/config/area.py index db83868816..c91b42a00d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py b/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py index f902e66305..ebf18da753 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/binding_constraint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py index f2a6349d90..f26f2b45e4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/exceptions.py b/antarest/study/storage/rawstudy/model/filesystem/config/exceptions.py index 3a903d9cf4..91c4dfef12 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/exceptions.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py index f6a371769b..5089150c71 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/files.py b/antarest/study/storage/rawstudy/model/filesystem/config/files.py index 8f23fecd25..52458c9970 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/files.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/files.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py b/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py index 72800c6a1a..e25c5ab9fb 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py b/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py index abbf6fb77b..05451c6870 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/ini_properties.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/model.py b/antarest/study/storage/rawstudy/model/filesystem/config/model.py index 160609bc80..388bfaeb5d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/model.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py index 3c5cdcc57e..6b8087b3fd 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/ruleset_matrices.py b/antarest/study/storage/rawstudy/model/filesystem/config/ruleset_matrices.py index ca9ff2e724..47a7568142 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/ruleset_matrices.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/ruleset_matrices.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py index 426e263baa..0d21455783 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py index 10750d604b..87f20514f4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/context.py b/antarest/study/storage/rawstudy/model/filesystem/context.py index 0bbb81b503..2d51ad1468 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/context.py +++ b/antarest/study/storage/rawstudy/model/filesystem/context.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/exceptions.py b/antarest/study/storage/rawstudy/model/filesystem/exceptions.py index 399847efc0..e87135e8ce 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/exceptions.py +++ b/antarest/study/storage/rawstudy/model/filesystem/exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/factory.py b/antarest/study/storage/rawstudy/model/filesystem/factory.py index 40b28e33d8..63bfdc5a31 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/factory.py +++ b/antarest/study/storage/rawstudy/model/filesystem/factory.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/folder_node.py b/antarest/study/storage/rawstudy/model/filesystem/folder_node.py index c8b3604e88..cfcebe9019 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/folder_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/folder_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/ini_file_node.py b/antarest/study/storage/rawstudy/model/filesystem/ini_file_node.py index dda7a2a6c0..960ccc83e4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/ini_file_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/ini_file_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/inode.py b/antarest/study/storage/rawstudy/model/filesystem/inode.py index d910234f03..089699d825 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/inode.py +++ b/antarest/study/storage/rawstudy/model/filesystem/inode.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/json_file_node.py b/antarest/study/storage/rawstudy/model/filesystem/json_file_node.py index ca877e9fd6..0ff675c650 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/json_file_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/json_file_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py b/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py index d442d9d732..2a9204d71e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/constants.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/constants.py index ad1300bac7..7c760b490c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/constants.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/constants.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py index ef856c5f91..7a0e1fe289 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/date_serializer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/head_writer.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/head_writer.py index 7c8d2fd588..0653197aa9 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/head_writer.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/head_writer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py index e23cb9842a..6ead440945 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py index 12f90519b7..5d720340b2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/output_series_matrix.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/output_series_matrix.py index c3b66d1245..c4fb19b6a4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/output_series_matrix.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/output_series_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/raw_file_node.py b/antarest/study/storage/rawstudy/model/filesystem/raw_file_node.py index 7752e93e0c..e5d9e9bed5 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/raw_file_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/raw_file_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/desktop.py b/antarest/study/storage/rawstudy/model/filesystem/root/desktop.py index 20cc1b19c1..04209fcaa8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/desktop.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/desktop.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/filestudytree.py b/antarest/study/storage/rawstudy/model/filesystem/root/filestudytree.py index 592b0309fc..ed4ac115d7 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/filestudytree.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/filestudytree.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/areas.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/areas.py index c9dd2b4e41..7ce396e9da 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/areas.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/areas.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/adequacy_patch.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/adequacy_patch.py index b371e886a7..1cc6fcc5f1 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/adequacy_patch.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/adequacy_patch.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/item.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/item.py index 822e3f80a3..80d170e5e8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/item.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/item.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/optimization.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/optimization.py index 53e83b6ed2..6cc4bef64a 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/optimization.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/optimization.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/ui.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/ui.py index 82da8ebf64..260a1fd7f2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/ui.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/item/ui.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/list.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/list.py index cdc26f097e..2b873991c1 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/list.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/list.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/sets.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/sets.py index ad327b4eeb..0f9adda270 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/sets.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/areas/sets.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingconstraints_ini.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingconstraints_ini.py index 05ce00cedf..49cfd81847 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingconstraints_ini.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingconstraints_ini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingcontraints.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingcontraints.py index fedaa47d54..d557ebd5b8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingcontraints.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/bindingconstraints/bindingcontraints.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/prepro_series.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/prepro_series.py index 74c99bf04b..fde5dacf08 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/prepro_series.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/commons/prepro_series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/allocation.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/allocation.py index afa09c4c0e..af890b7de4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/allocation.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/allocation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/area.py index b3b89b8498..fac71885a2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/allocation/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/capacity.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/capacity.py index 33a6e999e7..ca45887ac8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/capacity.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/capacity/capacity.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/common.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/common.py index d89d80014a..7b1a342eb4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/common.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/common/common.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro.py index f5e021ce61..e22f83681b 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py index d211875726..02b5c7d62c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/hydro_ini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/area.py index bdd8ac80db..c3c47fc134 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/prepro.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/prepro.py index 560fb4cfee..76ea568140 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/prepro.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/area/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/prepro.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/prepro.py index ba884200d5..bf31c45b74 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/prepro.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/prepro/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/area.py index 4c6ada156a..7adbc438f9 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/series.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/series.py index bb22eab408..510cef5c9c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/series.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/hydro/series/series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py index 429831b818..3a0895e03f 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/input.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/area.py index 1eefe1d53c..f89d51cf9e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/capacities.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/capacities.py index aabc88f5f4..2b908dd3ff 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/capacities.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/capacities/capacities.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/properties.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/properties.py index 74992f5dd0..7631b0bca7 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/properties.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/area/properties.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/link.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/link.py index d94faabe71..4de3fbb6c4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/link/link.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/link/link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/miscgen.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/miscgen.py index 213c9b9632..6d03968e6d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/miscgen.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/miscgen/miscgen.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/clusters.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/clusters.py index 5f82229251..8db26ea89e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/clusters.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/clusters.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/renewable.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/renewable.py index aa6e9bd94b..6d38ad62a7 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/renewable.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/renewable.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/series.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/series.py index 91aa09642d..7c42659b02 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/series.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/renewables/series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/reserves.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/reserves.py index 7b9b89c982..9a31a0efb4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/reserves.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/reserves/reserves.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/area.py index 375a8d64fa..2bcfe147e2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/list.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/list.py index 05bb39ff0f..effd35ff88 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/list.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/area/list.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/clusters.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/clusters.py index 3723410414..15bd2fab7e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/clusters.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/clusters/clusters.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/area.py index 3acba900a1..d79b42a05a 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/st_storage.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/st_storage.py index c2a2a4a19a..1ecb643ed4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/st_storage.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/area/st_storage/st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/series.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/series.py index 3c071bfcd8..e6cb6126e2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/series.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/series/series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/st_storage.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/st_storage.py index 4ce2fcbe9c..69481773e1 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/st_storage.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/st_storage/st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/areas_ini.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/areas_ini.py index 89747be06c..e42e3bb427 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/areas_ini.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/areas_ini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/area.py index e97c5d07ae..8f29e0d5b4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/list.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/list.py index 4b4389fdfd..adacbb8ffc 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/list.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/area/list.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/cluster.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/cluster.py index 77ec2e705f..7ca40fd5f8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/cluster.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/cluster/cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py index b56dea4693..b3c3443dee 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/thermal.py index dc57ee3c4a..89830b67af 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/thermal/thermal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/prepro.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/prepro.py index bf75f6ad07..448f09718d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/prepro.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/area.py index c87e73a108..c4bae19d0d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py index b18dde23a7..c39b7519b5 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/area/thermal/thermal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/series.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/series.py index fc639c99d9..1617fd33d8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/series.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/series/series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/thermal.py index dcdcd5dc70..62df6ec130 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/thermal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/layers/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/layers/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/layers/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/layers/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/layers/layer_ini.py b/antarest/study/storage/rawstudy/model/filesystem/root/layers/layer_ini.py index 4755015f11..c44135188e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/layers/layer_ini.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/layers/layer_ini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/layers/layers.py b/antarest/study/storage/rawstudy/model/filesystem/root/layers/layers.py index 9f40e3fc6d..585d8a1d0d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/layers/layers.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/layers/layers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/output.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/output.py index 5a451d5cf3..cdeb6d5b28 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/output.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/output.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/about.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/about.py index 35cffab3db..cafcb15ddb 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/about.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/about.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/study.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/study.py index f0324b00fd..773a5f1c3d 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/study.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/about/study.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/info_antares_output.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/info_antares_output.py index 14e834ae0b..8342f16b1b 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/info_antares_output.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/info_antares_output.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py index 398ec9bf4e..9087ed52f3 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/areas.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/areas.py index 4c1a14cdff..f84a718e9c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/areas.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/areas.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/binding_const.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/binding_const.py index e956da727b..b2f14a637b 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/binding_const.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/binding_const.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/link.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/link.py index 81922bc9c9..6e6adf2212 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/link.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/links.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/links.py index b7d4ad1d70..30f06e449c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/links.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/links.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/set.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/set.py index 11076e977c..99260aa7bb 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/set.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/set.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/utils.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/utils.py index d5d6b6495c..a1dd68594e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/utils.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/common/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/economy.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/economy.py index c39642589e..1f45a5d1f4 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/economy.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/economy.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/grid.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/grid.py index 374b4fc6a1..ae6365f3f1 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/grid.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcall/grid.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/mcind.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/mcind.py index ea1c5d2c58..9378ae0c5f 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/mcind.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/mode/mcind/mcind.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/simulation.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/simulation.py index 12ecb930d9..7e20a2caff 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/simulation.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/simulation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/ts_generator.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/ts_generator.py index b99307d01d..79e22dbb4c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/ts_generator.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_generator/ts_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers.py index 4c84635f4a..f9a2eba1cc 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers_data.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers_data.py index 45512a2af2..0a85147844 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers_data.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/ts_numbers/ts_numbers_data.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/lp.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/lp.py index da7c468535..db0429cc16 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/lp.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/lp.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/sensitivity.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/sensitivity.py index 8383dbbcad..cb8446da23 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/sensitivity.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/sensitivity.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/xpansion.py b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/xpansion.py index 2815bac089..cd36bffa16 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/xpansion.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/output/simulation/xpansion/xpansion.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/generaldata.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/generaldata.py index 27ece887bf..b3abcfba0e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/generaldata.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/generaldata.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/resources.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/resources.py index 4ff236f7be..3b90d28304 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/resources.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/resources/resources.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/scenariobuilder.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/scenariobuilder.py index f1960d9984..d384433216 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/scenariobuilder.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/scenariobuilder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/settings.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/settings.py index f63b7cb69d..33ef9ee65c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/settings.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/settings.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/simulations.py b/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/simulations.py index 64e074623e..88d86481fd 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/simulations.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/settings/simulations/simulations.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/study_antares.py b/antarest/study/storage/rawstudy/model/filesystem/root/study_antares.py index 34d83ee943..fd7da87b0e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/study_antares.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/study_antares.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/__init__.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/__init__.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/candidates.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/candidates.py index 80e90ca258..3e7ef0176f 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/candidates.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/candidates.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/constraint_resources.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/constraint_resources.py index fdcde63d7d..214d179901 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/constraint_resources.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/constraint_resources.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/expansion.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/expansion.py index 14a7a0d653..a6738beea8 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/expansion.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/expansion.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/matrix_resources.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/matrix_resources.py index a61ca899b6..0c6af18d17 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/matrix_resources.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/matrix_resources.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/sensitivity.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/sensitivity.py index 2a2ea7c9c3..f13dd4e3aa 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/sensitivity.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/sensitivity.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/settings.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/settings.py index 45e568d8f6..c162da1029 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/settings.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/expansion/settings.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/user/user.py b/antarest/study/storage/rawstudy/model/filesystem/root/user/user.py index 5cf92d089b..8b6b47825b 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/user/user.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/user/user.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/model/helpers.py b/antarest/study/storage/rawstudy/model/helpers.py index a8eae4e7b6..ccd6b20c82 100644 --- a/antarest/study/storage/rawstudy/model/helpers.py +++ b/antarest/study/storage/rawstudy/model/helpers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/raw_study_service.py b/antarest/study/storage/rawstudy/raw_study_service.py index 11572d6710..4d2a027965 100644 --- a/antarest/study/storage/rawstudy/raw_study_service.py +++ b/antarest/study/storage/rawstudy/raw_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/rawstudy/watcher.py b/antarest/study/storage/rawstudy/watcher.py index d0007ea757..40a08f47a4 100644 --- a/antarest/study/storage/rawstudy/watcher.py +++ b/antarest/study/storage/rawstudy/watcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/storage_service.py b/antarest/study/storage/storage_service.py index 51f7555d7f..31a5386e63 100644 --- a/antarest/study/storage/storage_service.py +++ b/antarest/study/storage/storage_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/study_download_utils.py b/antarest/study/storage/study_download_utils.py index f46b23e254..3048466a7d 100644 --- a/antarest/study/storage/study_download_utils.py +++ b/antarest/study/storage/study_download_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/study_upgrader/__init__.py b/antarest/study/storage/study_upgrader/__init__.py index e854e7d013..c3180bb5be 100644 --- a/antarest/study/storage/study_upgrader/__init__.py +++ b/antarest/study/storage/study_upgrader/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/utils.py b/antarest/study/storage/utils.py index 5ed97a19d5..639f9a6495 100644 --- a/antarest/study/storage/utils.py +++ b/antarest/study/storage/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/__init__.py b/antarest/study/storage/variantstudy/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/variantstudy/__init__.py +++ b/antarest/study/storage/variantstudy/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/__init__.py b/antarest/study/storage/variantstudy/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/variantstudy/business/__init__.py +++ b/antarest/study/storage/variantstudy/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/command_extractor.py b/antarest/study/storage/variantstudy/business/command_extractor.py index 851f3eb431..95b51fe9ea 100644 --- a/antarest/study/storage/variantstudy/business/command_extractor.py +++ b/antarest/study/storage/variantstudy/business/command_extractor.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index 7b585f46b5..d5971dd69e 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/__init__.py index ae0af113f7..3b4bc42056 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/__init__.py index 580794d32a..470a9cc063 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_after_v87.py b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_after_v87.py index 81c830f7d1..97ba0549a6 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_after_v87.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_after_v87.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_before_v87.py b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_before_v87.py index 063eb069c8..4dd4078d0b 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_before_v87.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/binding_constraint/series_before_v87.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/common.py b/antarest/study/storage/variantstudy/business/matrix_constants/common.py index 4507a48ce7..42ca14a9b8 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/common.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/common.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/__init__.py index 36ac538608..608a308295 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v6.py b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v6.py index a2415c6f7e..47da8f2f68 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v6.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v6.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v7.py b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v7.py index 0de0936333..9045b6d4cc 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v7.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/hydro/v7.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/link/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/link/__init__.py index c517f46722..cb756f7274 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/link/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/link/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/link/v7.py b/antarest/study/storage/variantstudy/business/matrix_constants/link/v7.py index 4340537f99..29fad22514 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/link/v7.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/link/v7.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/link/v8.py b/antarest/study/storage/variantstudy/business/matrix_constants/link/v8.py index 839a703ef2..c87cf4116a 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/link/v8.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/link/v8.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/prepro.py b/antarest/study/storage/variantstudy/business/matrix_constants/prepro.py index 2a04905c67..cb22f0872f 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/prepro.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/__init__.py index f6c48f1942..8998175b7d 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/series.py b/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/series.py index 5efba8eece..cbbce5e727 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/series.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/st_storage/series.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/thermals/__init__.py b/antarest/study/storage/variantstudy/business/matrix_constants/thermals/__init__.py index 1b665aa933..c4a504b5e7 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/thermals/__init__.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/thermals/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants/thermals/prepro.py b/antarest/study/storage/variantstudy/business/matrix_constants/thermals/prepro.py index d244f5e7b4..5c1e43dcbc 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants/thermals/prepro.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants/thermals/prepro.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/matrix_constants_generator.py b/antarest/study/storage/variantstudy/business/matrix_constants_generator.py index 98f098a07d..148e6e5df0 100644 --- a/antarest/study/storage/variantstudy/business/matrix_constants_generator.py +++ b/antarest/study/storage/variantstudy/business/matrix_constants_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/utils.py b/antarest/study/storage/variantstudy/business/utils.py index c470d9ac03..84fb848056 100644 --- a/antarest/study/storage/variantstudy/business/utils.py +++ b/antarest/study/storage/variantstudy/business/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/business/utils_binding_constraint.py b/antarest/study/storage/variantstudy/business/utils_binding_constraint.py index 328e43f0f6..399df46636 100644 --- a/antarest/study/storage/variantstudy/business/utils_binding_constraint.py +++ b/antarest/study/storage/variantstudy/business/utils_binding_constraint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 567567a263..9638141643 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/__init__.py b/antarest/study/storage/variantstudy/model/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/variantstudy/model/__init__.py +++ b/antarest/study/storage/variantstudy/model/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/__init__.py b/antarest/study/storage/variantstudy/model/command/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/variantstudy/model/command/__init__.py +++ b/antarest/study/storage/variantstudy/model/command/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index c2d604e55b..744c87d22c 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_area.py b/antarest/study/storage/variantstudy/model/command/create_area.py index 30cd0608a4..65c78399b9 100644 --- a/antarest/study/storage/variantstudy/model/command/create_area.py +++ b/antarest/study/storage/variantstudy/model/command/create_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index 2e3d26e9bd..b76f092086 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_cluster.py b/antarest/study/storage/variantstudy/model/command/create_cluster.py index 8364ab0857..c8f42fb60a 100644 --- a/antarest/study/storage/variantstudy/model/command/create_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_district.py b/antarest/study/storage/variantstudy/model/command/create_district.py index adde84a6ee..8edb484700 100644 --- a/antarest/study/storage/variantstudy/model/command/create_district.py +++ b/antarest/study/storage/variantstudy/model/command/create_district.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_link.py b/antarest/study/storage/variantstudy/model/command/create_link.py index 134491ce8c..1158c32a63 100644 --- a/antarest/study/storage/variantstudy/model/command/create_link.py +++ b/antarest/study/storage/variantstudy/model/command/create_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py index a278a1e5d6..2b4d93a085 100644 --- a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_st_storage.py b/antarest/study/storage/variantstudy/model/command/create_st_storage.py index e247b7215c..a3c16195ad 100644 --- a/antarest/study/storage/variantstudy/model/command/create_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/create_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/create_user_resource.py b/antarest/study/storage/variantstudy/model/command/create_user_resource.py index 0afb321e54..869b896f2b 100644 --- a/antarest/study/storage/variantstudy/model/command/create_user_resource.py +++ b/antarest/study/storage/variantstudy/model/command/create_user_resource.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py index 9f8631b608..b799940916 100644 --- a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py +++ b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/icommand.py b/antarest/study/storage/variantstudy/model/command/icommand.py index f3c998c67f..a12fd6cf2b 100644 --- a/antarest/study/storage/variantstudy/model/command/icommand.py +++ b/antarest/study/storage/variantstudy/model/command/icommand.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_area.py b/antarest/study/storage/variantstudy/model/command/remove_area.py index 4d7c33e922..ec4e491ead 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_area.py +++ b/antarest/study/storage/variantstudy/model/command/remove_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index 55dd971133..b05b51efc4 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_cluster.py index 5ff1bebcae..3fe682ead9 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_district.py b/antarest/study/storage/variantstudy/model/command/remove_district.py index 2b675aed3f..421d1deca3 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_district.py +++ b/antarest/study/storage/variantstudy/model/command/remove_district.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_link.py b/antarest/study/storage/variantstudy/model/command/remove_link.py index af5d3a5321..2f9b2fa7ef 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_link.py +++ b/antarest/study/storage/variantstudy/model/command/remove_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py index 5d82f1630d..5947889bbe 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py index 1e230cfdfa..a5a420a362 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/remove_user_resource.py b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py index f873ec2d10..7081163625 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_user_resource.py +++ b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/replace_matrix.py b/antarest/study/storage/variantstudy/model/command/replace_matrix.py index c796c47ce2..aaceb7c3f7 100644 --- a/antarest/study/storage/variantstudy/model/command/replace_matrix.py +++ b/antarest/study/storage/variantstudy/model/command/replace_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py index 6c247b4c05..35715ed293 100644 --- a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_comments.py b/antarest/study/storage/variantstudy/model/command/update_comments.py index b5300d171c..2288414463 100644 --- a/antarest/study/storage/variantstudy/model/command/update_comments.py +++ b/antarest/study/storage/variantstudy/model/command/update_comments.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_config.py b/antarest/study/storage/variantstudy/model/command/update_config.py index ef054383f0..e53ed7edfe 100644 --- a/antarest/study/storage/variantstudy/model/command/update_config.py +++ b/antarest/study/storage/variantstudy/model/command/update_config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_district.py b/antarest/study/storage/variantstudy/model/command/update_district.py index 5d0b706484..d6a65bd16b 100644 --- a/antarest/study/storage/variantstudy/model/command/update_district.py +++ b/antarest/study/storage/variantstudy/model/command/update_district.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_link.py b/antarest/study/storage/variantstudy/model/command/update_link.py index 16a13fa7e3..1aaa2d5327 100644 --- a/antarest/study/storage/variantstudy/model/command/update_link.py +++ b/antarest/study/storage/variantstudy/model/command/update_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_playlist.py b/antarest/study/storage/variantstudy/model/command/update_playlist.py index 3c19b9a2f4..39fcf3d1dd 100644 --- a/antarest/study/storage/variantstudy/model/command/update_playlist.py +++ b/antarest/study/storage/variantstudy/model/command/update_playlist.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_raw_file.py b/antarest/study/storage/variantstudy/model/command/update_raw_file.py index 97446dadcc..0e8efb2392 100644 --- a/antarest/study/storage/variantstudy/model/command/update_raw_file.py +++ b/antarest/study/storage/variantstudy/model/command/update_raw_file.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py index 4328bcf1fe..6ae373e238 100644 --- a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py +++ b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command_context.py b/antarest/study/storage/variantstudy/model/command_context.py index f4b9d6f6c7..9291e8bb6a 100644 --- a/antarest/study/storage/variantstudy/model/command_context.py +++ b/antarest/study/storage/variantstudy/model/command_context.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command_listener/__init__.py b/antarest/study/storage/variantstudy/model/command_listener/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/storage/variantstudy/model/command_listener/__init__.py +++ b/antarest/study/storage/variantstudy/model/command_listener/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/command_listener/command_listener.py b/antarest/study/storage/variantstudy/model/command_listener/command_listener.py index c2c4da8f4e..5942df722f 100644 --- a/antarest/study/storage/variantstudy/model/command_listener/command_listener.py +++ b/antarest/study/storage/variantstudy/model/command_listener/command_listener.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/dbmodel.py b/antarest/study/storage/variantstudy/model/dbmodel.py index b855a75cf9..d0d6435732 100644 --- a/antarest/study/storage/variantstudy/model/dbmodel.py +++ b/antarest/study/storage/variantstudy/model/dbmodel.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/interfaces.py b/antarest/study/storage/variantstudy/model/interfaces.py index cfe392a024..2eb84be257 100644 --- a/antarest/study/storage/variantstudy/model/interfaces.py +++ b/antarest/study/storage/variantstudy/model/interfaces.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/model/model.py b/antarest/study/storage/variantstudy/model/model.py index 0d0c308581..cb1866037f 100644 --- a/antarest/study/storage/variantstudy/model/model.py +++ b/antarest/study/storage/variantstudy/model/model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/repository.py b/antarest/study/storage/variantstudy/repository.py index a090b84c5a..9c9425630d 100644 --- a/antarest/study/storage/variantstudy/repository.py +++ b/antarest/study/storage/variantstudy/repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/snapshot_generator.py b/antarest/study/storage/variantstudy/snapshot_generator.py index afde1004eb..58d4d62b7b 100644 --- a/antarest/study/storage/variantstudy/snapshot_generator.py +++ b/antarest/study/storage/variantstudy/snapshot_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/variant_command_extractor.py b/antarest/study/storage/variantstudy/variant_command_extractor.py index 76df6653c4..7515e0147e 100644 --- a/antarest/study/storage/variantstudy/variant_command_extractor.py +++ b/antarest/study/storage/variantstudy/variant_command_extractor.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/variant_command_generator.py b/antarest/study/storage/variantstudy/variant_command_generator.py index 13e93a561f..42113ead14 100644 --- a/antarest/study/storage/variantstudy/variant_command_generator.py +++ b/antarest/study/storage/variantstudy/variant_command_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index 170eeadedb..fc9d447ea0 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/__init__.py b/antarest/study/web/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/study/web/__init__.py +++ b/antarest/study/web/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/explorer_blueprint.py b/antarest/study/web/explorer_blueprint.py index 0981ba5214..2c8065fbd2 100644 --- a/antarest/study/web/explorer_blueprint.py +++ b/antarest/study/web/explorer_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/raw_studies_blueprint.py b/antarest/study/web/raw_studies_blueprint.py index 730402a9ee..a06eba7515 100644 --- a/antarest/study/web/raw_studies_blueprint.py +++ b/antarest/study/web/raw_studies_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/studies_blueprint.py b/antarest/study/web/studies_blueprint.py index 6fe9758186..25d72b94fc 100644 --- a/antarest/study/web/studies_blueprint.py +++ b/antarest/study/web/studies_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 6fa84387ee..9be21c1743 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/variant_blueprint.py b/antarest/study/web/variant_blueprint.py index db2c2b984a..c4056d7e1a 100644 --- a/antarest/study/web/variant_blueprint.py +++ b/antarest/study/web/variant_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/watcher_blueprint.py b/antarest/study/web/watcher_blueprint.py index cbfd3a8cb6..9a564ecb52 100644 --- a/antarest/study/web/watcher_blueprint.py +++ b/antarest/study/web/watcher_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/study/web/xpansion_studies_blueprint.py b/antarest/study/web/xpansion_studies_blueprint.py index 5372fb0cea..0871efd0f0 100644 --- a/antarest/study/web/xpansion_studies_blueprint.py +++ b/antarest/study/web/xpansion_studies_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/tools/__init__.py b/antarest/tools/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/tools/__init__.py +++ b/antarest/tools/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/tools/admin.py b/antarest/tools/admin.py index 39f15991cd..7ad6f3e9a4 100644 --- a/antarest/tools/admin.py +++ b/antarest/tools/admin.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/tools/admin_lib.py b/antarest/tools/admin_lib.py index 4a27593b96..526c415784 100644 --- a/antarest/tools/admin_lib.py +++ b/antarest/tools/admin_lib.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/tools/cli.py b/antarest/tools/cli.py index f7735b891e..aa6b733bde 100644 --- a/antarest/tools/cli.py +++ b/antarest/tools/cli.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/tools/lib.py b/antarest/tools/lib.py index 03d59a1949..85b1c6c19c 100644 --- a/antarest/tools/lib.py +++ b/antarest/tools/lib.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/worker/__init__.py b/antarest/worker/__init__.py index 058c6b221a..f477ac830c 100644 --- a/antarest/worker/__init__.py +++ b/antarest/worker/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/worker/archive_worker.py b/antarest/worker/archive_worker.py index 23bcd3aa69..cf62083b24 100644 --- a/antarest/worker/archive_worker.py +++ b/antarest/worker/archive_worker.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/worker/archive_worker_service.py b/antarest/worker/archive_worker_service.py index b8e505fa8c..d7c79efad7 100644 --- a/antarest/worker/archive_worker_service.py +++ b/antarest/worker/archive_worker_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/worker/worker.py b/antarest/worker/worker.py index 6de459efbb..a3525b5969 100644 --- a/antarest/worker/worker.py +++ b/antarest/worker/worker.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/antarest/wsgi.py b/antarest/wsgi.py index b39d3a1153..dc730be5e5 100644 --- a/antarest/wsgi.py +++ b/antarest/wsgi.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/scripts/license_checker_and_adder.py b/scripts/license_checker_and_adder.py index 31139ae87a..7b2413b302 100755 --- a/scripts/license_checker_and_adder.py +++ b/scripts/license_checker_and_adder.py @@ -8,7 +8,7 @@ # Use to skip subtrees that have their own licenses (forks) LICENSE_FILE_PATTERN = re.compile("LICENSE.*") -BACKEND_LICENSE_HEADER = """# Copyright (c) 2024, RTE (https://www.rte-france.com) +BACKEND_LICENSE_HEADER = """# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/__init__.py b/tests/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/cache/__init__.py b/tests/cache/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/cache/__init__.py +++ b/tests/cache/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/cache/test_local_cache.py b/tests/cache/test_local_cache.py index dc6382cac5..165db1f4a2 100644 --- a/tests/cache/test_local_cache.py +++ b/tests/cache/test_local_cache.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/cache/test_redis_cache.py b/tests/cache/test_redis_cache.py index 808131fabb..5e9aa5d7ae 100644 --- a/tests/cache/test_redis_cache.py +++ b/tests/cache/test_redis_cache.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/cache/test_service.py b/tests/cache/test_service.py index cc833227d0..41aee5bbbe 100644 --- a/tests/cache/test_service.py +++ b/tests/cache/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/conftest.py b/tests/conftest.py index cd2016daea..e384338bc8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/conftest_db.py b/tests/conftest_db.py index 51b63d24af..520decb814 100644 --- a/tests/conftest_db.py +++ b/tests/conftest_db.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/conftest_instances.py b/tests/conftest_instances.py index 58237e6fc1..bd5057c34f 100644 --- a/tests/conftest_instances.py +++ b/tests/conftest_instances.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/conftest_services.py b/tests/conftest_services.py index aef3457e3b..c1d4865662 100644 --- a/tests/conftest_services.py +++ b/tests/conftest_services.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/__init__.py b/tests/core/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/core/__init__.py +++ b/tests/core/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/assets/__init__.py b/tests/core/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/core/assets/__init__.py +++ b/tests/core/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/tasks/__init__.py b/tests/core/tasks/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/core/tasks/__init__.py +++ b/tests/core/tasks/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/tasks/test_model.py b/tests/core/tasks/test_model.py index 8c93ba9c3b..128a139244 100644 --- a/tests/core/tasks/test_model.py +++ b/tests/core/tasks/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/tasks/test_task_job_service.py b/tests/core/tasks/test_task_job_service.py index 759146cac5..b95b03fdba 100644 --- a/tests/core/tasks/test_task_job_service.py +++ b/tests/core/tasks/test_task_job_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_auth.py b/tests/core/test_auth.py index 469ce8a2ee..367750b770 100644 --- a/tests/core/test_auth.py +++ b/tests/core/test_auth.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_exceptions.py b/tests/core/test_exceptions.py index 9ebdc6aa84..af787d2a58 100644 --- a/tests/core/test_exceptions.py +++ b/tests/core/test_exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_file_transfer.py b/tests/core/test_file_transfer.py index 44cf01e410..fa3a30601a 100644 --- a/tests/core/test_file_transfer.py +++ b/tests/core/test_file_transfer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_jwt.py b/tests/core/test_jwt.py index 603d2b76dc..8d7ee229b7 100644 --- a/tests/core/test_jwt.py +++ b/tests/core/test_jwt.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_maintenance.py b/tests/core/test_maintenance.py index c6c604d9ca..f1b6c741df 100644 --- a/tests/core/test_maintenance.py +++ b/tests/core/test_maintenance.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_tasks.py b/tests/core/test_tasks.py index f1a8473c00..47b8ea08cd 100644 --- a/tests/core/test_tasks.py +++ b/tests/core/test_tasks.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_utils.py b/tests/core/test_utils.py index e6022f139e..bca468c94b 100644 --- a/tests/core/test_utils.py +++ b/tests/core/test_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_utils_bp.py b/tests/core/test_utils_bp.py index b4ae0847ed..73878badaf 100644 --- a/tests/core/test_utils_bp.py +++ b/tests/core/test_utils_bp.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/test_version_info.py b/tests/core/test_version_info.py index 2ad075d9f1..a41b59af79 100644 --- a/tests/core/test_version_info.py +++ b/tests/core/test_version_info.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/utils/__init__.py b/tests/core/utils/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/core/utils/__init__.py +++ b/tests/core/utils/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/core/utils/test_extract_zip.py b/tests/core/utils/test_extract_zip.py index 5d24e6c772..4f2751c527 100644 --- a/tests/core/utils/test_extract_zip.py +++ b/tests/core/utils/test_extract_zip.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/db_statement_recorder.py b/tests/db_statement_recorder.py index 890205b94f..fc40e7c9da 100644 --- a/tests/db_statement_recorder.py +++ b/tests/db_statement_recorder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/eventbus/__init__.py b/tests/eventbus/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/eventbus/__init__.py +++ b/tests/eventbus/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/eventbus/test_local_eventbus.py b/tests/eventbus/test_local_eventbus.py index 571673cbeb..c8c552e2e1 100644 --- a/tests/eventbus/test_local_eventbus.py +++ b/tests/eventbus/test_local_eventbus.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/eventbus/test_redis_event_bus.py b/tests/eventbus/test_redis_event_bus.py index fa8722f742..05587f6408 100644 --- a/tests/eventbus/test_redis_event_bus.py +++ b/tests/eventbus/test_redis_event_bus.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/eventbus/test_service.py b/tests/eventbus/test_service.py index 4089849db7..4be8865f24 100644 --- a/tests/eventbus/test_service.py +++ b/tests/eventbus/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/eventbus/test_websocket_manager.py b/tests/eventbus/test_websocket_manager.py index 94500de322..0e23ca4ade 100644 --- a/tests/eventbus/test_websocket_manager.py +++ b/tests/eventbus/test_websocket_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/helpers.py b/tests/helpers.py index 80dd0683a6..2b04ecd65c 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/assets/__init__.py b/tests/integration/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/integration/assets/__init__.py +++ b/tests/integration/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 833791850d..7c588f37dd 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/explorer_blueprint/test_explorer.py b/tests/integration/explorer_blueprint/test_explorer.py index dbb6f83ebc..7463602cff 100644 --- a/tests/integration/explorer_blueprint/test_explorer.py +++ b/tests/integration/explorer_blueprint/test_explorer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/filesystem_blueprint/__init__.py b/tests/integration/filesystem_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/filesystem_blueprint/__init__.py +++ b/tests/integration/filesystem_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/filesystem_blueprint/test_filesystem_endpoints.py b/tests/integration/filesystem_blueprint/test_filesystem_endpoints.py index ac1e9a36ff..9dbc3308ed 100644 --- a/tests/integration/filesystem_blueprint/test_filesystem_endpoints.py +++ b/tests/integration/filesystem_blueprint/test_filesystem_endpoints.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/filesystem_blueprint/test_model.py b/tests/integration/filesystem_blueprint/test_model.py index d26bdb02cb..4e04761bee 100644 --- a/tests/integration/filesystem_blueprint/test_model.py +++ b/tests/integration/filesystem_blueprint/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/launcher_blueprint/__init__.py b/tests/integration/launcher_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/launcher_blueprint/__init__.py +++ b/tests/integration/launcher_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/launcher_blueprint/test_launcher_local.py b/tests/integration/launcher_blueprint/test_launcher_local.py index 67fc421324..6771b71e13 100644 --- a/tests/integration/launcher_blueprint/test_launcher_local.py +++ b/tests/integration/launcher_blueprint/test_launcher_local.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/launcher_blueprint/test_solver_versions.py b/tests/integration/launcher_blueprint/test_solver_versions.py index f4634a497e..4934d07a0b 100644 --- a/tests/integration/launcher_blueprint/test_solver_versions.py +++ b/tests/integration/launcher_blueprint/test_solver_versions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/prepare_proxy.py b/tests/integration/prepare_proxy.py index b1fa804a1f..e1d37502a1 100644 --- a/tests/integration/prepare_proxy.py +++ b/tests/integration/prepare_proxy.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/raw_studies_blueprint/__init__.py b/tests/integration/raw_studies_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/raw_studies_blueprint/__init__.py +++ b/tests/integration/raw_studies_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/raw_studies_blueprint/assets/__init__.py b/tests/integration/raw_studies_blueprint/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/integration/raw_studies_blueprint/assets/__init__.py +++ b/tests/integration/raw_studies_blueprint/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py index f4532ea46f..84637fbac2 100644 --- a/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/raw_studies_blueprint/test_download_matrices.py b/tests/integration/raw_studies_blueprint/test_download_matrices.py index f4b1519d4a..ec097d4fcc 100644 --- a/tests/integration/raw_studies_blueprint/test_download_matrices.py +++ b/tests/integration/raw_studies_blueprint/test_download_matrices.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py index 15673c8ae7..8cbd7429eb 100644 --- a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/__init__.py b/tests/integration/studies_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/studies_blueprint/__init__.py +++ b/tests/integration/studies_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/assets/__init__.py b/tests/integration/studies_blueprint/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/integration/studies_blueprint/assets/__init__.py +++ b/tests/integration/studies_blueprint/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_comments.py b/tests/integration/studies_blueprint/test_comments.py index b83cc134b7..d57c3f068d 100644 --- a/tests/integration/studies_blueprint/test_comments.py +++ b/tests/integration/studies_blueprint/test_comments.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_disk_usage.py b/tests/integration/studies_blueprint/test_disk_usage.py index 6958667863..d421d813f5 100644 --- a/tests/integration/studies_blueprint/test_disk_usage.py +++ b/tests/integration/studies_blueprint/test_disk_usage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_get_studies.py b/tests/integration/studies_blueprint/test_get_studies.py index 8e94e15d92..7049f82369 100644 --- a/tests/integration/studies_blueprint/test_get_studies.py +++ b/tests/integration/studies_blueprint/test_get_studies.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_move.py b/tests/integration/studies_blueprint/test_move.py index 83defc9aad..357543b7a7 100644 --- a/tests/integration/studies_blueprint/test_move.py +++ b/tests/integration/studies_blueprint/test_move.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_study_matrix_index.py b/tests/integration/studies_blueprint/test_study_matrix_index.py index 4f540f4c30..0c02b2dc8e 100644 --- a/tests/integration/studies_blueprint/test_study_matrix_index.py +++ b/tests/integration/studies_blueprint/test_study_matrix_index.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_study_version.py b/tests/integration/studies_blueprint/test_study_version.py index 8a4e603450..087122f6a8 100644 --- a/tests/integration/studies_blueprint/test_study_version.py +++ b/tests/integration/studies_blueprint/test_study_version.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_synthesis.py b/tests/integration/studies_blueprint/test_synthesis.py index d67e0f60a7..e881fefa2b 100644 --- a/tests/integration/studies_blueprint/test_synthesis.py +++ b/tests/integration/studies_blueprint/test_synthesis.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/studies_blueprint/test_update_tags.py b/tests/integration/studies_blueprint/test_update_tags.py index fd9005a98a..12bded185a 100644 --- a/tests/integration/studies_blueprint/test_update_tags.py +++ b/tests/integration/studies_blueprint/test_update_tags.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/__init__.py b/tests/integration/study_data_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/study_data_blueprint/__init__.py +++ b/tests/integration/study_data_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_advanced_parameters.py b/tests/integration/study_data_blueprint/test_advanced_parameters.py index 7b76ee0c87..a647f79c34 100644 --- a/tests/integration/study_data_blueprint/test_advanced_parameters.py +++ b/tests/integration/study_data_blueprint/test_advanced_parameters.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_binding_constraints.py b/tests/integration/study_data_blueprint/test_binding_constraints.py index e0f19a21cc..408cef124d 100644 --- a/tests/integration/study_data_blueprint/test_binding_constraints.py +++ b/tests/integration/study_data_blueprint/test_binding_constraints.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_config_general.py b/tests/integration/study_data_blueprint/test_config_general.py index 7353814e1b..f287fd629b 100644 --- a/tests/integration/study_data_blueprint/test_config_general.py +++ b/tests/integration/study_data_blueprint/test_config_general.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_edit_matrix.py b/tests/integration/study_data_blueprint/test_edit_matrix.py index 474b53d4e3..f81ebcdae6 100644 --- a/tests/integration/study_data_blueprint/test_edit_matrix.py +++ b/tests/integration/study_data_blueprint/test_edit_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py b/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py index ff8eda61e4..466b915e69 100644 --- a/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py +++ b/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_hydro_allocation.py b/tests/integration/study_data_blueprint/test_hydro_allocation.py index cfe1b51ba6..d7e856f2c6 100644 --- a/tests/integration/study_data_blueprint/test_hydro_allocation.py +++ b/tests/integration/study_data_blueprint/test_hydro_allocation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_hydro_correlation.py b/tests/integration/study_data_blueprint/test_hydro_correlation.py index 61a76f76e2..42a5338e0f 100644 --- a/tests/integration/study_data_blueprint/test_hydro_correlation.py +++ b/tests/integration/study_data_blueprint/test_hydro_correlation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py b/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py index 79965cc81e..fefcba24a9 100644 --- a/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py +++ b/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_link.py b/tests/integration/study_data_blueprint/test_link.py index 9fba2a1d5a..7ba267c7cd 100644 --- a/tests/integration/study_data_blueprint/test_link.py +++ b/tests/integration/study_data_blueprint/test_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_playlist.py b/tests/integration/study_data_blueprint/test_playlist.py index 93bc1c9624..04d5f3c71b 100644 --- a/tests/integration/study_data_blueprint/test_playlist.py +++ b/tests/integration/study_data_blueprint/test_playlist.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_renewable.py b/tests/integration/study_data_blueprint/test_renewable.py index 8e3fb8051b..37a06728ae 100644 --- a/tests/integration/study_data_blueprint/test_renewable.py +++ b/tests/integration/study_data_blueprint/test_renewable.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_st_storage.py b/tests/integration/study_data_blueprint/test_st_storage.py index c2f1563df8..1a654ed9f9 100644 --- a/tests/integration/study_data_blueprint/test_st_storage.py +++ b/tests/integration/study_data_blueprint/test_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_table_mode.py b/tests/integration/study_data_blueprint/test_table_mode.py index 80159f7a37..f2e53ba347 100644 --- a/tests/integration/study_data_blueprint/test_table_mode.py +++ b/tests/integration/study_data_blueprint/test_table_mode.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/study_data_blueprint/test_thermal.py b/tests/integration/study_data_blueprint/test_thermal.py index 6328606247..0ee1737d66 100644 --- a/tests/integration/study_data_blueprint/test_thermal.py +++ b/tests/integration/study_data_blueprint/test_thermal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_apidoc.py b/tests/integration/test_apidoc.py index d0eb7445d8..2d4ed19c59 100644 --- a/tests/integration/test_apidoc.py +++ b/tests/integration/test_apidoc.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_core_blueprint.py b/tests/integration/test_core_blueprint.py index a60ba6dcfb..a4693ccc70 100644 --- a/tests/integration/test_core_blueprint.py +++ b/tests/integration/test_core_blueprint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index 88f3b7ef1a..206227f9e9 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_integration_token_end_to_end.py b/tests/integration/test_integration_token_end_to_end.py index e57b0d4039..c8c987ce34 100644 --- a/tests/integration/test_integration_token_end_to_end.py +++ b/tests/integration/test_integration_token_end_to_end.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_integration_variantmanager_tool.py b/tests/integration/test_integration_variantmanager_tool.py index 3303fa574a..4768332f30 100644 --- a/tests/integration/test_integration_variantmanager_tool.py +++ b/tests/integration/test_integration_variantmanager_tool.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_integration_watcher.py b/tests/integration/test_integration_watcher.py index da28eb76c4..a80da7c0c1 100644 --- a/tests/integration/test_integration_watcher.py +++ b/tests/integration/test_integration_watcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/test_studies_upgrade.py b/tests/integration/test_studies_upgrade.py index 37b5058ff2..33cbda1b6b 100644 --- a/tests/integration/test_studies_upgrade.py +++ b/tests/integration/test_studies_upgrade.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/utils.py b/tests/integration/utils.py index fa5a34f286..38a2c06bf0 100644 --- a/tests/integration/utils.py +++ b/tests/integration/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/variant_blueprint/__init__.py b/tests/integration/variant_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/variant_blueprint/__init__.py +++ b/tests/integration/variant_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/variant_blueprint/test_renewable_cluster.py b/tests/integration/variant_blueprint/test_renewable_cluster.py index 18e6af0c56..098cb12d52 100644 --- a/tests/integration/variant_blueprint/test_renewable_cluster.py +++ b/tests/integration/variant_blueprint/test_renewable_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/variant_blueprint/test_st_storage.py b/tests/integration/variant_blueprint/test_st_storage.py index b4092f0acb..52ff483836 100644 --- a/tests/integration/variant_blueprint/test_st_storage.py +++ b/tests/integration/variant_blueprint/test_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/variant_blueprint/test_thermal_cluster.py b/tests/integration/variant_blueprint/test_thermal_cluster.py index 7e5ce92677..5029c2bca3 100644 --- a/tests/integration/variant_blueprint/test_thermal_cluster.py +++ b/tests/integration/variant_blueprint/test_thermal_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/variant_blueprint/test_variant_manager.py b/tests/integration/variant_blueprint/test_variant_manager.py index 00c75e515c..5cc7178754 100644 --- a/tests/integration/variant_blueprint/test_variant_manager.py +++ b/tests/integration/variant_blueprint/test_variant_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/xpansion_studies_blueprint/__init__.py b/tests/integration/xpansion_studies_blueprint/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/integration/xpansion_studies_blueprint/__init__.py +++ b/tests/integration/xpansion_studies_blueprint/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/integration/xpansion_studies_blueprint/test_integration_xpansion.py b/tests/integration/xpansion_studies_blueprint/test_integration_xpansion.py index 332b532680..32e15dc8db 100644 --- a/tests/integration/xpansion_studies_blueprint/test_integration_xpansion.py +++ b/tests/integration/xpansion_studies_blueprint/test_integration_xpansion.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/__init__.py b/tests/launcher/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/launcher/__init__.py +++ b/tests/launcher/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/assets/__init__.py b/tests/launcher/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/launcher/assets/__init__.py +++ b/tests/launcher/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_extension_adequacy_patch.py b/tests/launcher/test_extension_adequacy_patch.py index 6d8f0f7c9a..4f3467edfb 100644 --- a/tests/launcher/test_extension_adequacy_patch.py +++ b/tests/launcher/test_extension_adequacy_patch.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_local_launcher.py b/tests/launcher/test_local_launcher.py index 84d04b2297..aadfa79dba 100644 --- a/tests/launcher/test_local_launcher.py +++ b/tests/launcher/test_local_launcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_log_manager.py b/tests/launcher/test_log_manager.py index cfc6b87b52..9f53bc9961 100644 --- a/tests/launcher/test_log_manager.py +++ b/tests/launcher/test_log_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_log_parser.py b/tests/launcher/test_log_parser.py index d8356319bb..0fd422c93b 100644 --- a/tests/launcher/test_log_parser.py +++ b/tests/launcher/test_log_parser.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_model.py b/tests/launcher/test_model.py index 36f6bd8948..a7cbcd0dc4 100644 --- a/tests/launcher/test_model.py +++ b/tests/launcher/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_repository.py b/tests/launcher/test_repository.py index f5bcf2672f..30d3a4478c 100644 --- a/tests/launcher/test_repository.py +++ b/tests/launcher/test_repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_service.py b/tests/launcher/test_service.py index 0c4904a870..81ff178051 100644 --- a/tests/launcher/test_service.py +++ b/tests/launcher/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_slurm_launcher.py b/tests/launcher/test_slurm_launcher.py index 64ae611217..36f71bc51a 100644 --- a/tests/launcher/test_slurm_launcher.py +++ b/tests/launcher/test_slurm_launcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_ssh_client.py b/tests/launcher/test_ssh_client.py index df0af69fb2..e1a6c8366f 100644 --- a/tests/launcher/test_ssh_client.py +++ b/tests/launcher/test_ssh_client.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/launcher/test_web.py b/tests/launcher/test_web.py index e1104f87af..f678b4304e 100644 --- a/tests/launcher/test_web.py +++ b/tests/launcher/test_web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/__init__.py b/tests/login/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/login/__init__.py +++ b/tests/login/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/conftest.py b/tests/login/conftest.py index 38c90a9c8d..635a57d6a1 100644 --- a/tests/login/conftest.py +++ b/tests/login/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/test_ldap.py b/tests/login/test_ldap.py index aa674f68b4..e4ecb7645a 100644 --- a/tests/login/test_ldap.py +++ b/tests/login/test_ldap.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/test_login_service.py b/tests/login/test_login_service.py index 0c4c9b756c..50ca7a6b3f 100644 --- a/tests/login/test_login_service.py +++ b/tests/login/test_login_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/test_model.py b/tests/login/test_model.py index a37cdb7bd5..e01d4a2d10 100644 --- a/tests/login/test_model.py +++ b/tests/login/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/test_repository.py b/tests/login/test_repository.py index 1eed93d437..20aa38d8eb 100644 --- a/tests/login/test_repository.py +++ b/tests/login/test_repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/login/test_web.py b/tests/login/test_web.py index 389dc94cf7..ec896f5628 100644 --- a/tests/login/test_web.py +++ b/tests/login/test_web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/__init__.py b/tests/matrixstore/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/matrixstore/__init__.py +++ b/tests/matrixstore/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/conftest.py b/tests/matrixstore/conftest.py index 52285fb6f8..c4f86212b0 100644 --- a/tests/matrixstore/conftest.py +++ b/tests/matrixstore/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/test_matrix_editor.py b/tests/matrixstore/test_matrix_editor.py index 229e9e53f3..ed70e67c9a 100644 --- a/tests/matrixstore/test_matrix_editor.py +++ b/tests/matrixstore/test_matrix_editor.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/test_matrix_garbage_collector.py b/tests/matrixstore/test_matrix_garbage_collector.py index 7cb909f59c..25c347fd9e 100644 --- a/tests/matrixstore/test_matrix_garbage_collector.py +++ b/tests/matrixstore/test_matrix_garbage_collector.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/test_repository.py b/tests/matrixstore/test_repository.py index c343d8adc7..932f10b571 100644 --- a/tests/matrixstore/test_repository.py +++ b/tests/matrixstore/test_repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/test_service.py b/tests/matrixstore/test_service.py index 65ce952e1d..fa8119a643 100644 --- a/tests/matrixstore/test_service.py +++ b/tests/matrixstore/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/matrixstore/test_web.py b/tests/matrixstore/test_web.py index d47fb030bc..3d9d9365b4 100644 --- a/tests/matrixstore/test_web.py +++ b/tests/matrixstore/test_web.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/__init__.py b/tests/storage/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/__init__.py +++ b/tests/storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/__init__.py b/tests/storage/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/business/__init__.py +++ b/tests/storage/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/assets/__init__.py b/tests/storage/business/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/storage/business/assets/__init__.py +++ b/tests/storage/business/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_arealink_manager.py b/tests/storage/business/test_arealink_manager.py index 1cc0639c1f..6f20f5873f 100644 --- a/tests/storage/business/test_arealink_manager.py +++ b/tests/storage/business/test_arealink_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_autoarchive_service.py b/tests/storage/business/test_autoarchive_service.py index 57847b6ce8..72678691cd 100644 --- a/tests/storage/business/test_autoarchive_service.py +++ b/tests/storage/business/test_autoarchive_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_config_manager.py b/tests/storage/business/test_config_manager.py index d8a579bc40..e9cbbf53e2 100644 --- a/tests/storage/business/test_config_manager.py +++ b/tests/storage/business/test_config_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_explorer_service.py b/tests/storage/business/test_explorer_service.py index 1b555b7c8a..fb150aad1c 100644 --- a/tests/storage/business/test_explorer_service.py +++ b/tests/storage/business/test_explorer_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_export.py b/tests/storage/business/test_export.py index 2fb4b91411..fab40b0204 100644 --- a/tests/storage/business/test_export.py +++ b/tests/storage/business/test_export.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_import.py b/tests/storage/business/test_import.py index 6cf9a7ef74..7b8af36f65 100644 --- a/tests/storage/business/test_import.py +++ b/tests/storage/business/test_import.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_patch_service.py b/tests/storage/business/test_patch_service.py index 3abb8790f0..0c7422d436 100644 --- a/tests/storage/business/test_patch_service.py +++ b/tests/storage/business/test_patch_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_raw_study_service.py b/tests/storage/business/test_raw_study_service.py index 2e9bb25c5a..eb87bfc09f 100644 --- a/tests/storage/business/test_raw_study_service.py +++ b/tests/storage/business/test_raw_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_repository.py b/tests/storage/business/test_repository.py index ed025de372..6c48d17a2f 100644 --- a/tests/storage/business/test_repository.py +++ b/tests/storage/business/test_repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_study_service_utils.py b/tests/storage/business/test_study_service_utils.py index 270f3d4dba..8e5ff17714 100644 --- a/tests/storage/business/test_study_service_utils.py +++ b/tests/storage/business/test_study_service_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_study_version_upgrader.py b/tests/storage/business/test_study_version_upgrader.py index 39ce1da653..c5fc6443dc 100644 --- a/tests/storage/business/test_study_version_upgrader.py +++ b/tests/storage/business/test_study_version_upgrader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_timeseries_config_manager.py b/tests/storage/business/test_timeseries_config_manager.py index 3bc7cd0ad9..233bdeb079 100644 --- a/tests/storage/business/test_timeseries_config_manager.py +++ b/tests/storage/business/test_timeseries_config_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_url_resolver_service.py b/tests/storage/business/test_url_resolver_service.py index a7f6a601c5..3d678e466e 100644 --- a/tests/storage/business/test_url_resolver_service.py +++ b/tests/storage/business/test_url_resolver_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_variant_study_service.py b/tests/storage/business/test_variant_study_service.py index a6a3feab85..f6e6077c40 100644 --- a/tests/storage/business/test_variant_study_service.py +++ b/tests/storage/business/test_variant_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_watcher.py b/tests/storage/business/test_watcher.py index daebd1e0cf..92e73f4d73 100644 --- a/tests/storage/business/test_watcher.py +++ b/tests/storage/business/test_watcher.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/business/test_xpansion_manager.py b/tests/storage/business/test_xpansion_manager.py index 325ddf7e0c..6c4d6b7db5 100644 --- a/tests/storage/business/test_xpansion_manager.py +++ b/tests/storage/business/test_xpansion_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/conftest.py b/tests/storage/conftest.py index 589d023919..297a367d08 100644 --- a/tests/storage/conftest.py +++ b/tests/storage/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/conftest.py b/tests/storage/integration/conftest.py index 3c7da36de9..f289ed7393 100644 --- a/tests/storage/integration/conftest.py +++ b/tests/storage/integration/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/__init__.py b/tests/storage/integration/data/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/integration/data/__init__.py +++ b/tests/storage/integration/data/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/de_details_hourly.py b/tests/storage/integration/data/de_details_hourly.py index 779c794bb6..5cb9af12e5 100644 --- a/tests/storage/integration/data/de_details_hourly.py +++ b/tests/storage/integration/data/de_details_hourly.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/de_fr_values_hourly.py b/tests/storage/integration/data/de_fr_values_hourly.py index 43a40c2e12..a36e89221e 100644 --- a/tests/storage/integration/data/de_fr_values_hourly.py +++ b/tests/storage/integration/data/de_fr_values_hourly.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/digest_file.py b/tests/storage/integration/data/digest_file.py index 932be1eedd..c678c7620f 100644 --- a/tests/storage/integration/data/digest_file.py +++ b/tests/storage/integration/data/digest_file.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/set_id_annual.py b/tests/storage/integration/data/set_id_annual.py index 353f2a03f5..000de609ce 100644 --- a/tests/storage/integration/data/set_id_annual.py +++ b/tests/storage/integration/data/set_id_annual.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/data/set_values_monthly.py b/tests/storage/integration/data/set_values_monthly.py index efe6fe7052..810c5a6353 100644 --- a/tests/storage/integration/data/set_values_monthly.py +++ b/tests/storage/integration/data/set_values_monthly.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/test_STA_mini.py b/tests/storage/integration/test_STA_mini.py index 580ad7c48b..bbe66a8545 100644 --- a/tests/storage/integration/test_STA_mini.py +++ b/tests/storage/integration/test_STA_mini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/test_exporter.py b/tests/storage/integration/test_exporter.py index 39ad4b1b7a..ac727a918f 100644 --- a/tests/storage/integration/test_exporter.py +++ b/tests/storage/integration/test_exporter.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/integration/test_write_STA_mini.py b/tests/storage/integration/test_write_STA_mini.py index 302bbd6e52..832b2eeded 100644 --- a/tests/storage/integration/test_write_STA_mini.py +++ b/tests/storage/integration/test_write_STA_mini.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/rawstudies/__init__.py b/tests/storage/rawstudies/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/rawstudies/__init__.py +++ b/tests/storage/rawstudies/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/rawstudies/samples/__init__.py b/tests/storage/rawstudies/samples/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/storage/rawstudies/samples/__init__.py +++ b/tests/storage/rawstudies/samples/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/rawstudies/test_factory.py b/tests/storage/rawstudies/test_factory.py index 80b2a2e19c..ba94db04a2 100644 --- a/tests/storage/rawstudies/test_factory.py +++ b/tests/storage/rawstudies/test_factory.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/rawstudies/test_helpers.py b/tests/storage/rawstudies/test_helpers.py index 4f540d56be..605a19756e 100644 --- a/tests/storage/rawstudies/test_helpers.py +++ b/tests/storage/rawstudies/test_helpers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/__init__.py b/tests/storage/repository/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/__init__.py +++ b/tests/storage/repository/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/antares_io/__init__.py b/tests/storage/repository/antares_io/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/antares_io/__init__.py +++ b/tests/storage/repository/antares_io/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/antares_io/reader/test_ini_reader.py b/tests/storage/repository/antares_io/reader/test_ini_reader.py index 6c1a18533a..b36ee066d7 100644 --- a/tests/storage/repository/antares_io/reader/test_ini_reader.py +++ b/tests/storage/repository/antares_io/reader/test_ini_reader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/antares_io/writer/test_ini_writer.py b/tests/storage/repository/antares_io/writer/test_ini_writer.py index 1affe2dc9c..edb73035f3 100644 --- a/tests/storage/repository/antares_io/writer/test_ini_writer.py +++ b/tests/storage/repository/antares_io/writer/test_ini_writer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/__init__.py b/tests/storage/repository/filesystem/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/__init__.py +++ b/tests/storage/repository/filesystem/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/config/__init__.py b/tests/storage/repository/filesystem/config/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/config/__init__.py +++ b/tests/storage/repository/filesystem/config/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/config/test_config_files.py b/tests/storage/repository/filesystem/config/test_config_files.py index 77ae462678..aa8dbd1286 100644 --- a/tests/storage/repository/filesystem/config/test_config_files.py +++ b/tests/storage/repository/filesystem/config/test_config_files.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/config/test_files.py b/tests/storage/repository/filesystem/config/test_files.py index fbdf160bce..a8e711275f 100644 --- a/tests/storage/repository/filesystem/config/test_files.py +++ b/tests/storage/repository/filesystem/config/test_files.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/config/test_ruleset_matrices.py b/tests/storage/repository/filesystem/config/test_ruleset_matrices.py index 183a9481c8..481316885b 100644 --- a/tests/storage/repository/filesystem/config/test_ruleset_matrices.py +++ b/tests/storage/repository/filesystem/config/test_ruleset_matrices.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/config/test_utils.py b/tests/storage/repository/filesystem/config/test_utils.py index cf470df38f..fcce124a3c 100644 --- a/tests/storage/repository/filesystem/config/test_utils.py +++ b/tests/storage/repository/filesystem/config/test_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/__init__.py b/tests/storage/repository/filesystem/matrix/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/matrix/__init__.py +++ b/tests/storage/repository/filesystem/matrix/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/test_date_serializer.py b/tests/storage/repository/filesystem/matrix/test_date_serializer.py index 31ed6e8eab..4e148a50d8 100644 --- a/tests/storage/repository/filesystem/matrix/test_date_serializer.py +++ b/tests/storage/repository/filesystem/matrix/test_date_serializer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/test_head_writer.py b/tests/storage/repository/filesystem/matrix/test_head_writer.py index bdc579a811..21908fe750 100644 --- a/tests/storage/repository/filesystem/matrix/test_head_writer.py +++ b/tests/storage/repository/filesystem/matrix/test_head_writer.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/test_input_series_matrix.py b/tests/storage/repository/filesystem/matrix/test_input_series_matrix.py index 153ce522e1..1312197c24 100644 --- a/tests/storage/repository/filesystem/matrix/test_input_series_matrix.py +++ b/tests/storage/repository/filesystem/matrix/test_input_series_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/test_matrix_node.py b/tests/storage/repository/filesystem/matrix/test_matrix_node.py index 936a54b6ea..7edaa94c6e 100644 --- a/tests/storage/repository/filesystem/matrix/test_matrix_node.py +++ b/tests/storage/repository/filesystem/matrix/test_matrix_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/matrix/test_output_series_matrix.py b/tests/storage/repository/filesystem/matrix/test_output_series_matrix.py index 8ed2a07fe0..1f5fbbac57 100644 --- a/tests/storage/repository/filesystem/matrix/test_output_series_matrix.py +++ b/tests/storage/repository/filesystem/matrix/test_output_series_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/__init__.py b/tests/storage/repository/filesystem/root/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/__init__.py +++ b/tests/storage/repository/filesystem/root/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/__init__.py b/tests/storage/repository/filesystem/root/input/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/__init__.py +++ b/tests/storage/repository/filesystem/root/input/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/__init__.py b/tests/storage/repository/filesystem/root/input/hydro/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/__init__.py +++ b/tests/storage/repository/filesystem/root/input/hydro/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/common/__init__.py b/tests/storage/repository/filesystem/root/input/hydro/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/common/__init__.py +++ b/tests/storage/repository/filesystem/root/input/hydro/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/common/capacity/__init__.py b/tests/storage/repository/filesystem/root/input/hydro/common/capacity/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/common/capacity/__init__.py +++ b/tests/storage/repository/filesystem/root/input/hydro/common/capacity/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/common/capacity/test_capacity.py b/tests/storage/repository/filesystem/root/input/hydro/common/capacity/test_capacity.py index a57f618e1c..2f98bf7b4b 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/common/capacity/test_capacity.py +++ b/tests/storage/repository/filesystem/root/input/hydro/common/capacity/test_capacity.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/series/__init__.py b/tests/storage/repository/filesystem/root/input/hydro/series/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/series/__init__.py +++ b/tests/storage/repository/filesystem/root/input/hydro/series/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/series/area/__init__.py b/tests/storage/repository/filesystem/root/input/hydro/series/area/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/series/area/__init__.py +++ b/tests/storage/repository/filesystem/root/input/hydro/series/area/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/input/hydro/series/area/test_area.py b/tests/storage/repository/filesystem/root/input/hydro/series/area/test_area.py index 4a1c7da570..0f71922ede 100644 --- a/tests/storage/repository/filesystem/root/input/hydro/series/area/test_area.py +++ b/tests/storage/repository/filesystem/root/input/hydro/series/area/test_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/__init__.py b/tests/storage/repository/filesystem/root/output/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/output/__init__.py +++ b/tests/storage/repository/filesystem/root/output/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/__init__.py b/tests/storage/repository/filesystem/root/output/simulation/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/__init__.py +++ b/tests/storage/repository/filesystem/root/output/simulation/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/__init__.py b/tests/storage/repository/filesystem/root/output/simulation/mode/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/__init__.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/common/__init__.py b/tests/storage/repository/filesystem/root/output/simulation/mode/common/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/common/__init__.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/common/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_area.py b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_area.py index ca6a127e37..5727835f9a 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_area.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_binding_const.py b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_binding_const.py index 8ee6a31266..2654c3fc6a 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_binding_const.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_binding_const.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_link.py b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_link.py index 28123774c5..685dbedb8c 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_link.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_set.py b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_set.py index f6016deb7c..6721368de5 100644 --- a/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_set.py +++ b/tests/storage/repository/filesystem/root/output/simulation/mode/common/test_set.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/special_node/__init__.py b/tests/storage/repository/filesystem/special_node/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/repository/filesystem/special_node/__init__.py +++ b/tests/storage/repository/filesystem/special_node/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/special_node/input_areas_list_test.py b/tests/storage/repository/filesystem/special_node/input_areas_list_test.py index a26635466b..b2c9155359 100644 --- a/tests/storage/repository/filesystem/special_node/input_areas_list_test.py +++ b/tests/storage/repository/filesystem/special_node/input_areas_list_test.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_bucket_node.py b/tests/storage/repository/filesystem/test_bucket_node.py index 1ea2ecf75f..596f2fb257 100644 --- a/tests/storage/repository/filesystem/test_bucket_node.py +++ b/tests/storage/repository/filesystem/test_bucket_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_folder_node.py b/tests/storage/repository/filesystem/test_folder_node.py index bd0ee4c3f4..c9e7080603 100644 --- a/tests/storage/repository/filesystem/test_folder_node.py +++ b/tests/storage/repository/filesystem/test_folder_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_ini_file_node.py b/tests/storage/repository/filesystem/test_ini_file_node.py index 3864fa875f..0baeb7b26e 100644 --- a/tests/storage/repository/filesystem/test_ini_file_node.py +++ b/tests/storage/repository/filesystem/test_ini_file_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_lazy_node.py b/tests/storage/repository/filesystem/test_lazy_node.py index 82e5cdeb0a..8564a80e1b 100644 --- a/tests/storage/repository/filesystem/test_lazy_node.py +++ b/tests/storage/repository/filesystem/test_lazy_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_raw_file_node.py b/tests/storage/repository/filesystem/test_raw_file_node.py index 04f2d6cb21..21504fff26 100644 --- a/tests/storage/repository/filesystem/test_raw_file_node.py +++ b/tests/storage/repository/filesystem/test_raw_file_node.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_scenariobuilder.py b/tests/storage/repository/filesystem/test_scenariobuilder.py index bb65b140c5..b2d882821d 100644 --- a/tests/storage/repository/filesystem/test_scenariobuilder.py +++ b/tests/storage/repository/filesystem/test_scenariobuilder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/test_ts_numbers_vector.py b/tests/storage/repository/filesystem/test_ts_numbers_vector.py index f92383371e..6a3f988f4e 100644 --- a/tests/storage/repository/filesystem/test_ts_numbers_vector.py +++ b/tests/storage/repository/filesystem/test_ts_numbers_vector.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/filesystem/utils.py b/tests/storage/repository/filesystem/utils.py index 385802430f..d6cc7ca9ef 100644 --- a/tests/storage/repository/filesystem/utils.py +++ b/tests/storage/repository/filesystem/utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/repository/test_study.py b/tests/storage/repository/test_study.py index 43f51554a9..d3f30d3dda 100644 --- a/tests/storage/repository/test_study.py +++ b/tests/storage/repository/test_study.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/test_model.py b/tests/storage/test_model.py index f59ce30137..abf63273d7 100644 --- a/tests/storage/test_model.py +++ b/tests/storage/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/test_service.py b/tests/storage/test_service.py index 1c3986a3c7..b31ee0ea7f 100644 --- a/tests/storage/test_service.py +++ b/tests/storage/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/web/__init__.py b/tests/storage/web/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/storage/web/__init__.py +++ b/tests/storage/web/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/storage/web/test_studies_bp.py b/tests/storage/web/test_studies_bp.py index 9729cf57bc..cd3d8364b3 100644 --- a/tests/storage/web/test_studies_bp.py +++ b/tests/storage/web/test_studies_bp.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/__init__.py b/tests/study/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/__init__.py +++ b/tests/study/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/__init__.py b/tests/study/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/business/__init__.py +++ b/tests/study/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/areas/__init__.py b/tests/study/business/areas/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/business/areas/__init__.py +++ b/tests/study/business/areas/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/areas/assets/__init__.py b/tests/study/business/areas/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/study/business/areas/assets/__init__.py +++ b/tests/study/business/areas/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/areas/test_st_storage_management.py b/tests/study/business/areas/test_st_storage_management.py index 56a42d88a0..8ce3b3c910 100644 --- a/tests/study/business/areas/test_st_storage_management.py +++ b/tests/study/business/areas/test_st_storage_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/areas/test_thermal_management.py b/tests/study/business/areas/test_thermal_management.py index 6bb2e34d7e..07bdb58787 100644 --- a/tests/study/business/areas/test_thermal_management.py +++ b/tests/study/business/areas/test_thermal_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_all_optional_metaclass.py b/tests/study/business/test_all_optional_metaclass.py index 5001019595..8e67794a67 100644 --- a/tests/study/business/test_all_optional_metaclass.py +++ b/tests/study/business/test_all_optional_metaclass.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_allocation_manager.py b/tests/study/business/test_allocation_manager.py index 18fc8d9aa5..9b9e7538fd 100644 --- a/tests/study/business/test_allocation_manager.py +++ b/tests/study/business/test_allocation_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_binding_constraint_management.py b/tests/study/business/test_binding_constraint_management.py index dcec736496..f14efa3a7f 100644 --- a/tests/study/business/test_binding_constraint_management.py +++ b/tests/study/business/test_binding_constraint_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_correlation_manager.py b/tests/study/business/test_correlation_manager.py index 677b0fc62e..8d949fe95b 100644 --- a/tests/study/business/test_correlation_manager.py +++ b/tests/study/business/test_correlation_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_district_manager.py b/tests/study/business/test_district_manager.py index 2fb7a47068..43dc7fa1a1 100644 --- a/tests/study/business/test_district_manager.py +++ b/tests/study/business/test_district_manager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/business/test_matrix_management.py b/tests/study/business/test_matrix_management.py index 11bf3dfd2b..a89d3ab6a4 100644 --- a/tests/study/business/test_matrix_management.py +++ b/tests/study/business/test_matrix_management.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/__init__.py b/tests/study/storage/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/storage/__init__.py +++ b/tests/study/storage/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/rawstudy/__init__.py b/tests/study/storage/rawstudy/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/storage/rawstudy/__init__.py +++ b/tests/study/storage/rawstudy/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/rawstudy/test_raw_study_service.py b/tests/study/storage/rawstudy/test_raw_study_service.py index a138da1735..c2f2b8a9c0 100644 --- a/tests/study/storage/rawstudy/test_raw_study_service.py +++ b/tests/study/storage/rawstudy/test_raw_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/test_abstract_storage_service.py b/tests/study/storage/test_abstract_storage_service.py index 7b2dc79c28..1928813080 100644 --- a/tests/study/storage/test_abstract_storage_service.py +++ b/tests/study/storage/test_abstract_storage_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/test_utils.py b/tests/study/storage/test_utils.py index 6f5b907a4a..8ad765ae87 100644 --- a/tests/study/storage/test_utils.py +++ b/tests/study/storage/test_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/__init__.py b/tests/study/storage/variantstudy/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/storage/variantstudy/__init__.py +++ b/tests/study/storage/variantstudy/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/business/__init__.py b/tests/study/storage/variantstudy/business/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/storage/variantstudy/business/__init__.py +++ b/tests/study/storage/variantstudy/business/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/business/test_matrix_constants_generator.py b/tests/study/storage/variantstudy/business/test_matrix_constants_generator.py index f47bc75a8b..0b368ffe7a 100644 --- a/tests/study/storage/variantstudy/business/test_matrix_constants_generator.py +++ b/tests/study/storage/variantstudy/business/test_matrix_constants_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/model/__init__.py b/tests/study/storage/variantstudy/model/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/study/storage/variantstudy/model/__init__.py +++ b/tests/study/storage/variantstudy/model/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/model/test_dbmodel.py b/tests/study/storage/variantstudy/model/test_dbmodel.py index 529c9f04b3..b9a960500b 100644 --- a/tests/study/storage/variantstudy/model/test_dbmodel.py +++ b/tests/study/storage/variantstudy/model/test_dbmodel.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/test_snapshot_generator.py b/tests/study/storage/variantstudy/test_snapshot_generator.py index 70a05c391a..6956502504 100644 --- a/tests/study/storage/variantstudy/test_snapshot_generator.py +++ b/tests/study/storage/variantstudy/test_snapshot_generator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/storage/variantstudy/test_variant_study_service.py b/tests/study/storage/variantstudy/test_variant_study_service.py index 8b5a69af76..54e1db01ab 100644 --- a/tests/study/storage/variantstudy/test_variant_study_service.py +++ b/tests/study/storage/variantstudy/test_variant_study_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/test_model.py b/tests/study/test_model.py index c93bdacc49..fc6fc148ad 100644 --- a/tests/study/test_model.py +++ b/tests/study/test_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/test_repository.py b/tests/study/test_repository.py index bcdcea759b..24a7e2c205 100644 --- a/tests/study/test_repository.py +++ b/tests/study/test_repository.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/study/test_service.py b/tests/study/test_service.py index e339c20daa..77fb4d9c91 100644 --- a/tests/study/test_service.py +++ b/tests/study/test_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/test_front.py b/tests/test_front.py index afe58f5fd3..4ef6041576 100644 --- a/tests/test_front.py +++ b/tests/test_front.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/test_resources.py b/tests/test_resources.py index 8c9abf46a6..ce944f5b6b 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/__init__.py b/tests/variantstudy/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/variantstudy/__init__.py +++ b/tests/variantstudy/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/assets/__init__.py b/tests/variantstudy/assets/__init__.py index 3fff24b6fe..60247d605b 100644 --- a/tests/variantstudy/assets/__init__.py +++ b/tests/variantstudy/assets/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/conftest.py b/tests/variantstudy/conftest.py index 6d3039d4f9..bbd7ee895f 100644 --- a/tests/variantstudy/conftest.py +++ b/tests/variantstudy/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/__init__.py b/tests/variantstudy/model/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/variantstudy/model/__init__.py +++ b/tests/variantstudy/model/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/__init__.py b/tests/variantstudy/model/command/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/variantstudy/model/command/__init__.py +++ b/tests/variantstudy/model/command/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/helpers.py b/tests/variantstudy/model/command/helpers.py index 4e6a792c61..3693b6b4a3 100644 --- a/tests/variantstudy/model/command/helpers.py +++ b/tests/variantstudy/model/command/helpers.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_alias_decoder.py b/tests/variantstudy/model/command/test_alias_decoder.py index 193c13a151..074114c748 100644 --- a/tests/variantstudy/model/command/test_alias_decoder.py +++ b/tests/variantstudy/model/command/test_alias_decoder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_create_area.py b/tests/variantstudy/model/command/test_create_area.py index 87f8d1044c..8e6de24779 100644 --- a/tests/variantstudy/model/command/test_create_area.py +++ b/tests/variantstudy/model/command/test_create_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_create_cluster.py b/tests/variantstudy/model/command/test_create_cluster.py index 077681bac6..bdd4e9feea 100644 --- a/tests/variantstudy/model/command/test_create_cluster.py +++ b/tests/variantstudy/model/command/test_create_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index bd4bac60ef..aa147e2df9 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index a2c6ca1ae0..9919212a42 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_create_st_storage.py b/tests/variantstudy/model/command/test_create_st_storage.py index 81093faec8..ba47d59da5 100644 --- a/tests/variantstudy/model/command/test_create_st_storage.py +++ b/tests/variantstudy/model/command/test_create_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_manage_binding_constraints.py b/tests/variantstudy/model/command/test_manage_binding_constraints.py index 1f3cb55971..3751c9f865 100644 --- a/tests/variantstudy/model/command/test_manage_binding_constraints.py +++ b/tests/variantstudy/model/command/test_manage_binding_constraints.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_manage_district.py b/tests/variantstudy/model/command/test_manage_district.py index 532ec35c19..b99d2ac380 100644 --- a/tests/variantstudy/model/command/test_manage_district.py +++ b/tests/variantstudy/model/command/test_manage_district.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index b3de1c3342..468b468e69 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_remove_cluster.py b/tests/variantstudy/model/command/test_remove_cluster.py index bf8db68e03..2b30616a0a 100644 --- a/tests/variantstudy/model/command/test_remove_cluster.py +++ b/tests/variantstudy/model/command/test_remove_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_remove_link.py b/tests/variantstudy/model/command/test_remove_link.py index 305d2f976f..832d8db20b 100644 --- a/tests/variantstudy/model/command/test_remove_link.py +++ b/tests/variantstudy/model/command/test_remove_link.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_remove_renewables_cluster.py b/tests/variantstudy/model/command/test_remove_renewables_cluster.py index a03308e5b3..c2152a08b3 100644 --- a/tests/variantstudy/model/command/test_remove_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_remove_renewables_cluster.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_remove_st_storage.py b/tests/variantstudy/model/command/test_remove_st_storage.py index e58db6db55..01c74235dd 100644 --- a/tests/variantstudy/model/command/test_remove_st_storage.py +++ b/tests/variantstudy/model/command/test_remove_st_storage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_replace_matrix.py b/tests/variantstudy/model/command/test_replace_matrix.py index 95c21eac94..5f676ded29 100644 --- a/tests/variantstudy/model/command/test_replace_matrix.py +++ b/tests/variantstudy/model/command/test_replace_matrix.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_update_comments.py b/tests/variantstudy/model/command/test_update_comments.py index 1991e0f179..0bdb91e307 100644 --- a/tests/variantstudy/model/command/test_update_comments.py +++ b/tests/variantstudy/model/command/test_update_comments.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_update_config.py b/tests/variantstudy/model/command/test_update_config.py index ceaff693c2..1857602cb2 100644 --- a/tests/variantstudy/model/command/test_update_config.py +++ b/tests/variantstudy/model/command/test_update_config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/command/test_update_rawfile.py b/tests/variantstudy/model/command/test_update_rawfile.py index 8081698907..0aa3a4477a 100644 --- a/tests/variantstudy/model/command/test_update_rawfile.py +++ b/tests/variantstudy/model/command/test_update_rawfile.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/model/test_variant_model.py b/tests/variantstudy/model/test_variant_model.py index e2b607a30e..457a41ea67 100644 --- a/tests/variantstudy/model/test_variant_model.py +++ b/tests/variantstudy/model/test_variant_model.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index e031d07e1e..c4406b50da 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/test_utils.py b/tests/variantstudy/test_utils.py index c47c50aa25..525211ef82 100644 --- a/tests/variantstudy/test_utils.py +++ b/tests/variantstudy/test_utils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/variantstudy/test_variant_command_extractor.py b/tests/variantstudy/test_variant_command_extractor.py index 45665cf5cf..ff1a1c74ca 100644 --- a/tests/variantstudy/test_variant_command_extractor.py +++ b/tests/variantstudy/test_variant_command_extractor.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/worker/__init__.py b/tests/worker/__init__.py index 058c6b221a..f477ac830c 100644 --- a/tests/worker/__init__.py +++ b/tests/worker/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/worker/test_archive_worker.py b/tests/worker/test_archive_worker.py index 12c42ec699..72ff154c7c 100644 --- a/tests/worker/test_archive_worker.py +++ b/tests/worker/test_archive_worker.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/worker/test_archive_worker_service.py b/tests/worker/test_archive_worker_service.py index 65b3971baf..578e0af107 100644 --- a/tests/worker/test_archive_worker_service.py +++ b/tests/worker/test_archive_worker_service.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/worker/test_worker.py b/tests/worker/test_worker.py index 72b9c4ac00..3388b07730 100644 --- a/tests/worker/test_worker.py +++ b/tests/worker/test_worker.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # diff --git a/tests/xml_compare.py b/tests/xml_compare.py index 1f2761737f..cb44543a3b 100644 --- a/tests/xml_compare.py +++ b/tests/xml_compare.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) +# Copyright (c) 2025, RTE (https://www.rte-france.com) # # See AUTHORS.txt # From 3385369df766b1211ced39710586f5deaaabc8d6 Mon Sep 17 00:00:00 2001 From: Anis Date: Fri, 17 Jan 2025 14:05:04 +0100 Subject: [PATCH 03/11] feat(ui-api, studies): optimize studies listing (#2288) Co-authored-by: Anis SMAIL Co-authored-by: maugde <167874615+maugde@users.noreply.github.com> Co-authored-by: MartinBelthle Co-authored-by: Sylvain Leclerc --- antarest/study/model.py | 22 +- antarest/study/storage/explorer_service.py | 39 ++- antarest/study/storage/utils.py | 12 + antarest/study/web/explorer_blueprint.py | 6 +- .../explorer_blueprint/test_explorer.py | 10 +- .../storage/business/test_explorer_service.py | 19 +- webapp/public/locales/en/main.json | 5 + webapp/public/locales/fr/main.json | 6 +- webapp/src/components/App/Studies/SideNav.tsx | 2 +- .../App/Studies/StudiesList/index.tsx | 46 ++- .../src/components/App/Studies/StudyTree.tsx | 77 ----- .../App/Studies/StudyTree/StudyTreeNode.tsx | 62 ++++ .../Studies/StudyTree/__test__/fixtures.ts | 322 ++++++++++++++++++ .../Studies/StudyTree/__test__/utils.test.ts | 125 +++++++ .../App/Studies/StudyTree/index.tsx | 154 +++++++++ .../components/App/Studies/StudyTree/types.ts | 34 ++ .../components/App/Studies/StudyTree/utils.ts | 281 +++++++++++++++ webapp/src/components/App/Studies/utils.ts | 64 ---- webapp/src/redux/ducks/studies.ts | 2 +- webapp/src/redux/selectors.ts | 6 +- webapp/src/services/api/study.ts | 32 +- 21 files changed, 1135 insertions(+), 191 deletions(-) delete mode 100644 webapp/src/components/App/Studies/StudyTree.tsx create mode 100644 webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx create mode 100644 webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts create mode 100644 webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts create mode 100644 webapp/src/components/App/Studies/StudyTree/index.tsx create mode 100644 webapp/src/components/App/Studies/StudyTree/types.ts create mode 100644 webapp/src/components/App/Studies/StudyTree/utils.ts delete mode 100644 webapp/src/components/App/Studies/utils.ts diff --git a/antarest/study/model.py b/antarest/study/model.py index cc8792ee99..d2ff8b97b9 100644 --- a/antarest/study/model.py +++ b/antarest/study/model.py @@ -19,7 +19,7 @@ from pathlib import Path from antares.study.version import StudyVersion -from pydantic import BeforeValidator, PlainSerializer, field_validator +from pydantic import BeforeValidator, ConfigDict, Field, PlainSerializer, computed_field, field_validator from sqlalchemy import ( # type: ignore Boolean, Column, @@ -334,7 +334,7 @@ class StudyFolder: groups: t.List[Group] -class NonStudyFolder(AntaresBaseModel): +class NonStudyFolderDTO(AntaresBaseModel): """ DTO used by the explorer to list directories that aren't studies directory, this will be usefull for the front so the user can navigate in the hierarchy @@ -343,6 +343,24 @@ class NonStudyFolder(AntaresBaseModel): path: Path workspace: str name: str + has_children: bool = Field( + alias="hasChildren", + ) # true when has at least one non-study-folder children + + model_config = ConfigDict(populate_by_name=True) + + @computed_field(alias="parentPath") + def parent_path(self) -> Path: + """ + This computed field is convenient for the front. + + This field is also aliased as parentPath to match the front-end naming convention. + + Returns: the parent path of the current directory. Starting with the workspace as a root directory (we want /workspafe/folder1/sub... and not workspace/folder1/fsub... ). + """ + workspace_path = Path(f"/{self.workspace}") + full_path = workspace_path.joinpath(self.path) + return full_path.parent class WorkspaceMetadata(AntaresBaseModel): diff --git a/antarest/study/storage/explorer_service.py b/antarest/study/storage/explorer_service.py index 30ff6ffcb6..d312f84552 100644 --- a/antarest/study/storage/explorer_service.py +++ b/antarest/study/storage/explorer_service.py @@ -14,12 +14,12 @@ from typing import List from antarest.core.config import Config -from antarest.study.model import DEFAULT_WORKSPACE_NAME, NonStudyFolder, WorkspaceMetadata +from antarest.study.model import DEFAULT_WORKSPACE_NAME, NonStudyFolderDTO, WorkspaceMetadata from antarest.study.storage.utils import ( get_folder_from_workspace, get_workspace_from_config, - is_study_folder, - should_ignore_folder_for_scan, + has_non_study_folder, + is_non_study_folder, ) logger = logging.getLogger(__name__) @@ -33,7 +33,7 @@ def list_dir( self, workspace_name: str, workspace_directory_path: str, - ) -> List[NonStudyFolder]: + ) -> List[NonStudyFolderDTO]: """ return a list of all directories under workspace_directory_path, that aren't studies. """ @@ -41,18 +41,27 @@ def list_dir( directory_path = get_folder_from_workspace(workspace, workspace_directory_path) directories = [] try: + # this block is skipped in case of permission error children = list(directory_path.iterdir()) - except PermissionError: - children = [] # we don't want to try to read folders we can't access - for child in children: - if ( - child.is_dir() - and not is_study_folder(child) - and not should_ignore_folder_for_scan(child, workspace.filter_in, workspace.filter_out) - ): - # we don't want to expose the full absolute path on the server - child_rel_path = child.relative_to(workspace.path) - directories.append(NonStudyFolder(path=child_rel_path, workspace=workspace_name, name=child.name)) + for child in children: + # if we can't access one child we skip it + try: + if is_non_study_folder(child, workspace.filter_in, workspace.filter_out): + # we don't want to expose the full absolute path on the server + child_rel_path = child.relative_to(workspace.path) + has_children = has_non_study_folder(child, workspace.filter_in, workspace.filter_out) + directories.append( + NonStudyFolderDTO( + path=child_rel_path, + workspace=workspace_name, + name=child.name, + has_children=has_children, + ) + ) + except PermissionError as e: + logger.warning(f"Permission error while accessing {child} or one of its children: {e}") + except PermissionError as e: + logger.warning(f"Permission error while listing {directory_path}: {e}") return directories def list_workspaces( diff --git a/antarest/study/storage/utils.py b/antarest/study/storage/utils.py index 639f9a6495..e8336cc1d1 100644 --- a/antarest/study/storage/utils.py +++ b/antarest/study/storage/utils.py @@ -495,3 +495,15 @@ def should_ignore_folder_for_scan(path: Path, filter_in: t.List[str], filter_out and any(re.search(regex, path.name) for regex in filter_in) and not any(re.search(regex, path.name) for regex in filter_out) ) + + +def has_non_study_folder(path: Path, filter_in: t.List[str], filter_out: t.List[str]) -> bool: + return any(is_non_study_folder(sub_path, filter_in, filter_out) for sub_path in path.iterdir()) + + +def is_non_study_folder(path: Path, filter_in: t.List[str], filter_out: t.List[str]) -> bool: + if is_study_folder(path): + return False + if should_ignore_folder_for_scan(path, filter_in, filter_out): + return False + return True diff --git a/antarest/study/web/explorer_blueprint.py b/antarest/study/web/explorer_blueprint.py index 2c8065fbd2..5b714aff91 100644 --- a/antarest/study/web/explorer_blueprint.py +++ b/antarest/study/web/explorer_blueprint.py @@ -18,7 +18,7 @@ from antarest.core.config import Config from antarest.core.jwt import JWTUser from antarest.login.auth import Auth -from antarest.study.model import NonStudyFolder, WorkspaceMetadata +from antarest.study.model import NonStudyFolderDTO, WorkspaceMetadata from antarest.study.storage.explorer_service import Explorer logger = logging.getLogger(__name__) @@ -40,13 +40,13 @@ def create_explorer_routes(config: Config, explorer: Explorer) -> APIRouter: @bp.get( "/explorer/{workspace}/_list_dir", summary="For a given directory, list sub directories that aren't studies", - response_model=List[NonStudyFolder], + response_model=List[NonStudyFolderDTO], ) def list_dir( workspace: str, path: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> List[NonStudyFolder]: + ) -> List[NonStudyFolderDTO]: """ Endpoint to list sub directories of a given directory Args: diff --git a/tests/integration/explorer_blueprint/test_explorer.py b/tests/integration/explorer_blueprint/test_explorer.py index 7463602cff..70f554cbf8 100644 --- a/tests/integration/explorer_blueprint/test_explorer.py +++ b/tests/integration/explorer_blueprint/test_explorer.py @@ -14,7 +14,7 @@ import pytest from starlette.testclient import TestClient -from antarest.study.model import NonStudyFolder, WorkspaceMetadata +from antarest.study.model import NonStudyFolderDTO, WorkspaceMetadata BAD_REQUEST_STATUS_CODE = 400 # Status code for directory listing with invalid parameters @@ -65,13 +65,9 @@ def test_explorer(client: TestClient, admin_access_token: str, study_tree: Path) ) res.raise_for_status() directories_res = res.json() - directories_res = [NonStudyFolder(**d) for d in directories_res] + directories_res = [NonStudyFolderDTO(**d) for d in directories_res] directorires_expected = [ - NonStudyFolder( - path=Path("folder/trash"), - workspace="ext", - name="trash", - ) + NonStudyFolderDTO(path=Path("folder/trash"), workspace="ext", name="trash", hasChildren=False) ] assert directories_res == directorires_expected diff --git a/tests/storage/business/test_explorer_service.py b/tests/storage/business/test_explorer_service.py index fb150aad1c..60f5e20f1d 100644 --- a/tests/storage/business/test_explorer_service.py +++ b/tests/storage/business/test_explorer_service.py @@ -16,7 +16,7 @@ import pytest from antarest.core.config import Config, StorageConfig, WorkspaceConfig -from antarest.study.model import DEFAULT_WORKSPACE_NAME, NonStudyFolder, WorkspaceMetadata +from antarest.study.model import DEFAULT_WORKSPACE_NAME, NonStudyFolderDTO, WorkspaceMetadata from antarest.study.storage.explorer_service import Explorer @@ -87,7 +87,7 @@ def test_list_dir_empty_string(config_scenario_a: Config): # We don't want to see the .git folder or the $RECYCLE.BIN as they were ignored in the workspace config assert len(result) == 1 - assert result[0] == NonStudyFolder(path=Path("folder"), workspace="diese", name="folder") + assert result[0] == NonStudyFolderDTO(path=Path("folder"), workspace="diese", name="folder", has_children=True) @pytest.mark.unit_test @@ -97,9 +97,18 @@ def test_list_dir_several_subfolders(config_scenario_a: Config): assert len(result) == 3 folder_path = Path("folder") - assert NonStudyFolder(path=(folder_path / "subfolder1"), workspace="diese", name="subfolder1") in result - assert NonStudyFolder(path=(folder_path / "subfolder2"), workspace="diese", name="subfolder2") in result - assert NonStudyFolder(path=(folder_path / "subfolder3"), workspace="diese", name="subfolder3") in result + assert ( + NonStudyFolderDTO(path=(folder_path / "subfolder1"), workspace="diese", name="subfolder1", has_children=False) + in result + ) + assert ( + NonStudyFolderDTO(path=(folder_path / "subfolder2"), workspace="diese", name="subfolder2", has_children=False) + in result + ) + assert ( + NonStudyFolderDTO(path=(folder_path / "subfolder3"), workspace="diese", name="subfolder3", has_children=False) + in result + ) @pytest.mark.unit_test diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 7c6a13307a..0368e65fcc 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -643,7 +643,9 @@ "studies.studylaunched": "{{studyname}} launched!", "studies.copySuffix": "Copy", "studies.filters.strictfolder": "Show only direct folder children", + "studies.filters.showChildrens": "Show all children", "studies.scanFolder": "Scan folder", + "studies.recursiveScan": "Recursive scan", "studies.moveStudy": "Move", "studies.movefolderplaceholder": "Path separated by '/'", "studies.importcopy": "Copy to database", @@ -675,6 +677,9 @@ "studies.exportOutputFilter": "Export filtered output", "studies.selectOutput": "Select an output", "studies.variant": "Variant", + "studies.tree.error.failToFetchWorkspace": "Failed to load workspaces", + "studies.tree.error.failToFetchFolder": "Failed to load subfolders for {{path}}", + "studies.tree.fetchFolderLoading": "Loading...", "variants.createNewVariant": "Create new variant", "variants.newVariant": "New variant", "variants.newCommand": "Add new command", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 395ed91e7e..ad6ba562bf 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -643,7 +643,9 @@ "studies.studylaunched": "{{studyname}} lancé(s) !", "studies.copySuffix": "Copie", "studies.filters.strictfolder": "Afficher uniquement les descendants directs", + "studies.filters.showChildrens": "Voir les sous-dossiers", "studies.scanFolder": "Scanner le dossier", + "studies.recursiveScan": "Scan récursif", "studies.moveStudy": "Déplacer", "studies.movefolderplaceholder": "Chemin séparé par des '/'", "studies.importcopy": "Copier en base", @@ -674,7 +676,9 @@ "studies.exportOutput": "Exporter une sortie", "studies.exportOutputFilter": "Exporter une sortie filtrée", "studies.selectOutput": "Selectionnez une sortie", - "studies.variant": "Variante", + "studies.tree.error.failToFetchWorkspace": "Échec lors de la récupération de l'espace de travail", + "studies.tree.error.failToFetchFolder": "Échec lors de la récupération des sous dossiers de {{path}}", + "studies.tree.fetchFolderLoading": "Chargement...", "variants.createNewVariant": "Créer une nouvelle variante", "variants.newVariant": "Nouvelle variante", "variants.newCommand": "Ajouter une nouvelle commande", diff --git a/webapp/src/components/App/Studies/SideNav.tsx b/webapp/src/components/App/Studies/SideNav.tsx index c0009ce7d2..b966f27fd6 100644 --- a/webapp/src/components/App/Studies/SideNav.tsx +++ b/webapp/src/components/App/Studies/SideNav.tsx @@ -16,7 +16,7 @@ import { useNavigate } from "react-router"; import { Box, Typography, List, ListItem, ListItemText } from "@mui/material"; import { useTranslation } from "react-i18next"; import { STUDIES_SIDE_NAV_WIDTH } from "../../../theme"; -import StudyTree from "./StudyTree"; +import StudyTree from "@/components/App/Studies/StudyTree"; import useAppSelector from "../../../redux/hooks/useAppSelector"; import { getFavoriteStudies } from "../../../redux/selectors"; diff --git a/webapp/src/components/App/Studies/StudiesList/index.tsx b/webapp/src/components/App/Studies/StudiesList/index.tsx index 6d90785471..89326dfff9 100644 --- a/webapp/src/components/App/Studies/StudiesList/index.tsx +++ b/webapp/src/components/App/Studies/StudiesList/index.tsx @@ -33,7 +33,8 @@ import AutoSizer from "react-virtualized-auto-sizer"; import HomeIcon from "@mui/icons-material/Home"; import ArrowUpwardIcon from "@mui/icons-material/ArrowUpward"; import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward"; -import FolderOffIcon from "@mui/icons-material/FolderOff"; +import FolderIcon from "@mui/icons-material/Folder"; +import AccountTreeIcon from "@mui/icons-material/AccountTree"; import RadarIcon from "@mui/icons-material/Radar"; import { FixedSizeGrid, GridOnScrollProps } from "react-window"; import { v4 as uuidv4 } from "uuid"; @@ -61,6 +62,7 @@ import RefreshButton from "../RefreshButton"; import { scanFolder } from "../../../../services/api/study"; import useEnqueueErrorSnackbar from "../../../../hooks/useEnqueueErrorSnackbar"; import ConfirmationDialog from "../../../common/dialogs/ConfirmationDialog"; +import CheckBoxFE from "@/components/common/fieldEditors/CheckBoxFE"; const CARD_TARGET_WIDTH = 500; const CARD_HEIGHT = 250; @@ -87,7 +89,8 @@ function StudiesList(props: StudiesListProps) { const sortLabelId = useRef(uuidv4()).current; const [selectedStudies, setSelectedStudies] = useState([]); const [selectionMode, setSelectionMode] = useState(false); - const [confirmFolderScan, setConfirmFolderScan] = useState(false); + const [confirmFolderScan, setConfirmFolderScan] = useState(false); + const [isRecursiveScan, setIsRecursiveScan] = useState(false); useEffect(() => { setFolderList(folder.split("/")); @@ -156,13 +159,18 @@ function StudiesList(props: StudiesListProps) { try { // Remove "/root" from the path const folder = folderList.slice(1).join("/"); - await scanFolder(folder); + await scanFolder(folder, isRecursiveScan); setConfirmFolderScan(false); + setIsRecursiveScan(false); } catch (e) { enqueueErrorSnackbar(t("studies.error.scanFolder"), e as AxiosError); } }; + const handleRecursiveScan = () => { + setIsRecursiveScan(!isRecursiveScan); + }; + //////////////////////////////////////////////////////////////// // Utils //////////////////////////////////////////////////////////////// @@ -249,13 +257,21 @@ function StudiesList(props: StudiesListProps) { ({`${studyIds.length} ${t("global.studies").toLowerCase()}`}) - - - - - + + {strictFolderFilter ? ( + + + + + + ) : ( + + + + + + )} + {folder !== "root" && ( setConfirmFolderScan(true)}> @@ -266,12 +282,20 @@ function StudiesList(props: StudiesListProps) { {folder !== "root" && confirmFolderScan && ( setConfirmFolderScan(false)} + onCancel={() => { + setConfirmFolderScan(false); + setIsRecursiveScan(false); + }} onConfirm={handleFolderScan} alert="warning" open > {`${t("studies.scanFolder")} ${folder}?`} + )} diff --git a/webapp/src/components/App/Studies/StudyTree.tsx b/webapp/src/components/App/Studies/StudyTree.tsx deleted file mode 100644 index 7208caaec4..0000000000 --- a/webapp/src/components/App/Studies/StudyTree.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { StudyTreeNode } from "./utils"; -import useAppSelector from "../../../redux/hooks/useAppSelector"; -import { getStudiesTree, getStudyFilters } from "../../../redux/selectors"; -import useAppDispatch from "../../../redux/hooks/useAppDispatch"; -import { updateStudyFilters } from "../../../redux/ducks/studies"; -import TreeItemEnhanced from "../../common/TreeItemEnhanced"; -import { SimpleTreeView } from "@mui/x-tree-view/SimpleTreeView"; -import { getParentPaths } from "../../../utils/pathUtils"; -import * as R from "ramda"; - -function StudyTree() { - const folder = useAppSelector((state) => getStudyFilters(state).folder, R.T); - const studiesTree = useAppSelector(getStudiesTree); - const dispatch = useAppDispatch(); - - //////////////////////////////////////////////////////////////// - // Event Handlers - //////////////////////////////////////////////////////////////// - - const handleTreeItemClick = (itemId: string) => { - dispatch(updateStudyFilters({ folder: itemId })); - }; - - //////////////////////////////////////////////////////////////// - // JSX - //////////////////////////////////////////////////////////////// - - const buildTree = (children: StudyTreeNode[], parentId?: string) => { - return children.map((child) => { - const id = parentId ? `${parentId}/${child.name}` : child.name; - - return ( - handleTreeItemClick(id)} - > - {buildTree(child.children, id)} - - ); - }); - }; - - return ( - - {buildTree([studiesTree])} - - ); -} - -export default StudyTree; diff --git a/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx b/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx new file mode 100644 index 0000000000..9b2d6cdff6 --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { memo } from "react"; +import { StudyTreeNodeProps } from "./types"; +import TreeItemEnhanced from "@/components/common/TreeItemEnhanced"; +import { t } from "i18next"; + +export default memo(function StudyTreeNode({ + studyTreeNode, + parentId, + onNodeClick, +}: StudyTreeNodeProps) { + const isLoadingFolder = + studyTreeNode.hasChildren && studyTreeNode.children.length === 0; + const id = parentId + ? `${parentId}/${studyTreeNode.name}` + : studyTreeNode.name; + + if (isLoadingFolder) { + return ( + onNodeClick(id, studyTreeNode)} + > + + + ); + } + + return ( + onNodeClick(id, studyTreeNode)} + > + {studyTreeNode.children.map((child) => ( + + ))} + + ); +}); diff --git a/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts b/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts new file mode 100644 index 0000000000..1fe3237182 --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts @@ -0,0 +1,322 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { StudyMetadata, StudyType } from "@/common/types"; + +function createStudyMetadata(folder: string, workspace: string): StudyMetadata { + return { + id: "test-study-id", + name: "Test Study", + creationDate: "2024-01-01", + modificationDate: "2024-01-02", + owner: { id: 1, name: "Owner 1" }, + type: StudyType.RAW, + version: "v1", + workspace, + managed: false, + archived: false, + groups: [], + folder, + publicMode: "NONE", + }; +} + +export const FIXTURES = { + basicTree: { + name: "Basic tree with single level", + studyTree: { + name: "Root", + path: "/", + children: [ + { name: "a", path: "/a", children: [] }, + { name: "b", path: "/b", children: [] }, + ], + }, + folders: [ + { + name: "folder1", + path: "folder1", + workspace: "a", + parentPath: "/a", + }, + ], + expected: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "folder1", path: "/a/folder1", children: [] }], + }, + { name: "b", path: "/b", children: [] }, + ], + }, + }, + hasChildren: { + name: "Case where a folder is already in the tree, maybe because he has studies, but now the api return that the folder also contains non study folder", + studyTree: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "folder1", path: "/a/folder1", children: [] }], + }, + { name: "b", path: "/b", children: [] }, + ], + }, + folders: [ + { + name: "folder1", + path: "folder1", + workspace: "a", + parentPath: "/a", + hasChildren: true, + }, + ], + expected: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [ + { + name: "folder1", + path: "/a/folder1", + children: [], + hasChildren: true, + }, + ], + }, + { name: "b", path: "/b", children: [] }, + ], + }, + }, + nestedTree: { + name: "Nested tree structure", + studyTree: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "suba", path: "/a/suba", children: [] }], + }, + ], + }, + folders: [ + { + name: "folder1", + path: "suba/folder1", + workspace: "a", + parentPath: "/a/suba", + }, + ], + expected: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [ + { + name: "suba", + path: "/a/suba", + children: [ + { name: "folder1", path: "/a/suba/folder1", children: [] }, + ], + }, + ], + }, + ], + }, + }, + duplicateCase: { + name: "Tree with potential duplicates", + studyTree: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "folder1", path: "/a/folder1", children: [] }], + }, + ], + }, + folders: [ + { + name: "folder1", + path: "/folder1", + workspace: "a", + parentPath: "/a", + }, + ], + expected: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "folder1", path: "/a/folder1", children: [] }], + }, + ], + }, + }, + multipleFolders: { + name: "Multiple folders merge", + studyTree: { + name: "Root", + path: "/", + children: [{ name: "a", path: "/a", children: [] }], + }, + folders: [ + { + name: "folder1", + path: "/folder1", + workspace: "a", + parentPath: "/a", + }, + { + name: "folder2", + path: "/folder2", + workspace: "a", + parentPath: "/a", + }, + { + name: "folder3", + path: "/folder3", + workspace: "a", + parentPath: "/a", + hasChildren: true, + }, + ], + expected: { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [ + { name: "folder1", path: "/a/folder1", children: [] }, + { name: "folder2", path: "/a/folder2", children: [] }, + { + name: "folder3", + path: "/a/folder3", + children: [], + hasChildren: true, + }, + ], + }, + ], + }, + }, +}; + +export const FIXTURES_BUILD_STUDY_TREE = { + simpleCase: { + name: "Basic case", + studies: [createStudyMetadata("studies/team1/myFolder", "workspace")], + expected: { + name: "root", + path: "", + children: [ + { + name: "workspace", + path: "/workspace", + children: [ + { + name: "studies", + path: "/workspace/studies", + children: [ + { + name: "team1", + path: "/workspace/studies/team1", + children: [], + }, + ], + }, + ], + }, + ], + }, + }, + multiplieStudies: { + name: "Multiple studies case", + studies: [ + createStudyMetadata("studies/team1/study", "workspace"), + createStudyMetadata("studies/team2/study", "workspace"), + createStudyMetadata("studies/team3/study", "workspace"), + createStudyMetadata("archives/team4/study", "workspace2"), + ], + expected: { + name: "root", + path: "", + children: [ + { + name: "workspace", + path: "/workspace", + children: [ + { + name: "studies", + path: "/workspace/studies", + children: [ + { + name: "team1", + path: "/workspace/studies/team1", + children: [], + }, + { + name: "team2", + path: "/workspace/studies/team2", + children: [], + }, + { + name: "team3", + path: "/workspace/studies/team3", + children: [], + }, + ], + }, + ], + }, + { + name: "workspace2", + path: "/workspace2", + children: [ + { + name: "archives", + path: "/workspace2/archives", + children: [ + { + name: "team4", + path: "/workspace2/archives/team4", + children: [], + }, + ], + }, + ], + }, + ], + }, + }, +}; diff --git a/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts b/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts new file mode 100644 index 0000000000..0578313bb1 --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { FIXTURES, FIXTURES_BUILD_STUDY_TREE } from "./fixtures"; +import { + buildStudyTree, + insertFoldersIfNotExist, + insertWorkspacesIfNotExist, +} from "../utils"; +import { NonStudyFolderDTO, StudyTreeNode } from "../types"; + +describe("StudyTree Utils", () => { + describe("mergeStudyTreeAndFolders", () => { + test.each(Object.values(FIXTURES))( + "$name", + ({ studyTree, folders, expected }) => { + const result = insertFoldersIfNotExist(studyTree, folders); + expect(result).toEqual(expected); + }, + ); + + test("should handle empty study tree", () => { + const emptyTree: StudyTreeNode = { + name: "Root", + path: "/", + children: [], + }; + const result = insertFoldersIfNotExist(emptyTree, []); + expect(result).toEqual(emptyTree); + }); + + test("should handle empty folders array", () => { + const tree: StudyTreeNode = { + name: "Root", + path: "/", + children: [{ name: "a", path: "/a", children: [] }], + }; + const result = insertFoldersIfNotExist(tree, []); + expect(result).toEqual(tree); + }); + + test("should handle invalid parent paths", () => { + const tree: StudyTreeNode = { + name: "Root", + path: "/", + children: [{ name: "a", path: "/a", children: [] }], + }; + const invalidFolder: NonStudyFolderDTO = { + name: "invalid", + path: "/invalid", + workspace: "nonexistent", + parentPath: "/nonexistent", + }; + const result = insertFoldersIfNotExist(tree, [invalidFolder]); + expect(result).toEqual(tree); + }); + + test("should handle empty workspaces", () => { + const tree: StudyTreeNode = { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "suba", path: "/a/suba", children: [] }], + }, + ], + }; + const workspaces: string[] = []; + const result = insertWorkspacesIfNotExist(tree, workspaces); + expect(result).toEqual(tree); + }); + + test("should merge workspaces", () => { + const tree: StudyTreeNode = { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "suba", path: "/a/suba", children: [] }], + }, + ], + }; + const expected: StudyTreeNode = { + name: "Root", + path: "/", + children: [ + { + name: "a", + path: "/a", + children: [{ name: "suba", path: "/a/suba", children: [] }], + }, + { name: "workspace1", path: "/workspace1", children: [] }, + { name: "workspace2", path: "/workspace2", children: [] }, + ], + }; + + const workspaces = ["a", "workspace1", "workspace2"]; + const result = insertWorkspacesIfNotExist(tree, workspaces); + expect(result).toEqual(expected); + }); + + test.each(Object.values(FIXTURES_BUILD_STUDY_TREE))( + "$name", + ({ studies, expected }) => { + const result = buildStudyTree(studies); + expect(result).toEqual(expected); + }, + ); + }); +}); diff --git a/webapp/src/components/App/Studies/StudyTree/index.tsx b/webapp/src/components/App/Studies/StudyTree/index.tsx new file mode 100644 index 0000000000..659b05d906 --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/index.tsx @@ -0,0 +1,154 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { StudyTreeNode } from "./types"; +import useAppSelector from "../../../../redux/hooks/useAppSelector"; +import { getStudiesTree, getStudyFilters } from "../../../../redux/selectors"; +import useAppDispatch from "../../../../redux/hooks/useAppDispatch"; +import { updateStudyFilters } from "../../../../redux/ducks/studies"; +import { SimpleTreeView } from "@mui/x-tree-view/SimpleTreeView"; +import { getParentPaths } from "../../../../utils/pathUtils"; +import * as R from "ramda"; +import { useState } from "react"; +import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; +import useUpdateEffectOnce from "@/hooks/useUpdateEffectOnce"; +import { fetchAndInsertSubfolders, fetchAndInsertWorkspaces } from "./utils"; +import { useTranslation } from "react-i18next"; +import { toError } from "@/utils/fnUtils"; +import StudyTreeNodeComponent from "./StudyTreeNode"; + +function StudyTree() { + const initialStudiesTree = useAppSelector(getStudiesTree); + const [studiesTree, setStudiesTree] = useState(initialStudiesTree); + const folder = useAppSelector((state) => getStudyFilters(state).folder, R.T); + const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); + const dispatch = useAppDispatch(); + const [t] = useTranslation(); + + // Initialize folders once we have the tree + // we use useUpdateEffectOnce because at first render initialStudiesTree isn't initialized + useUpdateEffectOnce(() => { + // be carefull to pass initialStudiesTree and not studiesTree at rootNode parameter + // otherwise we'll lose the default workspace + updateTree("root", initialStudiesTree, initialStudiesTree); + }, [initialStudiesTree]); + + /** + * This function is called at the initialization of the component and when the user clicks on a folder. + * + * The study tree is built from the studies in the database. There's a scan process that run on the server + * to update continuously the studies in the database. + * + * However this process can take a long time, and the user shouldn't wait for hours before he can see a study he knows is already uploaded. + * + * Instead of relying on the scan process to update the tree, we'll allow the user to walk into the tree and run a scan process only when he needs to. + * + * To enable this, we'll fetch the subfolders of a folder when the user clicks on it using the explorer API. + * + * @param itemId - The id of the item clicked + * @param rootNode - The root node of the tree + * @param selectedNode - The node of the item clicked + */ + async function updateTree( + itemId: string, + rootNode: StudyTreeNode, + selectedNode: StudyTreeNode, + ) { + if (selectedNode.path.startsWith("/default")) { + // we don't update the tree if the user clicks on the default workspace + // api doesn't allow to fetch the subfolders of the default workspace + return; + } + // Bug fix : this function used to take only the itemId and the selectedNode, and we used to initialize treeAfterWorkspacesUpdate + // with the studiesTree closure, referencing directly the state, like this : treeAfterWorkspacesUpdate = studiesTree; + // The thing is at the first render studiesTree was empty. + // This made updateTree override studiesTree with an empty tree during the first call. This caused a bug where we didn't see the default + // workspace in the UI, as it was overridden by an empty tree at start and then the get workspaces api never returns the default workspace. + // Now we don't use the closure anymore, we pass the root tree as a parameter. Thus at the first call of updateTree, we pass initialStudiesTree. + // You may think why we don't just capture initialStudiesTree then, it's because in the following call we need to pass studiesTree. + let treeAfterWorkspacesUpdate = rootNode; + + let pathsToFetch: string[] = []; + // If the user clicks on the root folder, we fetch the workspaces and insert them. + // Then we fetch the direct subfolders of the workspaces. + if (itemId === "root") { + try { + treeAfterWorkspacesUpdate = await fetchAndInsertWorkspaces(rootNode); + } catch (error) { + enqueueErrorSnackbar( + t("studies.tree.error.failToFetchWorkspace"), + toError(error), + ); + } + pathsToFetch = treeAfterWorkspacesUpdate.children + .filter((t) => t.name !== "default") // We don't fetch the default workspace subfolders, api don't allow it + .map((child) => `root${child.path}`); + } else { + // If the user clicks on a folder, we add the path of the clicked folder to the list of paths to fetch. + pathsToFetch = [`root${selectedNode.path}`]; + } + + const [treeAfterSubfoldersUpdate, failedPath] = + await fetchAndInsertSubfolders(pathsToFetch, treeAfterWorkspacesUpdate); + if (failedPath.length > 0) { + enqueueErrorSnackbar( + t("studies.tree.error.failToFetchFolder", { + path: failedPath.join(" "), + interpolation: { escapeValue: false }, + }), + "", + ); + } + setStudiesTree(treeAfterSubfoldersUpdate); + } + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleTreeItemClick = async ( + itemId: string, + studyTreeNode: StudyTreeNode, + ) => { + dispatch(updateStudyFilters({ folder: itemId })); + updateTree(itemId, studiesTree, studyTreeNode); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + + + ); +} + +export default StudyTree; diff --git a/webapp/src/components/App/Studies/StudyTree/types.ts b/webapp/src/components/App/Studies/StudyTree/types.ts new file mode 100644 index 0000000000..5a67d65627 --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/types.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export interface StudyTreeNode { + name: string; + path: string; + children: StudyTreeNode[]; + hasChildren?: boolean; +} + +export interface NonStudyFolderDTO { + name: string; + path: string; + workspace: string; + parentPath: string; + hasChildren?: boolean; +} + +export interface StudyTreeNodeProps { + studyTreeNode: StudyTreeNode; + parentId: string; + onNodeClick: (id: string, node: StudyTreeNode) => void; +} diff --git a/webapp/src/components/App/Studies/StudyTree/utils.ts b/webapp/src/components/App/Studies/StudyTree/utils.ts new file mode 100644 index 0000000000..4d1132d79b --- /dev/null +++ b/webapp/src/components/App/Studies/StudyTree/utils.ts @@ -0,0 +1,281 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import * as api from "../../../../services/api/study"; +import { StudyMetadata } from "../../../../common/types"; +import { StudyTreeNode, NonStudyFolderDTO } from "./types"; + +/** + * Builds a tree structure from a list of study metadata. + * + * @param studies - Array of study metadata objects. + * @returns A tree structure representing the studies. + */ +export function buildStudyTree(studies: StudyMetadata[]) { + const tree: StudyTreeNode = { + name: "root", + children: [], + path: "", + }; + + for (const study of studies) { + const path = + typeof study.folder === "string" + ? [study.workspace, ...study.folder.split("/").filter(Boolean)] + : [study.workspace]; + + let current = tree; + + for (let i = 0; i < path.length; i++) { + // Skip the last folder, as it represents the study itself + if (i === path.length - 1) { + break; + } + + const folderName = path[i]; + let child = current.children.find((child) => child.name === folderName); + + if (!child) { + child = { + name: folderName, + children: [], + path: current.path + ? `${current.path}/${folderName}` + : `/${folderName}`, + }; + + current.children.push(child); + } + + current = child; + } + } + + return tree; +} + +/** + * Add a folder that was returned by the explorer into the study tree view. + * + * This function doesn't mutate the tree, it returns a new tree with the folder inserted. + * + * If the folder is already in the tree, the tree returnred will be equal to the tree given to the function. + * + * @param studiesTree study tree to insert the folder into + * @param folder folder to inert into the tree + * @returns study tree with the folder inserted if it wasn't already there. + * New branch is created if it contain the folder otherwise the branch is left unchanged. + */ +function insertFolderIfNotExist( + studiesTree: StudyTreeNode, + folder: NonStudyFolderDTO, +): StudyTreeNode { + const currentNodePath = `${studiesTree.path}`; + // Early return if folder doesn't belong in this branch + if (!folder.parentPath.startsWith(currentNodePath)) { + return studiesTree; + } + + // direct child case + if (folder.parentPath == currentNodePath) { + const folderExists = studiesTree.children.find( + (child) => child.name === folder.name, + ); + if (folderExists) { + return { + ...studiesTree, + children: [ + ...studiesTree.children.filter((child) => child.name !== folder.name), + { + ...folderExists, + hasChildren: folder.hasChildren, + }, + ], + }; + } + // parent path is the same, but no folder with the same name at this level + return { + ...studiesTree, + children: [ + ...studiesTree.children, + { + path: `${folder.parentPath}/${folder.name}`, + name: folder.name, + children: [], + hasChildren: folder.hasChildren, + }, + ], + }; + } + + // not a direct child, but does belong to this branch so recursively walk though the tree + return { + ...studiesTree, + children: studiesTree.children.map((child) => + insertFolderIfNotExist(child, folder), + ), + }; +} + +/** + * Insert several folders in the study tree if they don't exist already in the tree. + * + * This function doesn't mutate the tree, it returns a new tree with the folders inserted + * + * The folders are inserted in the order they are given. + * + * @param studiesTree study tree to insert the folder into + * @param folders folders to inert into the tree + * @param studiesTree study tree to insert the folder into + * @param folder folder to inert into the tree + * @returns study tree with the folder inserted if it wasn't already there. + * New branch is created if it contain the folder otherwise the branch is left unchanged. + */ +export function insertFoldersIfNotExist( + studiesTree: StudyTreeNode, + folders: NonStudyFolderDTO[], +): StudyTreeNode { + return folders.reduce((tree, folder) => { + return insertFolderIfNotExist(tree, folder); + }, studiesTree); +} + +/** + * Call the explorer api to fetch the subfolders under the given path. + * + * @param path path of the subfolder to fetch, should sart with root, e.g. root/workspace/folder1 + * @returns list of subfolders under the given path + */ +async function fetchSubfolders(path: string): Promise { + if (path === "root") { + console.error("this function should not be called with path 'root'", path); + // Under root there're workspaces not subfolders + return []; + } + if (!path.startsWith("root/")) { + console.error("path here should start with root/ ", path); + return []; + } + // less than 2 parts means we're at the root level + const pathParts = path.split("/"); + if (pathParts.length < 2) { + console.error( + "this function should not be called with a path that has less than two com", + path, + ); + return []; + } + // path parts should be ["root", workspace, "folder1", ...] + const workspace = pathParts[1]; + const subPath = pathParts.slice(2).join("/"); + return api.getFolders(workspace, subPath); +} + +/** + * Fetch and insert the subfolders under the given paths into the study tree. + * + * This function is used to fill the study tree when the user clicks on a folder. + * + * Subfolders are inserted only if they don't exist already in the tree. + * + * This function doesn't mutate the tree, it returns a new tree with the subfolders inserted + * + * @param paths list of paths to fetch the subfolders for + * @param studiesTree study tree to insert the subfolders into + * @returns a tuple with study tree with the subfolders inserted if they weren't already there and path for which + * the fetch failed. + */ +export async function fetchAndInsertSubfolders( + paths: string[], + studiesTree: StudyTreeNode, +): Promise<[StudyTreeNode, string[]]> { + const results = await Promise.allSettled( + paths.map((path) => fetchSubfolders(path)), + ); + return results.reduce<[StudyTreeNode, string[]]>( + ([tree, failed], result, index) => { + if (result.status === "fulfilled") { + return [insertFoldersIfNotExist(tree, result.value), failed]; + } + console.error("Failed to load path:", paths[index], result.reason); + return [tree, [...failed, paths[index]]]; + }, + [studiesTree, []], + ); +} + +/** + * Insert a workspace into the study tree if it doesn't exist already. + * + * This function doesn't mutate the tree, it returns a new tree with the workspace inserted. + * + * @param workspace key of the workspace + * @param stydyTree study tree to insert the workspace into + * @returns study tree with the empty workspace inserted if it wasn't already there. + */ +function insertWorkspaceIfNotExist( + stydyTree: StudyTreeNode, + workspace: string, +): StudyTreeNode { + const emptyNode = { + name: workspace, + path: `/${workspace}`, + children: [], + }; + if (stydyTree.children.some((child) => child.name === workspace)) { + return stydyTree; + } + return { + ...stydyTree, + children: [...stydyTree.children, emptyNode], + }; +} + +/** + * Insert several workspaces into the study tree if they don't exist already in the tree. + * + * This function doesn't mutate the tree, it returns a new tree with the workspaces inserted. + * + * The workspaces are inserted in the order they are given. + * + * @param workspaces workspaces to insert into the tree + * @param stydyTree study tree to insert the workspaces into + * @returns study tree with the empty workspaces inserted if they weren't already there. + */ +export function insertWorkspacesIfNotExist( + stydyTree: StudyTreeNode, + workspaces: string[], +): StudyTreeNode { + return workspaces.reduce( + (acc, workspace) => insertWorkspaceIfNotExist(acc, workspace), + stydyTree, + ); +} + +/** + * Fetch and insert the workspaces into the study tree. + * + * Workspaces are inserted only if they don't exist already in the tree. + * + * This function doesn't mutate the tree, it returns a new tree with the workspaces inserted. + * + * @param studyTree study tree to insert the workspaces into + * @returns study tree with the workspaces inserted if they weren't already there. + */ +export async function fetchAndInsertWorkspaces( + studyTree: StudyTreeNode, +): Promise { + const workspaces = await api.getWorkspaces(); + return insertWorkspacesIfNotExist(studyTree, workspaces); +} diff --git a/webapp/src/components/App/Studies/utils.ts b/webapp/src/components/App/Studies/utils.ts deleted file mode 100644 index 3f2ff61564..0000000000 --- a/webapp/src/components/App/Studies/utils.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { StudyMetadata } from "../../../common/types"; - -export interface StudyTreeNode { - name: string; - path: string; - children: StudyTreeNode[]; -} - -/** - * Builds a tree structure from a list of study metadata. - * - * @param studies - Array of study metadata objects. - * @returns A tree structure representing the studies. - */ -export function buildStudyTree(studies: StudyMetadata[]) { - const tree: StudyTreeNode = { name: "root", children: [], path: "" }; - - for (const study of studies) { - const path = - typeof study.folder === "string" - ? [study.workspace, ...study.folder.split("/").filter(Boolean)] - : [study.workspace]; - - let current = tree; - - for (let i = 0; i < path.length; i++) { - // Skip the last folder, as it represents the study itself - if (i === path.length - 1) { - break; - } - - const folderName = path[i]; - let child = current.children.find((child) => child.name === folderName); - - if (!child) { - child = { - name: folderName, - children: [], - path: current.path ? `${current.path}/${folderName}` : folderName, - }; - - current.children.push(child); - } - - current = child; - } - } - - return tree; -} diff --git a/webapp/src/redux/ducks/studies.ts b/webapp/src/redux/ducks/studies.ts index 3b3e8b04d2..9b4603a23f 100644 --- a/webapp/src/redux/ducks/studies.ts +++ b/webapp/src/redux/ducks/studies.ts @@ -94,7 +94,7 @@ const initialState = studiesAdapter.getInitialState({ filters: { inputValue: "", folder: "root", - strictFolder: false, + strictFolder: true, managed: false, archived: false, variant: false, diff --git a/webapp/src/redux/selectors.ts b/webapp/src/redux/selectors.ts index 5fb8947726..99b6da20a0 100644 --- a/webapp/src/redux/selectors.ts +++ b/webapp/src/redux/selectors.ts @@ -23,7 +23,6 @@ import { StudyMetadata, UserDetailsDTO, } from "../common/types"; -import { buildStudyTree } from "../components/App/Studies/utils"; import { filterStudies, sortStudies } from "../utils/studiesUtils"; import { convertVersions, isGroupAdmin, isUserAdmin } from "../services/utils"; import { AppState } from "./ducks"; @@ -43,6 +42,7 @@ import { StudyMapsState, } from "./ducks/studyMaps"; import { makeLinkId } from "./utils"; +import { buildStudyTree } from "../components/App/Studies/StudyTree/utils"; // TODO resultEqualityCheck @@ -131,7 +131,9 @@ export const getStudyIdsFilteredAndSorted = createSelector( (studies) => studies.map((study) => study.id), ); -export const getStudiesTree = createSelector(getStudies, buildStudyTree); +export const getStudiesTree = createSelector(getStudies, (studies) => + buildStudyTree(studies), +); export const getStudyVersions = ( state: AppState, diff --git a/webapp/src/services/api/study.ts b/webapp/src/services/api/study.ts index 53d4a67925..6636b9d4b6 100644 --- a/webapp/src/services/api/study.ts +++ b/webapp/src/services/api/study.ts @@ -34,6 +34,11 @@ import { getConfig } from "../config"; import { convertStudyDtoToMetadata } from "../utils"; import { FileDownloadTask } from "./downloads"; import { StudyMapDistrict } from "../../redux/ducks/studyMaps"; +import { NonStudyFolderDTO } from "@/components/App/Studies/StudyTree/types"; + +interface Workspace { + name: string; +} const getStudiesRaw = async (): Promise> => { const res = await client.get(`/v1/studies`); @@ -48,6 +53,27 @@ export const getStudies = async (): Promise => { }); }; +export const getWorkspaces = async () => { + const res = await client.get( + `/v1/private/explorer/_list_workspaces`, + ); + return res.data.map((folder) => folder.name); +}; + +/** + * Call the explorer API to get the list of folders in a workspace + * + * @param workspace - workspace name + * @param folderPath - path starting from the workspace root (not including the workspace name) + * @returns list of folders that are not studies, under the given path + */ +export const getFolders = async (workspace: string, folderPath: string) => { + const res = await client.get( + `/v1/private/explorer/${workspace}/_list_dir?path=${encodeURIComponent(folderPath)}`, + ); + return res.data; +}; + export const getStudyVersions = async (): Promise => { const res = await client.get("/v1/studies/_versions"); return res.data; @@ -434,8 +460,10 @@ export const updateStudyMetadata = async ( return res.data; }; -export const scanFolder = async (folderPath: string): Promise => { - await client.post(`/v1/watcher/_scan?path=${encodeURIComponent(folderPath)}`); +export const scanFolder = async (folderPath: string, recursive = false) => { + await client.post( + `/v1/watcher/_scan?path=${encodeURIComponent(folderPath)}&recursive=${recursive}`, + ); }; export const getStudyLayers = async (uuid: string): Promise => { From 684b964f229c176dbd6f10dd679f7965c49575b8 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Thu, 9 Jan 2025 18:01:44 +0100 Subject: [PATCH 04/11] feat(ui-hooks): create useFormCloseProtection --- webapp/src/components/common/Form/index.tsx | 32 ++---------------- .../common/Matrix/hooks/useMatrix/index.ts | 11 +++---- webapp/src/hooks/useCloseFormSecurity.ts | 33 +++++++++++++++++++ 3 files changed, 41 insertions(+), 35 deletions(-) create mode 100644 webapp/src/hooks/useCloseFormSecurity.ts diff --git a/webapp/src/components/common/Form/index.tsx b/webapp/src/components/common/Form/index.tsx index 56b3e2d572..00b0f61d3a 100644 --- a/webapp/src/components/common/Form/index.tsx +++ b/webapp/src/components/common/Form/index.tsx @@ -13,7 +13,7 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { FormEvent, useEffect, useMemo, useRef, useState } from "react"; +import { FormEvent, useEffect, useMemo, useRef } from "react"; import { DeepPartial, FieldPath, @@ -54,12 +54,12 @@ import { toAutoSubmitConfig, } from "./utils"; import useDebouncedState from "../../../hooks/useDebouncedState"; -import usePrompt from "../../../hooks/usePrompt"; import { SubmitHandlerPlus, UseFormReturnPlus } from "./types"; import FormContext from "./FormContext"; import useFormApiPlus from "./useFormApiPlus"; import useFormUndoRedo from "./useFormUndoRedo"; import { mergeSxProp } from "../../../utils/muiUtils"; +import useFormCloseProtection from "@/hooks/useCloseFormSecurity"; export interface AutoSubmitConfig { enable: boolean; @@ -132,7 +132,6 @@ function Form( const { t } = useTranslation(); const autoSubmitConfig = toAutoSubmitConfig(autoSubmit); - const [isInProgress, setIsInProgress] = useState(false); const [showAutoSubmitLoader, setShowAutoSubmitLoader] = useDebouncedState( false, 750, @@ -246,32 +245,12 @@ function Form( [isSubmitSuccessful], ); - // Prevent browser close if a submit is pending - useEffect(() => { - const listener = (event: BeforeUnloadEvent) => { - if (isInProgress) { - // eslint-disable-next-line no-param-reassign - event.returnValue = t("form.submit.inProgress"); - } else if (isDirty) { - // eslint-disable-next-line no-param-reassign - event.returnValue = t("form.changeNotSaved"); - } - }; - - window.addEventListener("beforeunload", listener); - - return () => { - window.removeEventListener("beforeunload", listener); - }; - }, [t, isInProgress, isDirty]); + useFormCloseProtection({ isSubmitting, isDirty }); useUpdateEffect(() => onStateChange?.(formState), [formState]); useEffect(() => setRef(apiRef, formApiPlus)); - usePrompt(t("form.submit.inProgress"), isInProgress); - usePrompt(t("form.changeNotSaved"), isDirty && !isInProgress); - //////////////////////////////////////////////////////////////// // Submit //////////////////////////////////////////////////////////////// @@ -322,9 +301,6 @@ function Form( ? err.response?.data.description : err?.toString(), }); - }) - .finally(() => { - setIsInProgress(false); }); }, onInvalid); @@ -334,8 +310,6 @@ function Form( const submitDebounced = useDebounce(submit, autoSubmitConfig.wait); const requestSubmit = () => { - setIsInProgress(true); - if (autoSubmitConfig.enable) { submitDebounced(); } else { diff --git a/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts b/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts index e89f99be12..0726b42d4c 100644 --- a/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts +++ b/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts @@ -41,9 +41,9 @@ import useUndo from "use-undo"; import { GridCellKind } from "@glideapps/glide-data-grid"; import { uploadFile } from "../../../../../services/api/studies/raw"; import { fetchMatrixFn } from "../../../../App/Singlestudy/explore/Modelization/Areas/Hydro/utils"; -import usePrompt from "../../../../../hooks/usePrompt"; import { Aggregate, Column, Operation } from "../../shared/constants"; import { aggregatesTheme } from "../../styles"; +import useFormCloseProtection from "@/hooks/useCloseFormSecurity"; interface DataState { data: MatrixDataDTO["data"]; @@ -83,11 +83,10 @@ export function useMatrix( [aggregatesConfig], ); - // Display warning prompts to prevent unintended navigation - // 1. When the matrix is currently being submitted - usePrompt(t("form.submit.inProgress"), isSubmitting); - // 2. When there are unsaved changes in the matrix - usePrompt(t("form.changeNotSaved"), currentState.pendingUpdates.length > 0); + useFormCloseProtection({ + isSubmitting, + isDirty: currentState.pendingUpdates.length > 0, + }); const fetchMatrix = async (loadingState = true) => { // !NOTE This is a temporary solution to ensure the matrix is up to date diff --git a/webapp/src/hooks/useCloseFormSecurity.ts b/webapp/src/hooks/useCloseFormSecurity.ts new file mode 100644 index 0000000000..b20fdee6f6 --- /dev/null +++ b/webapp/src/hooks/useCloseFormSecurity.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import usePrompt from "./usePrompt"; +import { useTranslation } from "react-i18next"; + +export interface UseFormCloseProtectionParams { + isSubmitting: boolean; + isDirty: boolean; +} + +function useFormCloseProtection({ + isSubmitting, + isDirty, +}: UseFormCloseProtectionParams) { + const { t } = useTranslation(); + + usePrompt(t("form.submit.inProgress"), isSubmitting); + usePrompt(t("form.changeNotSaved"), isDirty && !isSubmitting); +} + +export default useFormCloseProtection; From ba87cffd2b44eb59715800036145474588a2853b Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:22:00 +0100 Subject: [PATCH 05/11] feat(ui-common): rename EmptyView and add extraActions prop --- .../Singlestudy/Commands/Edition/index.tsx | 2 +- .../dialogs/ScenarioBuilderDialog/Table.tsx | 2 +- .../Singlestudy/explore/Debug/Data/Folder.tsx | 2 +- .../Singlestudy/explore/Debug/Data/Text.tsx | 2 +- .../explore/Debug/Data/Unsupported.tsx | 2 +- .../explore/Modelization/Areas/index.tsx | 2 +- .../Modelization/BindingConstraints/index.tsx | 2 +- .../explore/Modelization/Links/index.tsx | 2 +- .../explore/Results/ResultDetails/index.tsx | 2 +- .../explore/TableModeList/index.tsx | 2 +- .../explore/Xpansion/Candidates/index.tsx | 2 +- webapp/src/components/common/Matrix/index.tsx | 2 +- webapp/src/components/common/TableMode.tsx | 2 +- .../components/MatrixContent.tsx | 2 +- .../common/dialogs/DigestDialog.tsx | 2 +- .../page/{SimpleContent.tsx => EmptyView.tsx} | 22 +++++++++++++++++-- .../common/utils/UsePromiseCond.tsx | 2 +- 17 files changed, 36 insertions(+), 18 deletions(-) rename webapp/src/components/common/page/{SimpleContent.tsx => EmptyView.tsx} (71%) diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx index f26d44693a..69524ae7d8 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx @@ -57,7 +57,7 @@ import { } from "../../../../../services/webSocket/ws"; import ConfirmationDialog from "../../../../common/dialogs/ConfirmationDialog"; import CheckBoxFE from "../../../../common/fieldEditors/CheckBoxFE"; -import EmptyView from "../../../../common/page/SimpleContent"; +import EmptyView from "../../../../common/page/EmptyView"; import { TaskStatus } from "../../../../../services/api/tasks/constants"; import type { TaskEventPayload, diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioBuilderDialog/Table.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioBuilderDialog/Table.tsx index 9b0648912a..5670fccb2d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioBuilderDialog/Table.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioBuilderDialog/Table.tsx @@ -21,7 +21,7 @@ import { updateScenarioBuilderConfig, } from "./utils"; import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import EmptyView from "../../../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../../../common/page/EmptyView"; import useEnqueueErrorSnackbar from "../../../../../../../../hooks/useEnqueueErrorSnackbar"; import { toError } from "../../../../../../../../utils/fnUtils"; import { useOutletContext } from "react-router"; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx index 88c1aaea1e..dfc763783a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx @@ -36,7 +36,7 @@ import { canEditFile, } from "../utils"; import { Fragment, useState } from "react"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import { useTranslation } from "react-i18next"; import { Filename, Menubar } from "./styles"; import UploadFileButton from "../../../../../common/buttons/UploadFileButton"; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx index 1ee8be74c0..b77dd93c1f 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx @@ -31,7 +31,7 @@ import DownloadButton from "../../../../../common/buttons/DownloadButton"; import { downloadFile } from "../../../../../../utils/fileUtils"; import { Filename, Flex, Menubar } from "./styles"; import UploadFileButton from "../../../../../common/buttons/UploadFileButton"; -import EmptyView from "@/components/common/page/SimpleContent"; +import EmptyView from "@/components/common/page/EmptyView"; import GridOffIcon from "@mui/icons-material/GridOff"; import { getRawFile } from "@/services/api/studies/raw"; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx index 81307a4edf..f96f598a77 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx @@ -13,7 +13,7 @@ */ import { useTranslation } from "react-i18next"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import BlockIcon from "@mui/icons-material/Block"; import { Filename, Flex, Menubar } from "./styles"; import type { DataCompProps } from "../utils"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx index f5df3c43e0..199a543c27 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx @@ -14,7 +14,7 @@ import { useOutletContext } from "react-router"; import { StudyMetadata } from "../../../../../../common/types"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import AreaPropsView from "./AreaPropsView"; import AreasTab from "./AreasTab"; import useStudySynthesis from "../../../../../../redux/hooks/useStudySynthesis"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx index c1e04de1e0..fa48b6aa15 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx @@ -14,7 +14,7 @@ import { useOutletContext } from "react-router"; import { StudyMetadata } from "../../../../../../common/types"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import BindingConstPropsView from "./BindingConstPropsView"; import { getBindingConst, diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx index 3749bb784b..29ab7632ba 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx @@ -14,7 +14,7 @@ import { useOutletContext } from "react-router"; import { StudyMetadata } from "../../../../../../common/types"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import LinkPropsView from "./LinkPropsView"; import { getCurrentLink } from "../../../../../../redux/selectors"; import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; diff --git a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx index 1814bd876d..8df3507b76 100644 --- a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx @@ -63,7 +63,7 @@ import { Column } from "@/components/common/Matrix/shared/constants.ts"; import SplitView from "../../../../../common/SplitView/index.tsx"; import ResultFilters from "./ResultFilters.tsx"; import { toError } from "../../../../../../utils/fnUtils.ts"; -import EmptyView from "../../../../../common/page/SimpleContent.tsx"; +import EmptyView from "../../../../../common/page/EmptyView.tsx"; import { getStudyMatrixIndex } from "../../../../../../services/api/matrix.ts"; import { MatrixGridSynthesis } from "@/components/common/Matrix/components/MatrixGridSynthesis"; import { ResultMatrixDTO } from "@/components/common/Matrix/shared/types.ts"; diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx index bf4655465a..1f381e17bc 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx @@ -32,7 +32,7 @@ import ConfirmationDialog from "../../../../common/dialogs/ConfirmationDialog"; import TableMode from "../../../../common/TableMode"; import SplitView from "../../../../common/SplitView"; import ViewWrapper from "../../../../common/page/ViewWrapper"; -import EmptyView from "@/components/common/page/SimpleContent"; +import EmptyView from "@/components/common/page/EmptyView"; function TableModeList() { const { t } = useTranslation(); diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx index fafe0236ed..298dc08e01 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx @@ -41,7 +41,7 @@ import CreateCandidateDialog from "./CreateCandidateDialog"; import CandidateForm from "./CandidateForm"; import usePromiseWithSnackbarError from "../../../../../../hooks/usePromiseWithSnackbarError"; import DataViewerDialog from "../../../../../common/dialogs/DataViewerDialog"; -import EmptyView from "../../../../../common/page/SimpleContent"; +import EmptyView from "../../../../../common/page/EmptyView"; import SplitView from "../../../../../common/SplitView"; import { getLinks } from "@/services/api/studies/links"; import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; diff --git a/webapp/src/components/common/Matrix/index.tsx b/webapp/src/components/common/Matrix/index.tsx index 4bb07202dd..e9898f6292 100644 --- a/webapp/src/components/common/Matrix/index.tsx +++ b/webapp/src/components/common/Matrix/index.tsx @@ -21,7 +21,7 @@ import { useOutletContext } from "react-router"; import { StudyMetadata } from "../../../common/types"; import { MatrixContainer, MatrixHeader, MatrixTitle } from "./styles"; import MatrixActions from "./components/MatrixActions"; -import EmptyView from "../page/SimpleContent"; +import EmptyView from "../page/EmptyView"; import { fetchMatrixFn } from "../../App/Singlestudy/explore/Modelization/Areas/Hydro/utils"; import { AggregateConfig } from "./shared/types"; import { GridOff } from "@mui/icons-material"; diff --git a/webapp/src/components/common/TableMode.tsx b/webapp/src/components/common/TableMode.tsx index 499827537a..1809a93377 100644 --- a/webapp/src/components/common/TableMode.tsx +++ b/webapp/src/components/common/TableMode.tsx @@ -28,7 +28,7 @@ import { SubmitHandlerPlus } from "./Form/types"; import TableForm from "./TableForm"; import UsePromiseCond from "./utils/UsePromiseCond"; import GridOffIcon from "@mui/icons-material/GridOff"; -import EmptyView from "./page/SimpleContent"; +import EmptyView from "./page/EmptyView"; import { useTranslation } from "react-i18next"; export interface TableModeProps { diff --git a/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx b/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx index 3856e72690..c1c17c27b0 100644 --- a/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx +++ b/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx @@ -21,7 +21,7 @@ import ButtonBack from "@/components/common/ButtonBack"; import { getMatrix } from "@/services/api/matrix"; import usePromiseWithSnackbarError from "@/hooks/usePromiseWithSnackbarError"; import { generateDataColumns } from "@/components/common/Matrix/shared/utils"; -import EmptyView from "@/components/common/page/SimpleContent"; +import EmptyView from "@/components/common/page/EmptyView"; import { GridOff } from "@mui/icons-material"; interface MatrixContentProps { diff --git a/webapp/src/components/common/dialogs/DigestDialog.tsx b/webapp/src/components/common/dialogs/DigestDialog.tsx index db169ecaf1..31bf1f0900 100644 --- a/webapp/src/components/common/dialogs/DigestDialog.tsx +++ b/webapp/src/components/common/dialogs/DigestDialog.tsx @@ -20,7 +20,7 @@ import { getStudyData } from "../../../services/api/study"; import usePromise from "../../../hooks/usePromise"; import { useTranslation } from "react-i18next"; import { AxiosError } from "axios"; -import EmptyView from "../page/SimpleContent"; +import EmptyView from "../page/EmptyView"; import SearchOffIcon from "@mui/icons-material/SearchOff"; import { generateDataColumns } from "@/components/common/Matrix/shared/utils"; import { MatrixGridSynthesis } from "@/components/common/Matrix/components/MatrixGridSynthesis"; diff --git a/webapp/src/components/common/page/SimpleContent.tsx b/webapp/src/components/common/page/EmptyView.tsx similarity index 71% rename from webapp/src/components/common/page/SimpleContent.tsx rename to webapp/src/components/common/page/EmptyView.tsx index cd4804272c..5b5610d51c 100644 --- a/webapp/src/components/common/page/SimpleContent.tsx +++ b/webapp/src/components/common/page/EmptyView.tsx @@ -20,10 +20,14 @@ import { SvgIconComponent } from "@mui/icons-material"; export interface EmptyViewProps { title?: string; icon?: SvgIconComponent; + extraActions?: React.ReactNode; } -function EmptyView(props: EmptyViewProps) { - const { title, icon: Icon = LiveHelpRoundedIcon } = props; +function EmptyView({ + title, + icon: Icon = LiveHelpRoundedIcon, + extraActions, +}: EmptyViewProps) { const { t } = useTranslation(); return ( @@ -35,8 +39,22 @@ function EmptyView(props: EmptyViewProps) { flexDirection: "column", alignItems: "center", justifyContent: "center", + position: "relative", }} > + {extraActions && ( + + {extraActions} + + )} {Icon && }
{title || t("common.noContent")}
diff --git a/webapp/src/components/common/utils/UsePromiseCond.tsx b/webapp/src/components/common/utils/UsePromiseCond.tsx index 3d9df26617..0087922521 100644 --- a/webapp/src/components/common/utils/UsePromiseCond.tsx +++ b/webapp/src/components/common/utils/UsePromiseCond.tsx @@ -14,7 +14,7 @@ import { PromiseStatus, UsePromiseResponse } from "../../../hooks/usePromise"; import SimpleLoader from "../loaders/SimpleLoader"; -import EmptyView from "../page/SimpleContent"; +import EmptyView from "../page/EmptyView"; export type Response = Pick< UsePromiseResponse, From 1c590c12f41ebb84107b327cacb91ed10ac0bb21 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:34:28 +0100 Subject: [PATCH 06/11] fix(ui-common): disable undo/redo buttons when submitting in Form --- webapp/src/components/common/Form/index.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/webapp/src/components/common/Form/index.tsx b/webapp/src/components/common/Form/index.tsx index 00b0f61d3a..eeb4bb6058 100644 --- a/webapp/src/components/common/Form/index.tsx +++ b/webapp/src/components/common/Form/index.tsx @@ -413,14 +413,22 @@ function Form( <> - + - + From b164dd6af3491b837e879bf09bd602ae2db77d03 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:35:07 +0100 Subject: [PATCH 07/11] feat(ui-common): create DataGrid component and use it --- webapp/index.html | 2 + webapp/src/components/common/DataGrid.tsx | 337 ++++++++++++++++++ .../components/MatrixGrid/MatrixGrid.test.tsx | 84 ----- .../Matrix/components/MatrixGrid/index.tsx | 100 ++---- .../components/MatrixGridSynthesis/index.tsx | 17 +- .../Matrix/hooks/useColumnMapping/index.ts | 2 +- .../Matrix/hooks/useGridCellContent/index.ts | 2 +- .../Matrix/hooks/useMatrixPortal/index.ts | 76 ---- .../useMatrixPortal/useMatrixPortal.test.tsx | 153 -------- 9 files changed, 373 insertions(+), 400 deletions(-) create mode 100644 webapp/src/components/common/DataGrid.tsx delete mode 100644 webapp/src/components/common/Matrix/hooks/useMatrixPortal/index.ts delete mode 100644 webapp/src/components/common/Matrix/hooks/useMatrixPortal/useMatrixPortal.test.tsx diff --git a/webapp/index.html b/webapp/index.html index b1084b2392..b7e6021a32 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -17,6 +17,8 @@
+ +
diff --git a/webapp/src/components/common/DataGrid.tsx b/webapp/src/components/common/DataGrid.tsx new file mode 100644 index 0000000000..caf1bcb4df --- /dev/null +++ b/webapp/src/components/common/DataGrid.tsx @@ -0,0 +1,337 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { + CompactSelection, + DataEditor, + GridCellKind, + type EditListItem, + type GridSelection, + type DataEditorProps, +} from "@glideapps/glide-data-grid"; +import "@glideapps/glide-data-grid/dist/index.css"; +import { useCallback, useEffect, useState } from "react"; +import { voidFn } from "@/utils/fnUtils"; +import { darkTheme } from "./Matrix/styles"; + +interface StringRowMarkerOptions { + kind: "string" | "clickable-string"; + getTitle?: (rowIndex: number) => string; +} + +type RowMarkers = + | NonNullable + | StringRowMarkerOptions["kind"] + | StringRowMarkerOptions; + +type RowMarkersOptions = Exclude; + +export interface DataGridProps + extends Omit< + DataEditorProps, + "rowMarkers" | "onGridSelectionChange" | "gridSelection" + > { + rowMarkers?: RowMarkers; + enableColumnResize?: boolean; +} + +function isStringRowMarkerOptions( + rowMarkerOptions: RowMarkersOptions, +): rowMarkerOptions is StringRowMarkerOptions { + return ( + rowMarkerOptions.kind === "string" || + rowMarkerOptions.kind === "clickable-string" + ); +} + +function DataGrid(props: DataGridProps) { + const { + rowMarkers = { kind: "none" }, + getCellContent, + columns: columnsFromProps, + onCellEdited, + onCellsEdited, + onColumnResize, + onColumnResizeStart, + onColumnResizeEnd, + enableColumnResize = true, + freezeColumns, + ...rest + } = props; + + const rowMarkersOptions: RowMarkersOptions = + typeof rowMarkers === "string" ? { kind: rowMarkers } : rowMarkers; + const isStringRowMarkers = isStringRowMarkerOptions(rowMarkersOptions); + const adjustedFreezeColumns = isStringRowMarkers + ? (freezeColumns || 0) + 1 + : freezeColumns; + + const [columns, setColumns] = useState(columnsFromProps); + const [selection, setSelection] = useState({ + columns: CompactSelection.empty(), + rows: CompactSelection.empty(), + }); + + // Add a column for the "string" row markers if needed + useEffect(() => { + setColumns( + isStringRowMarkers + ? [{ id: "", title: "" }, ...columnsFromProps] + : columnsFromProps, + ); + }, [columnsFromProps, isStringRowMarkers]); + + //////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////// + + const ifElseStringRowMarkers = ( + colIndex: number, + onTrue: () => R1, + onFalse: (colIndex: number) => R2, + ) => { + let adjustedColIndex = colIndex; + + if (isStringRowMarkers) { + if (colIndex === 0) { + return onTrue(); + } + + adjustedColIndex = colIndex - 1; + } + + return onFalse(adjustedColIndex); + }; + + const ifNotStringRowMarkers = ( + colIndex: number, + fn: (colIndex: number) => void, + ) => { + return ifElseStringRowMarkers(colIndex, voidFn, fn); + }; + + //////////////////////////////////////////////////////////////// + // Content + //////////////////////////////////////////////////////////////// + + const getCellContentWrapper = useCallback( + (cell) => { + const [colIndex, rowIndex] = cell; + + return ifElseStringRowMarkers( + colIndex, + () => { + const title = + isStringRowMarkers && rowMarkersOptions.getTitle + ? rowMarkersOptions.getTitle(rowIndex) + : `Row ${rowIndex + 1}`; + + return { + kind: GridCellKind.Text, + data: title, + displayData: title, + allowOverlay: false, + readonly: true, + themeOverride: { + bgCell: darkTheme.bgHeader, + }, + }; + }, + (adjustedColIndex) => { + return getCellContent([adjustedColIndex, rowIndex]); + }, + ); + }, + [getCellContent, isStringRowMarkers], + ); + + //////////////////////////////////////////////////////////////// + // Edition + //////////////////////////////////////////////////////////////// + + const handleCellEdited: DataEditorProps["onCellEdited"] = ( + location, + value, + ) => { + const [colIndex, rowIndex] = location; + + ifNotStringRowMarkers(colIndex, (adjustedColIndex) => { + onCellEdited?.([adjustedColIndex, rowIndex], value); + }); + }; + + const handleCellsEdited: DataEditorProps["onCellsEdited"] = (items) => { + if (onCellsEdited) { + const adjustedItems = items + .map((item) => { + const { location } = item; + const [colIndex, rowIndex] = location; + + return ifElseStringRowMarkers( + colIndex, + () => null, + (adjustedColIndex): EditListItem => { + return { ...item, location: [adjustedColIndex, rowIndex] }; + }, + ); + }) + .filter(Boolean); + + return onCellsEdited(adjustedItems); + } + }; + + //////////////////////////////////////////////////////////////// + // Resize + //////////////////////////////////////////////////////////////// + + const handleColumnResize: DataEditorProps["onColumnResize"] = + onColumnResize || enableColumnResize + ? (column, newSize, colIndex, newSizeWithGrow) => { + if (enableColumnResize) { + setColumns( + columns.map((col, index) => + index === colIndex ? { ...col, width: newSize } : col, + ), + ); + } + + if (onColumnResize) { + ifNotStringRowMarkers(colIndex, (adjustedColIndex) => { + onColumnResize( + column, + newSize, + adjustedColIndex, + newSizeWithGrow, + ); + }); + } + } + : undefined; + + const handleColumnResizeStart: DataEditorProps["onColumnResizeStart"] = + onColumnResizeStart + ? (column, newSize, colIndex, newSizeWithGrow) => { + ifNotStringRowMarkers(colIndex, (adjustedColIndex) => { + onColumnResizeStart( + column, + newSize, + adjustedColIndex, + newSizeWithGrow, + ); + }); + } + : undefined; + + const handleColumnResizeEnd: DataEditorProps["onColumnResizeEnd"] = + onColumnResizeEnd + ? (column, newSize, colIndex, newSizeWithGrow) => { + ifNotStringRowMarkers(colIndex, (adjustedColIndex) => { + onColumnResizeEnd( + column, + newSize, + adjustedColIndex, + newSizeWithGrow, + ); + }); + } + : undefined; + + //////////////////////////////////////////////////////////////// + // Selection + //////////////////////////////////////////////////////////////// + + const handleGridSelectionChange = (newSelection: GridSelection) => { + { + if (isStringRowMarkers) { + if (newSelection.current) { + // Select the whole row when clicking on a row marker cell + if ( + rowMarkersOptions.kind === "clickable-string" && + newSelection.current.cell[0] === 0 + ) { + setSelection({ + ...newSelection, + current: undefined, + rows: CompactSelection.fromSingleSelection( + newSelection.current.cell[1], + ), + }); + + return; + } + + // Prevent selecting a row marker cell + if (newSelection.current.range.x === 0) { + return; + } + } + + // Prevent selecting the row marker column + if (newSelection.columns.hasIndex(0)) { + // TODO find a way to have the rows length to select all the rows like other row markers + // setSelection({ + // ...newSelection, + // columns: CompactSelection.empty(), + // rows: CompactSelection.fromSingleSelection([ + // 0, + // // rowsLength + // ]), + // }); + + setSelection({ + ...newSelection, + columns: newSelection.columns.remove(0), + }); + + return; + } + } + + setSelection(newSelection); + } + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + ); +} + +export default DataGrid; diff --git a/webapp/src/components/common/Matrix/components/MatrixGrid/MatrixGrid.test.tsx b/webapp/src/components/common/Matrix/components/MatrixGrid/MatrixGrid.test.tsx index 7f3f44aa7b..b1169ef3df 100644 --- a/webapp/src/components/common/Matrix/components/MatrixGrid/MatrixGrid.test.tsx +++ b/webapp/src/components/common/Matrix/components/MatrixGrid/MatrixGrid.test.tsx @@ -13,10 +13,8 @@ */ import { render } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; import Box from "@mui/material/Box"; import MatrixGrid, { MatrixGridProps } from "."; -import SplitView from "../../../SplitView"; import type { EnhancedGridColumn } from "../../shared/types"; import { mockGetBoundingClientRect } from "../../../../../tests/mocks/mockGetBoundingClientRect"; import { mockHTMLCanvasElement } from "../../../../../tests/mocks/mockHTMLCanvasElement"; @@ -146,86 +144,4 @@ describe("MatrixGrid", () => { assertDimensions(matrix, 300, 400); }); }); - - describe("portal management", () => { - const renderSplitView = () => { - return render( - - - {[0, 1].map((index) => ( - - - - ))} - - , - ); - }; - - const getPortal = () => document.getElementById("portal"); - - test("should manage portal visibility on mount", () => { - renderMatrixGrid(); - expect(getPortal()).toBeInTheDocument(); - expect(getPortal()?.style.display).toBe("none"); - }); - - test("should toggle portal visibility on mouse events", async () => { - const user = userEvent.setup(); - const { container } = renderMatrixGrid(); - const matrix = container.querySelector(".matrix-container"); - expect(matrix).toBeInTheDocument(); - - await user.hover(matrix!); - expect(getPortal()?.style.display).toBe("block"); - - await user.unhover(matrix!); - expect(getPortal()?.style.display).toBe("none"); - }); - - test("should handle portal in split view", async () => { - const user = userEvent.setup(); - renderSplitView(); - const matrices = document.querySelectorAll(".matrix-container"); - - // Test portal behavior with multiple matrices - await user.hover(matrices[0]); - expect(getPortal()?.style.display).toBe("block"); - - await user.hover(matrices[1]); - expect(getPortal()?.style.display).toBe("block"); - - await user.unhover(matrices[1]); - expect(getPortal()?.style.display).toBe("none"); - }); - - test("should maintain portal state when switching between matrices", async () => { - const user = userEvent.setup(); - renderSplitView(); - const matrices = document.querySelectorAll(".matrix-container"); - - for (const matrix of [matrices[0], matrices[1], matrices[0]]) { - await user.hover(matrix); - expect(getPortal()?.style.display).toBe("block"); - } - - await user.unhover(matrices[0]); - expect(getPortal()?.style.display).toBe("none"); - }); - - test("should handle unmounting correctly", () => { - const { unmount } = renderSplitView(); - expect(getPortal()).toBeInTheDocument(); - - unmount(); - expect(getPortal()).toBeInTheDocument(); - expect(getPortal()?.style.display).toBe("none"); - }); - }); }); diff --git a/webapp/src/components/common/Matrix/components/MatrixGrid/index.tsx b/webapp/src/components/common/Matrix/components/MatrixGrid/index.tsx index 688b647cc1..c7956c92ac 100644 --- a/webapp/src/components/common/Matrix/components/MatrixGrid/index.tsx +++ b/webapp/src/components/common/Matrix/components/MatrixGrid/index.tsx @@ -12,31 +12,27 @@ * This file is part of the Antares project. */ -import "@glideapps/glide-data-grid/dist/index.css"; -import DataEditor, { - CompactSelection, - EditableGridCell, - EditListItem, +import { GridCellKind, - GridColumn, - GridSelection, - Item, + type EditableGridCell, + type EditListItem, + type Item, } from "@glideapps/glide-data-grid"; import { useGridCellContent } from "../../hooks/useGridCellContent"; -import { useMemo, useState } from "react"; +import { useMemo } from "react"; import { type EnhancedGridColumn, type GridUpdate, type MatrixAggregates, } from "../../shared/types"; import { useColumnMapping } from "../../hooks/useColumnMapping"; -import { useMatrixPortal } from "../../hooks/useMatrixPortal"; import { darkTheme, readOnlyDarkTheme } from "../../styles"; +import DataGrid from "@/components/common/DataGrid"; export interface MatrixGridProps { data: number[][]; rows: number; - columns: EnhancedGridColumn[]; + columns: readonly EnhancedGridColumn[]; dateTime?: string[]; aggregates?: Partial; rowHeaders?: string[]; @@ -51,7 +47,7 @@ export interface MatrixGridProps { function MatrixGrid({ data, rows, - columns: initialColumns, + columns, dateTime, aggregates, rowHeaders, @@ -62,23 +58,8 @@ function MatrixGrid({ readOnly, showPercent, }: MatrixGridProps) { - const [columns, setColumns] = useState(initialColumns); - const [selection, setSelection] = useState({ - columns: CompactSelection.empty(), - rows: CompactSelection.empty(), - }); - const { gridToData } = useColumnMapping(columns); - // Due to a current limitation of Glide Data Grid, only one id="portal" is active on the DOM - // This is an issue on splited matrices, the second matrix does not have an id="portal" - // Causing the overlay editor to not behave correctly on click - // This hook manage portal creation and cleanup for matrices in split views - // TODO: add a prop to detect matrices in split views and enable this conditionnaly - // !Workaround: a proper solution should be replacing this in the future - const { containerRef, handleMouseEnter, handleMouseLeave } = - useMatrixPortal(); - const theme = useMemo(() => { if (readOnly) { return { @@ -105,19 +86,6 @@ function MatrixGrid({ // Event Handlers //////////////////////////////////////////////////////////////// - const handleColumnResize = ( - column: GridColumn, - newSize: number, - colIndex: number, - newSizeWithGrow: number, - ) => { - const newColumns = columns.map((col, index) => - index === colIndex ? { ...col, width: newSize } : col, - ); - - setColumns(newColumns); - }; - const handleCellEdited = (coordinates: Item, value: EditableGridCell) => { if (value.kind !== GridCellKind.Number) { // Invalid numeric value @@ -172,41 +140,23 @@ function MatrixGrid({ //////////////////////////////////////////////////////////////// return ( - <> -
- -
- + ); } diff --git a/webapp/src/components/common/Matrix/components/MatrixGridSynthesis/index.tsx b/webapp/src/components/common/Matrix/components/MatrixGridSynthesis/index.tsx index ad56f83b49..f7f099ddd4 100644 --- a/webapp/src/components/common/Matrix/components/MatrixGridSynthesis/index.tsx +++ b/webapp/src/components/common/Matrix/components/MatrixGridSynthesis/index.tsx @@ -12,16 +12,17 @@ * This file is part of the Antares project. */ -import DataEditor, { +import { GridCellKind, - GridColumn, - Item, - NumberCell, - TextCell, + type GridColumn, + type Item, + type NumberCell, + type TextCell, } from "@glideapps/glide-data-grid"; import { useMemo } from "react"; import { darkTheme, readOnlyDarkTheme } from "../../styles"; import { formatGridNumber } from "../../shared/utils"; +import DataGrid from "@/components/common/DataGrid"; type CellValue = number | string; @@ -81,17 +82,13 @@ export function MatrixGridSynthesis({ return (
-
diff --git a/webapp/src/components/common/Matrix/hooks/useColumnMapping/index.ts b/webapp/src/components/common/Matrix/hooks/useColumnMapping/index.ts index b9ceb95ebf..6b16f75c3f 100644 --- a/webapp/src/components/common/Matrix/hooks/useColumnMapping/index.ts +++ b/webapp/src/components/common/Matrix/hooks/useColumnMapping/index.ts @@ -46,7 +46,7 @@ import { Column } from "../../shared/constants"; * - dataToGrid: (dataCoord: Item) => Item * Converts data coordinates to grid coordinates. */ -export function useColumnMapping(columns: EnhancedGridColumn[]) { +export function useColumnMapping(columns: readonly EnhancedGridColumn[]) { return useMemo(() => { const dataColumnIndices = columns.reduce((acc, col, index) => { if (col.type === Column.Number) { diff --git a/webapp/src/components/common/Matrix/hooks/useGridCellContent/index.ts b/webapp/src/components/common/Matrix/hooks/useGridCellContent/index.ts index 7b12319381..3052c93ad1 100644 --- a/webapp/src/components/common/Matrix/hooks/useGridCellContent/index.ts +++ b/webapp/src/components/common/Matrix/hooks/useGridCellContent/index.ts @@ -108,7 +108,7 @@ const cellContentGenerators: Record = { */ export function useGridCellContent( data: number[][], - columns: EnhancedGridColumn[], + columns: readonly EnhancedGridColumn[], gridToData: (cell: Item) => Item | null, dateTime?: string[], aggregates?: Partial, diff --git a/webapp/src/components/common/Matrix/hooks/useMatrixPortal/index.ts b/webapp/src/components/common/Matrix/hooks/useMatrixPortal/index.ts deleted file mode 100644 index c6174d39d2..0000000000 --- a/webapp/src/components/common/Matrix/hooks/useMatrixPortal/index.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { useEffect, useRef, useState } from "react"; - -/** - * Custom hook to manage portal creation and cleanup for matrices in split views. - * This hook is specifically designed to work around a limitation where multiple - * Glide Data Grid instances compete for a single portal with id="portal". - * - * @returns Hook handlers and ref to be applied to the matrix container - * - * @example - * ```tsx - * function MatrixGrid() { - * const { containerRef, handleMouseEnter, handleMouseLeave } = useMatrixPortal(); - * - * return ( - *
- * - *
- * ); - * } - * ``` - */ -export function useMatrixPortal() { - const [isActive, setIsActive] = useState(false); - const containerRef = useRef(null); - - useEffect(() => { - let portal = document.getElementById("portal"); - - if (!portal) { - portal = document.createElement("div"); - portal.id = "portal"; - portal.style.position = "fixed"; - portal.style.left = "0"; - portal.style.top = "0"; - portal.style.zIndex = "9999"; - portal.style.display = "none"; - document.body.appendChild(portal); - } - - // Update visibility based on active state - if (containerRef.current && isActive) { - portal.style.display = "block"; - } else { - portal.style.display = "none"; - } - }, [isActive]); - - const handleMouseEnter = () => { - setIsActive(true); - }; - - const handleMouseLeave = () => { - setIsActive(false); - }; - - return { - containerRef, - handleMouseEnter, - handleMouseLeave, - }; -} diff --git a/webapp/src/components/common/Matrix/hooks/useMatrixPortal/useMatrixPortal.test.tsx b/webapp/src/components/common/Matrix/hooks/useMatrixPortal/useMatrixPortal.test.tsx deleted file mode 100644 index 8b3bdfda32..0000000000 --- a/webapp/src/components/common/Matrix/hooks/useMatrixPortal/useMatrixPortal.test.tsx +++ /dev/null @@ -1,153 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { cleanup, render, screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { useMatrixPortal } from "../useMatrixPortal"; - -function NonRefComponent() { - return
Test Container
; -} - -function TestComponent() { - const { containerRef, handleMouseEnter, handleMouseLeave } = - useMatrixPortal(); - return ( -
- Test Container -
- ); -} - -describe("useMatrixPortal", () => { - beforeEach(() => { - cleanup(); - const existingPortal = document.getElementById("portal"); - if (existingPortal) { - existingPortal.remove(); - } - }); - - test("should create hidden portal initially", () => { - render(); - const portal = document.getElementById("portal"); - expect(portal).toBeInTheDocument(); - expect(portal?.style.display).toBe("none"); - }); - - test("should show portal with correct styles when mouse enters", async () => { - const user = userEvent.setup(); - render(); - - const container = screen.getByTestId("ref-container"); - await user.hover(container); - - const portal = document.getElementById("portal"); - expect(portal).toBeInTheDocument(); - expect(portal?.style.display).toBe("block"); - expect(portal?.style.position).toBe("fixed"); - expect(portal?.style.left).toBe("0px"); - expect(portal?.style.top).toBe("0px"); - expect(portal?.style.zIndex).toBe("9999"); - }); - - test("should hide portal when mouse leaves", async () => { - const user = userEvent.setup(); - render(); - - const container = screen.getByTestId("ref-container"); - - // Show portal - await user.hover(container); - expect(document.getElementById("portal")?.style.display).toBe("block"); - - // Hide portal - await user.unhover(container); - expect(document.getElementById("portal")?.style.display).toBe("none"); - }); - - test("should keep portal hidden if containerRef is null", async () => { - const user = userEvent.setup(); - - // First render test component to create portal - render(); - const portal = document.getElementById("portal"); - expect(portal?.style.display).toBe("none"); - - cleanup(); // Clean up the test component - - // Then render component without ref - render(); - const container = screen.getByTestId("non-ref-container"); - await user.hover(container); - - // Portal should stay hidden - expect(portal?.style.display).toBe("none"); - }); - - test("should handle multiple mouse enter/leave cycles", async () => { - const user = userEvent.setup(); - render(); - - const container = screen.getByTestId("ref-container"); - const portal = document.getElementById("portal"); - - // First cycle - await user.hover(container); - expect(portal?.style.display).toBe("block"); - - await user.unhover(container); - expect(portal?.style.display).toBe("none"); - - // Second cycle - await user.hover(container); - expect(portal?.style.display).toBe("block"); - - await user.unhover(container); - expect(portal?.style.display).toBe("none"); - }); - - test("should handle rapid mouse events", async () => { - const user = userEvent.setup(); - render(); - - const container = screen.getByTestId("ref-container"); - const portal = document.getElementById("portal"); - - // Rapid sequence - await user.hover(container); - await user.unhover(container); - await user.hover(container); - - expect(portal?.style.display).toBe("block"); - }); - - test("should maintain portal existence across multiple component instances", () => { - // Render first instance - const { unmount } = render(); - expect(document.getElementById("portal")).toBeInTheDocument(); - - // Unmount first instance - unmount(); - - // Render second instance - render(); - expect(document.getElementById("portal")).toBeInTheDocument(); - }); -}); From 26398acf321cc6edcb0227aa6117968f3eb883e4 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:36:48 +0100 Subject: [PATCH 08/11] feat(ui-common): create DataGridForm component --- webapp/src/components/common/DataGridForm.tsx | 320 ++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 webapp/src/components/common/DataGridForm.tsx diff --git a/webapp/src/components/common/DataGridForm.tsx b/webapp/src/components/common/DataGridForm.tsx new file mode 100644 index 0000000000..1ae6c8064c --- /dev/null +++ b/webapp/src/components/common/DataGridForm.tsx @@ -0,0 +1,320 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { IdType } from "@/common/types"; +import { + GridCellKind, + type Item, + type DataEditorProps, + type GridColumn, + type FillHandleDirection, +} from "@glideapps/glide-data-grid"; +import type { DeepPartial } from "react-hook-form"; +import { FormEvent, useCallback, useState } from "react"; +import DataGrid from "./DataGrid"; +import { + Box, + Divider, + IconButton, + SxProps, + Theme, + Tooltip, +} from "@mui/material"; +import useUndo from "use-undo"; +import UndoIcon from "@mui/icons-material/Undo"; +import RedoIcon from "@mui/icons-material/Redo"; +import SaveIcon from "@mui/icons-material/Save"; +import { useTranslation } from "react-i18next"; +import { LoadingButton } from "@mui/lab"; +import { mergeSxProp } from "@/utils/muiUtils"; +import * as R from "ramda"; +import { SubmitHandlerPlus } from "./Form/types"; +import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; +import useFormCloseProtection from "@/hooks/useCloseFormSecurity"; + +type GridFieldValuesByRow = Record< + IdType, + Record +>; + +export interface DataGridFormProps< + TFieldValues extends GridFieldValuesByRow = GridFieldValuesByRow, + SubmitReturnValue = unknown, +> { + defaultData: TFieldValues; + columns: ReadonlyArray; + allowedFillDirections?: FillHandleDirection; + onSubmit?: ( + data: SubmitHandlerPlus, + event?: React.BaseSyntheticEvent, + ) => void | Promise; + onSubmitSuccessful?: ( + data: SubmitHandlerPlus, + submitResult: SubmitReturnValue, + ) => void; + sx?: SxProps; + extraActions?: React.ReactNode; +} + +function DataGridForm({ + defaultData, + columns, + allowedFillDirections = "vertical", + onSubmit, + onSubmitSuccessful, + sx, + extraActions, +}: DataGridFormProps) { + const { t } = useTranslation(); + const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); + const [isSubmitting, setIsSubmitting] = useState(false); + const [savedData, setSavedData] = useState(defaultData); + const [{ present: data }, { set, undo, redo, canUndo, canRedo }] = + useUndo(defaultData); + + const isSubmitAllowed = savedData !== data; + + useFormCloseProtection({ + isSubmitting, + isDirty: isSubmitAllowed, + }); + + //////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////// + + const getRowAndColumnNames = (location: Item) => { + const [colIndex, rowIndex] = location; + const rowNames = Object.keys(data); + const columnIds = columns.map((column) => column.id); + + return [rowNames[rowIndex], columnIds[colIndex]]; + }; + + const getDirtyValues = () => { + return Object.keys(data).reduce((acc, rowName) => { + const rowData = data[rowName]; + const savedRowData = savedData[rowName]; + + const dirtyColumns = Object.keys(rowData).filter( + (columnName) => rowData[columnName] !== savedRowData[columnName], + ); + + if (dirtyColumns.length > 0) { + return { + ...acc, + [rowName]: dirtyColumns.reduce( + (acc, columnName) => ({ + ...acc, + [columnName]: rowData[columnName], + }), + {}, + ), + }; + } + + return acc; + }, {} as DeepPartial); + }; + + //////////////////////////////////////////////////////////////// + // Callbacks + //////////////////////////////////////////////////////////////// + + const getCellContent = useCallback( + (location) => { + const [rowName, columnName] = getRowAndColumnNames(location); + const dataRow = data[rowName]; + const cellData = dataRow?.[columnName]; + + if (typeof cellData == "string") { + return { + kind: GridCellKind.Text, + data: cellData, + displayData: cellData, + allowOverlay: true, + }; + } + + if (typeof cellData == "number") { + return { + kind: GridCellKind.Number, + data: cellData, + displayData: cellData.toString(), + allowOverlay: true, + contentAlign: "right", + thousandSeparator: " ", + }; + } + + if (typeof cellData == "boolean") { + return { + kind: GridCellKind.Boolean, + data: cellData, + allowOverlay: false, + }; + } + + return { + kind: GridCellKind.Text, + data: "", + displayData: "", + allowOverlay: true, + readonly: true, + }; + }, + [data, columns], + ); + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleCellsEdited: DataEditorProps["onCellsEdited"] = (items) => { + set( + items.reduce((acc, { location, value }) => { + const [rowName, columnName] = getRowAndColumnNames(location); + const newValue = value.data; + + if (R.isNotNil(newValue)) { + return { + ...acc, + [rowName]: { + ...acc[rowName], + [columnName]: newValue, + }, + }; + } + + return acc; + }, data), + ); + + return true; + }; + + const handleFormSubmit = (event: FormEvent) => { + event.preventDefault(); + + if (!onSubmit) { + return; + } + + setIsSubmitting(true); + + const dataArg = { + values: data, + dirtyValues: getDirtyValues(), + }; + + Promise.resolve(onSubmit(dataArg, event)) + .then((submitRes) => { + setSavedData(data); + onSubmitSuccessful?.(dataArg, submitRes); + }) + .catch((err) => { + enqueueErrorSnackbar(t("form.submit.error"), err); + }) + .finally(() => { + setIsSubmitting(false); + }); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + Object.keys(data)[index], + }} + fillHandle + allowedFillDirections={allowedFillDirections} + getCellsForSelection + /> + + + + } + > + {t("global.save")} + + + + + + + + + + + + + + + + + {extraActions && ( + + {extraActions} + + )} + + + + ); +} + +export default DataGridForm; From 63bfe448d0593e7bc3e3d587fae1555d279199f9 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:44:42 +0100 Subject: [PATCH 09/11] feat(ui-tablemode): replace Handsontable and remove context menu --- .../explore/TableModeList/index.tsx | 74 +++++++++++-------- .../explore/common/ListElement.tsx | 58 --------------- webapp/src/components/common/Form/types.ts | 1 - webapp/src/components/common/TableMode.tsx | 71 +++++++++++------- 4 files changed, 89 insertions(+), 115 deletions(-) diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx index 1f381e17bc..c281d9c774 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx @@ -13,10 +13,11 @@ */ import { useEffect, useState } from "react"; -import { MenuItem } from "@mui/material"; +import { Button } from "@mui/material"; import { useOutletContext } from "react-router"; import { useUpdateEffect } from "react-use"; import { useTranslation } from "react-i18next"; +import EditIcon from "@mui/icons-material/Edit"; import DeleteIcon from "@mui/icons-material/Delete"; import { v4 as uuidv4 } from "uuid"; import PropertiesView from "../../../../common/PropertiesView"; @@ -84,7 +85,25 @@ function TableModeList() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleDeleteTemplate = () => { + const handleEditClick = () => { + if (selectedTemplate) { + setDialog({ + type: "edit", + templateId: selectedTemplate.id, + }); + } + }; + + const handleDeleteClick = () => { + if (selectedTemplate) { + setDialog({ + type: "delete", + templateId: selectedTemplate.id, + }); + } + }; + + const handleDelete = () => { setTemplates((templates) => templates.filter((tp) => tp.id !== dialog?.templateId), ); @@ -106,34 +125,6 @@ function TableModeList() { currentElement={selectedTemplate?.id} currentElementKeyToTest="id" setSelectedItem={({ id }) => setSelectedTemplateId(id)} - contextMenuContent={({ element, close }) => ( - <> - { - event.stopPropagation(); - setDialog({ - type: "edit", - templateId: element.id, - }); - close(); - }} - > - Edit - - { - event.stopPropagation(); - setDialog({ - type: "delete", - templateId: element.id, - }); - close(); - }} - > - Delete - - - )} /> } onAdd={() => setDialog({ type: "add", templateId: "" })} @@ -148,6 +139,27 @@ function TableModeList() { studyId={study.id} type={selectedTemplate.type} columns={selectedTemplate.columns} + extraActions={ + <> + + + + } /> )} @@ -173,7 +185,7 @@ function TableModeList() { diff --git a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx index 69b9254d61..5e799e1928 100644 --- a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx +++ b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx @@ -17,14 +17,11 @@ import { ListItemButton, ListItemIcon, ListItemText, - Menu, - PopoverPosition, SxProps, Theme, Tooltip, } from "@mui/material"; import ArrowRightOutlinedIcon from "@mui/icons-material/ArrowRightOutlined"; -import { useState } from "react"; import { IdType } from "../../../../../common/types"; import { mergeSxProp } from "../../../../../utils/muiUtils"; @@ -33,10 +30,6 @@ interface Props { currentElement?: string; currentElementKeyToTest?: keyof T; setSelectedItem: (item: T, index: number) => void; - contextMenuContent?: (props: { - element: T; - close: VoidFunction; - }) => React.ReactElement; sx?: SxProps; } @@ -45,43 +38,8 @@ function ListElement({ currentElement, currentElementKeyToTest, setSelectedItem, - contextMenuContent: ContextMenuContent, sx, }: Props) { - const [contextMenuPosition, setContextMenuPosition] = - useState(null); - const [elementForContext, setElementForContext] = useState(); - - //////////////////////////////////////////////////////////////// - // Event Handlers - //////////////////////////////////////////////////////////////// - - const handleContextMenu = (element: T) => (event: React.MouseEvent) => { - event.preventDefault(); - - if (!ContextMenuContent) { - return; - } - - setElementForContext(element); - - setContextMenuPosition( - contextMenuPosition === null - ? { - left: event.clientX + 2, - top: event.clientY - 6, - } - : // Repeated context menu when it is already open closes it with Chrome 84 on Ubuntu - // Other native context menus might behave different. - // With this behavior we prevent contextmenu from the backdrop to re-locale existing context menus. - null, - ); - }; - - //////////////////////////////////////////////////////////////// - // JSX - //////////////////////////////////////////////////////////////// - return ( ({ justifyContent: "space-between", py: 0, }} - onContextMenu={handleContextMenu(element)} > ({ > - {ContextMenuContent && elementForContext && ( - setContextMenuPosition(null)} - anchorReference="anchorPosition" - anchorPosition={ - contextMenuPosition !== null ? contextMenuPosition : undefined - } - > - setContextMenuPosition(null)} - /> - - )} ))} diff --git a/webapp/src/components/common/Form/types.ts b/webapp/src/components/common/Form/types.ts index d7f27f94fb..a09272e8f1 100644 --- a/webapp/src/components/common/Form/types.ts +++ b/webapp/src/components/common/Form/types.ts @@ -26,7 +26,6 @@ import { } from "react-hook-form"; export interface SubmitHandlerPlus< - // TODO Make parameter required TFieldValues extends FieldValues = FieldValues, > { values: TFieldValues; diff --git a/webapp/src/components/common/TableMode.tsx b/webapp/src/components/common/TableMode.tsx index 1809a93377..1f5bdf2d8f 100644 --- a/webapp/src/components/common/TableMode.tsx +++ b/webapp/src/components/common/TableMode.tsx @@ -25,47 +25,64 @@ import { TableModeType, } from "../../services/api/studies/tableMode/types"; import { SubmitHandlerPlus } from "./Form/types"; -import TableForm from "./TableForm"; import UsePromiseCond from "./utils/UsePromiseCond"; import GridOffIcon from "@mui/icons-material/GridOff"; import EmptyView from "./page/EmptyView"; import { useTranslation } from "react-i18next"; +import DataGridForm, { type DataGridFormProps } from "./DataGridForm"; +import { startCase } from "lodash"; +import type { GridColumn } from "@glideapps/glide-data-grid"; export interface TableModeProps { studyId: StudyMetadata["id"]; type: T; columns: TableModeColumnsForType; + extraActions?: React.ReactNode; } -function TableMode(props: TableModeProps) { - const { studyId, type, columns } = props; - const [filteredColumns, setFilteredColumns] = useState(columns); +function TableMode({ + studyId, + type, + columns, + extraActions, +}: TableModeProps) { const { t } = useTranslation(); + const [gridColumns, setGridColumns] = useState< + DataGridFormProps["columns"] + >([]); + const columnsDep = columns.join(","); const res = usePromise( () => getTableMode({ studyId, tableType: type, columns }), - [studyId, type, columns.join(",")], + [studyId, type, columnsDep], ); // Filter columns based on the data received, because the API may return // fewer columns than requested depending on the study version - useEffect( - () => { - const dataKeys = Object.keys(res.data || {}); + useEffect(() => { + const data = res.data || {}; + const rowNames = Object.keys(data); - if (dataKeys.length === 0) { - setFilteredColumns([]); - return; - } + if (rowNames.length === 0) { + setGridColumns([]); + return; + } - const data = res.data!; - const dataRowKeys = Object.keys(data[dataKeys[0]]); + const columnNames = Object.keys(data[rowNames[0]]); - setFilteredColumns(columns.filter((col) => dataRowKeys.includes(col))); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [res.data, columns.join(",")], - ); + setGridColumns( + columns + .filter((col) => columnNames.includes(col)) + .map((col) => { + const title = startCase(col); + return { + title, + id: col, + width: title.length * 10, + } satisfies GridColumn; + }), + ); + }, [res.data, columnsDep]); //////////////////////////////////////////////////////////////// // Event Handlers @@ -83,15 +100,19 @@ function TableMode(props: TableModeProps) { - filteredColumns.length > 0 ? ( - 0 ? ( + ) : ( - + ) } /> From 3f957770b1f29bf5ddcebd0818aa469ed965c02f Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:50:27 +0100 Subject: [PATCH 10/11] feat(ui-playlist): replace Handsontable --- webapp/public/locales/en/main.json | 7 +- webapp/public/locales/fr/main.json | 9 +- .../dialogs/ScenarioPlaylistDialog.tsx | 192 ++++++++++++++++++ .../dialogs/ScenarioPlaylistDialog/index.tsx | 156 -------------- .../dialogs/ScenarioPlaylistDialog/utils.ts | 43 ---- .../TimeSeriesManagement/index.tsx | 2 +- webapp/src/components/common/DataGridForm.tsx | 131 +++++++----- webapp/src/components/common/Form/index.tsx | 2 +- webapp/src/hooks/useConfirm.ts | 30 ++- .../api/studies/config/playlist/constants.ts | 15 ++ .../api/studies/config/playlist/index.ts | 36 ++++ .../api/studies/config/playlist/types.ts | 28 +++ 12 files changed, 390 insertions(+), 261 deletions(-) create mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx delete mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx delete mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts create mode 100644 webapp/src/services/api/studies/config/playlist/constants.ts create mode 100644 webapp/src/services/api/studies/config/playlist/index.ts create mode 100644 webapp/src/services/api/studies/config/playlist/types.ts diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 0368e65fcc..2873e51239 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -80,6 +80,7 @@ "global.semicolon": "Semicolon", "global.language": "Language", "global.path": "Path", + "global.weight": "Weight", "global.time.hourly": "Hourly", "global.time.daily": "Daily", "global.time.weekly": "Weekly", @@ -136,8 +137,8 @@ "maintenance.error.messageInfoError": "Unable to retrieve message info", "maintenance.error.maintenanceError": "Unable to retrieve maintenance status", "form.submit.error": "Error while submitting", - "form.submit.inProgress": "The form is being submitted. Are you sure you want to leave the page?", - "form.changeNotSaved": "The form has not been saved. Are you sure you want to leave the page?", + "form.submit.inProgress": "The form is being submitted. Are you sure you want to close it?", + "form.changeNotSaved": "The form has not been saved. Are you sure you want to close it?", "form.asyncDefaultValues.error": "Failed to get values", "form.field.required": "Field required", "form.field.duplicate": "Value already exists", @@ -361,8 +362,6 @@ "study.configuration.general.mcScenarioPlaylist.action.disableAll": "Disable all", "study.configuration.general.mcScenarioPlaylist.action.reverse": "Reverse", "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Reset weights", - "study.configuration.general.mcScenarioPlaylist.status": "Status", - "study.configuration.general.mcScenarioPlaylist.weight": "Weight", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", "study.configuration.general.thematicTrimming.action.enableAll": "Enable all", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index ad6ba562bf..0cf1689f75 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -80,6 +80,7 @@ "global.semicolon": "Point-virgule", "global.language": "Langue", "global.path": "Chemin", + "global.weight": "Poids", "global.time.hourly": "Horaire", "global.time.daily": "Journalier", "global.time.weekly": "Hebdomadaire", @@ -136,8 +137,8 @@ "maintenance.error.messageInfoError": "Impossible de récupérer le message d'info", "maintenance.error.maintenanceError": "Impossible de récupérer le status de maintenance de l'application", "form.submit.error": "Erreur lors de la soumission", - "form.submit.inProgress": "Le formulaire est en cours de soumission. Etes-vous sûr de vouloir quitter la page ?", - "form.changeNotSaved": "Le formulaire n'a pas été sauvegardé. Etes-vous sûr de vouloir quitter la page ?", + "form.submit.inProgress": "Le formulaire est en cours de soumission. Etes-vous sûr de vouloir le fermer ?", + "form.changeNotSaved": "Le formulaire n'a pas été sauvegardé. Etes-vous sûr de vouloir le fermer ?", "form.asyncDefaultValues.error": "Impossible d'obtenir les valeurs", "form.field.required": "Champ requis", "form.field.duplicate": "Cette valeur existe déjà", @@ -360,9 +361,7 @@ "study.configuration.general.mcScenarioPlaylist.action.enableAll": "Activer tous", "study.configuration.general.mcScenarioPlaylist.action.disableAll": "Désactiver tous", "study.configuration.general.mcScenarioPlaylist.action.reverse": "Inverser", - "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Reset weights", - "study.configuration.general.mcScenarioPlaylist.status": "Status", - "study.configuration.general.mcScenarioPlaylist.weight": "Weight", + "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Réinitialiser les poids", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", "study.configuration.general.thematicTrimming.action.enableAll": "Activer tout", diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx new file mode 100644 index 0000000000..b0a237eb0a --- /dev/null +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx @@ -0,0 +1,192 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { Button, ButtonGroup, Divider } from "@mui/material"; +import { useMemo, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import * as R from "ramda"; +import * as RA from "ramda-adjunct"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import usePromise from "../../../../../../../hooks/usePromise"; +import BasicDialog from "../../../../../../common/dialogs/BasicDialog"; +import UsePromiseCond from "../../../../../../common/utils/UsePromiseCond"; +import type { SubmitHandlerPlus } from "../../../../../../common/Form/types"; +import DataGridForm, { + DataGridFormState, + type DataGridFormApi, +} from "@/components/common/DataGridForm"; +import ConfirmationDialog from "@/components/common/dialogs/ConfirmationDialog"; +import useConfirm from "@/hooks/useConfirm"; +import type { PlaylistData } from "@/services/api/studies/config/playlist/types"; +import { + getPlaylistData, + setPlaylistData, +} from "@/services/api/studies/config/playlist"; +import { DEFAULT_WEIGHT } from "@/services/api/studies/config/playlist/constants"; + +interface Props { + study: StudyMetadata; + open: boolean; + onClose: VoidFunction; +} + +function ScenarioPlaylistDialog(props: Props) { + const { study, open, onClose } = props; + const { t } = useTranslation(); + const dataGridApiRef = useRef>(null); + const [isSubmitting, setIsSubmitting] = useState(false); + const [isDirty, setIsDirty] = useState(false); + const closeAction = useConfirm(); + const res = usePromise( + () => getPlaylistData({ studyId: study.id }), + [study.id], + ); + + const columns = useMemo(() => { + return [ + { + id: "status" as const, + title: t("global.status"), + grow: 1, + }, + { + id: "weight" as const, + title: t("global.weight"), + grow: 1, + }, + ]; + }, [t]); + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleUpdateStatus = (fn: RA.Pred) => () => { + if (dataGridApiRef.current) { + const { data, setData } = dataGridApiRef.current; + setData(R.map(R.evolve({ status: fn }), data)); + } + }; + + const handleResetWeights = () => { + if (dataGridApiRef.current) { + const { data, setData } = dataGridApiRef.current; + setData(R.map(R.assoc("weight", DEFAULT_WEIGHT), data)); + } + }; + + const handleSubmit = (data: SubmitHandlerPlus) => { + return setPlaylistData({ studyId: study.id, data: data.values }); + }; + + const handleClose = () => { + if (isSubmitting) { + return; + } + + if (isDirty) { + return closeAction.showConfirm().then((confirm) => { + if (confirm) { + onClose(); + } + }); + } + + onClose(); + }; + + const handleFormStateChange = (formState: DataGridFormState) => { + setIsSubmitting(formState.isSubmitting); + setIsDirty(formState.isDirty); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + {t("global.close")} + + } + PaperProps={{ sx: { height: 700 } }} + maxWidth="md" + fullWidth + > + ( + <> + + + + + + + + + `MC Year ${index + 1}`, + }} + onSubmit={handleSubmit} + onStateChange={handleFormStateChange} + apiRef={dataGridApiRef} + enableColumnResize={false} + /> + + {t("form.changeNotSaved")} + + + )} + /> + + ); +} + +export default ScenarioPlaylistDialog; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx deleted file mode 100644 index abb04d0a88..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { Box, Button, Divider } from "@mui/material"; -import { useRef } from "react"; -import { useTranslation } from "react-i18next"; -import * as R from "ramda"; -import * as RA from "ramda-adjunct"; -import Handsontable from "handsontable"; -import { StudyMetadata } from "../../../../../../../../common/types"; -import usePromise from "../../../../../../../../hooks/usePromise"; -import BasicDialog from "../../../../../../../common/dialogs/BasicDialog"; -import TableForm from "../../../../../../../common/TableForm"; -import UsePromiseCond from "../../../../../../../common/utils/UsePromiseCond"; -import { - DEFAULT_WEIGHT, - getPlaylist, - PlaylistData, - setPlaylist, -} from "./utils"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { - HandsontableProps, - HotTableClass, -} from "../../../../../../../common/Handsontable"; - -interface Props { - study: StudyMetadata; - open: boolean; - onClose: VoidFunction; -} - -function ScenarioPlaylistDialog(props: Props) { - const { study, open, onClose } = props; - const { t } = useTranslation(); - const tableRef = useRef({} as HotTableClass); - const res = usePromise(() => getPlaylist(study.id), [study.id]); - - //////////////////////////////////////////////////////////////// - // Event Handlers - //////////////////////////////////////////////////////////////// - - const handleUpdateStatus = (fn: RA.Pred) => () => { - const api = tableRef.current.hotInstance; - if (!api) { - return; - } - - const changes: Array<[number, string, boolean]> = api - .getDataAtProp("status") - .map((status, index) => [index, "status", fn(status)]); - - api.setDataAtRowProp(changes); - }; - - const handleResetWeights = () => { - const api = tableRef.current.hotInstance as Handsontable; - - api.setDataAtRowProp( - api.rowIndexMapper - .getIndexesSequence() - .map((rowIndex) => [rowIndex, "weight", DEFAULT_WEIGHT]), - ); - }; - - const handleSubmit = (data: SubmitHandlerPlus) => { - return setPlaylist(study.id, data.values); - }; - - const handleCellsRender: HandsontableProps["cells"] = function cells( - this, - row, - column, - prop, - ) { - if (prop === "weight") { - const status = this.instance.getDataAtRowProp(row, "status"); - return { readOnly: !status }; - } - return {}; - }; - - //////////////////////////////////////////////////////////////// - // JSX - //////////////////////////////////////////////////////////////// - - return ( - {t("global.close")}} - // TODO: add `maxHeight` and `fullHeight` in BasicDialog` - PaperProps={{ sx: { height: 500 } }} - maxWidth="sm" - fullWidth - > - ( - <> - - - - - - - - - `MC Year ${row.id}`, - tableRef, - stretchH: "all", - className: "htCenter", - cells: handleCellsRender, - }} - /> - - )} - /> - - ); -} - -export default ScenarioPlaylistDialog; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts deleted file mode 100644 index bd7c015df8..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { StudyMetadata } from "../../../../../../../../common/types"; -import client from "../../../../../../../../services/api/client"; - -interface PlaylistColumns extends Record { - status: boolean; - weight: number; -} - -export type PlaylistData = Record; - -export const DEFAULT_WEIGHT = 1; - -function makeRequestURL(studyId: StudyMetadata["id"]): string { - return `v1/studies/${studyId}/config/playlist/form`; -} - -export async function getPlaylist( - studyId: StudyMetadata["id"], -): Promise { - const res = await client.get(makeRequestURL(studyId)); - return res.data; -} - -export function setPlaylist( - studyId: StudyMetadata["id"], - data: PlaylistData, -): Promise { - return client.put(makeRequestURL(studyId), data); -} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx index c888c774ab..3c04d03707 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx @@ -31,7 +31,7 @@ function TimeSeriesManagement() { const { study } = useOutletContext<{ study: StudyMetadata }>(); const { t } = useTranslation(); const [launchTaskInProgress, setLaunchTaskInProgress] = useState(false); - const apiRef = useRef>(); + const apiRef = useRef>(null); const handleGenerateTs = usePromiseHandler({ fn: generateTimeSeries, diff --git a/webapp/src/components/common/DataGridForm.tsx b/webapp/src/components/common/DataGridForm.tsx index 1ae6c8064c..3e1cde6871 100644 --- a/webapp/src/components/common/DataGridForm.tsx +++ b/webapp/src/components/common/DataGridForm.tsx @@ -12,7 +12,6 @@ * This file is part of the Antares project. */ -import type { IdType } from "@/common/types"; import { GridCellKind, type Item, @@ -21,17 +20,18 @@ import { type FillHandleDirection, } from "@glideapps/glide-data-grid"; import type { DeepPartial } from "react-hook-form"; -import { FormEvent, useCallback, useState } from "react"; -import DataGrid from "./DataGrid"; +import { FormEvent, useCallback, useEffect, useMemo, useState } from "react"; +import DataGrid, { DataGridProps } from "./DataGrid"; import { Box, Divider, IconButton, + setRef, SxProps, Theme, Tooltip, } from "@mui/material"; -import useUndo from "use-undo"; +import useUndo, { type Actions } from "use-undo"; import UndoIcon from "@mui/icons-material/Undo"; import RedoIcon from "@mui/icons-material/Redo"; import SaveIcon from "@mui/icons-material/Save"; @@ -42,53 +42,88 @@ import * as R from "ramda"; import { SubmitHandlerPlus } from "./Form/types"; import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; import useFormCloseProtection from "@/hooks/useCloseFormSecurity"; +import { useUpdateEffect } from "react-use"; +import { toError } from "@/utils/fnUtils"; -type GridFieldValuesByRow = Record< - IdType, - Record ->; +type Data = Record>; + +export interface DataGridFormState { + isDirty: boolean; + isSubmitting: boolean; +} + +export interface DataGridFormApi { + data: TData; + setData: Actions["set"]; + formState: DataGridFormState; +} export interface DataGridFormProps< - TFieldValues extends GridFieldValuesByRow = GridFieldValuesByRow, + TData extends Data = Data, SubmitReturnValue = unknown, > { - defaultData: TFieldValues; - columns: ReadonlyArray; + defaultData: TData; + columns: ReadonlyArray; + rowMarkers?: DataGridProps["rowMarkers"]; allowedFillDirections?: FillHandleDirection; - onSubmit?: ( - data: SubmitHandlerPlus, + enableColumnResize?: boolean; + onSubmit: ( + data: SubmitHandlerPlus, event?: React.BaseSyntheticEvent, ) => void | Promise; onSubmitSuccessful?: ( - data: SubmitHandlerPlus, + data: SubmitHandlerPlus, submitResult: SubmitReturnValue, ) => void; + onStateChange?: (state: DataGridFormState) => void; sx?: SxProps; extraActions?: React.ReactNode; + apiRef?: React.Ref>; } -function DataGridForm({ +function DataGridForm({ defaultData, columns, allowedFillDirections = "vertical", + enableColumnResize, + rowMarkers, onSubmit, onSubmitSuccessful, + onStateChange, sx, extraActions, -}: DataGridFormProps) { + apiRef, +}: DataGridFormProps) { const { t } = useTranslation(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [isSubmitting, setIsSubmitting] = useState(false); const [savedData, setSavedData] = useState(defaultData); - const [{ present: data }, { set, undo, redo, canUndo, canRedo }] = + const [{ present: data }, { set: setData, undo, redo, canUndo, canRedo }] = useUndo(defaultData); - const isSubmitAllowed = savedData !== data; + // Shallow comparison to check if the data has changed. + // So even if the content are the same, we consider it as dirty. + // Deep comparison fix the issue but with big data it can be slow. + const isDirty = savedData !== data; + + const rowNames = Object.keys(data); + + const formState = useMemo( + () => ({ + isDirty, + isSubmitting, + }), + [isDirty, isSubmitting], + ); + + useFormCloseProtection({ isSubmitting, isDirty }); - useFormCloseProtection({ - isSubmitting, - isDirty: isSubmitAllowed, - }); + useUpdateEffect(() => onStateChange?.(formState), [formState]); + + useEffect( + () => setRef(apiRef, { data, setData, formState }), + [apiRef, data, setData, formState], + ); //////////////////////////////////////////////////////////////// // Utils @@ -96,14 +131,13 @@ function DataGridForm({ const getRowAndColumnNames = (location: Item) => { const [colIndex, rowIndex] = location; - const rowNames = Object.keys(data); const columnIds = columns.map((column) => column.id); return [rowNames[rowIndex], columnIds[colIndex]]; }; const getDirtyValues = () => { - return Object.keys(data).reduce((acc, rowName) => { + return rowNames.reduce((acc, rowName) => { const rowData = data[rowName]; const savedRowData = savedData[rowName]; @@ -125,11 +159,11 @@ function DataGridForm({ } return acc; - }, {} as DeepPartial); + }, {} as DeepPartial); }; //////////////////////////////////////////////////////////////// - // Callbacks + // Content //////////////////////////////////////////////////////////////// const getCellContent = useCallback( @@ -182,7 +216,7 @@ function DataGridForm({ //////////////////////////////////////////////////////////////// const handleCellsEdited: DataEditorProps["onCellsEdited"] = (items) => { - set( + setData( items.reduce((acc, { location, value }) => { const [rowName, columnName] = getRowAndColumnNames(location); const newValue = value.data; @@ -204,13 +238,9 @@ function DataGridForm({ return true; }; - const handleFormSubmit = (event: FormEvent) => { + const handleSubmit = async (event: FormEvent) => { event.preventDefault(); - if (!onSubmit) { - return; - } - setIsSubmitting(true); const dataArg = { @@ -218,17 +248,15 @@ function DataGridForm({ dirtyValues: getDirtyValues(), }; - Promise.resolve(onSubmit(dataArg, event)) - .then((submitRes) => { - setSavedData(data); - onSubmitSuccessful?.(dataArg, submitRes); - }) - .catch((err) => { - enqueueErrorSnackbar(t("form.submit.error"), err); - }) - .finally(() => { - setIsSubmitting(false); - }); + try { + const submitRes = await onSubmit(dataArg, event); + setSavedData(data); + onSubmitSuccessful?.(dataArg, submitRes); + } catch (err) { + enqueueErrorSnackbar(t("form.submit.error"), toError(err)); + } finally { + setIsSubmitting(false); + } }; //////////////////////////////////////////////////////////////// @@ -247,19 +275,22 @@ function DataGridForm({ sx, )} component="form" - onSubmit={handleFormSubmit} + onSubmit={handleSubmit} > Object.keys(data)[index], - }} + rowMarkers={ + rowMarkers || { + kind: "clickable-string", + getTitle: (index) => rowNames[index], + } + } fillHandle allowedFillDirections={allowedFillDirections} + enableColumnResize={enableColumnResize} getCellsForSelection /> ({ ; - apiRef?: React.Ref | undefined>; + apiRef?: React.Ref>; } export function useFormContextPlus() { diff --git a/webapp/src/hooks/useConfirm.ts b/webapp/src/hooks/useConfirm.ts index 4df7890c7f..537674d220 100644 --- a/webapp/src/hooks/useConfirm.ts +++ b/webapp/src/hooks/useConfirm.ts @@ -22,7 +22,35 @@ function errorFunction() { /** * Hook that allows to wait for a confirmation from the user with a `Promise`. * It is intended to be used in conjunction with a confirm view (like `ConfirmationDialog`). - + * + * @example + * ```tsx + * const action = useConfirm(); + * + * return ( + * <> + * + * + * Are you sure? + * + * + * ); + * ``` + * * @returns An object with the following properties: * - `showConfirm`: A function that returns a `Promise` that resolves to `true` if the user confirms, * `false` if the user refuses, and `null` if the user cancel. diff --git a/webapp/src/services/api/studies/config/playlist/constants.ts b/webapp/src/services/api/studies/config/playlist/constants.ts new file mode 100644 index 0000000000..bec0c020cb --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/constants.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export const DEFAULT_WEIGHT = 1; diff --git a/webapp/src/services/api/studies/config/playlist/index.ts b/webapp/src/services/api/studies/config/playlist/index.ts new file mode 100644 index 0000000000..40ee7b21c1 --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/index.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { StudyMetadata } from "@/common/types"; +import client from "@/services/api/client"; +import { format } from "@/utils/stringUtils"; +import type { PlaylistData, SetPlaylistDataParams } from "./types"; + +const URL = "/v1/studies/{studyId}/config/playlist/form"; + +export async function getPlaylistData(params: { + studyId: StudyMetadata["id"]; +}) { + const url = format(URL, { studyId: params.studyId }); + const { data } = await client.get(url); + return data; +} + +export async function setPlaylistData({ + studyId, + data, +}: SetPlaylistDataParams) { + const url = format(URL, { studyId }); + await client.put(url, data); +} diff --git a/webapp/src/services/api/studies/config/playlist/types.ts b/webapp/src/services/api/studies/config/playlist/types.ts new file mode 100644 index 0000000000..9eeae5441e --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/types.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { StudyMetadata } from "@/common/types"; + +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type Playlist = { + status: boolean; + weight: number; +}; + +export type PlaylistData = Record; + +export interface SetPlaylistDataParams { + studyId: StudyMetadata["id"]; + data: PlaylistData; +} From d14454ab3b5d91dc9136a89fea044485b8305b2e Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:48:36 +0100 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20add=20an=20endpoint=20to=20allow?= =?UTF-8?q?=20multiple=20deletion=20of=20binding=20constrain=E2=80=A6=20(#?= =?UTF-8?q?2298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/binding_constraint_management.py | 40 +++++++ .../variantstudy/business/command_reverter.py | 11 ++ .../storage/variantstudy/command_factory.py | 4 + .../model/command/binding_constraint_utils.py | 35 ++++++ .../variantstudy/model/command/common.py | 1 + .../command/create_binding_constraint.py | 22 +--- .../command/remove_binding_constraint.py | 2 +- .../remove_multiple_binding_constraints.py | 111 ++++++++++++++++++ antarest/study/web/study_data_blueprint.py | 19 +++ .../test_binding_constraints.py | 36 ++++++ tests/variantstudy/test_command_factory.py | 10 ++ 11 files changed, 269 insertions(+), 22 deletions(-) create mode 100644 antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py create mode 100644 antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index 1fb5d48a0d..fd3970b9b1 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -70,6 +70,9 @@ ) from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.command.remove_binding_constraint import RemoveBindingConstraint +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_binding_constraint import ( UpdateBindingConstraint, @@ -589,6 +592,18 @@ def terms_to_coeffs(terms: t.Sequence[ConstraintTerm]) -> t.Dict[str, t.List[flo coeffs[term.id].append(term.offset) return coeffs + def check_binding_constraints_exists(self, study: Study, bc_ids: t.List[str]) -> None: + storage_service = self.storage_service.get_storage(study) + file_study = storage_service.get_raw(study) + existing_constraints = file_study.tree.get(["input", "bindingconstraints", "bindingconstraints"]) + + existing_ids = {constraint["id"] for constraint in existing_constraints.values()} + + missing_bc_ids = [bc_id for bc_id in bc_ids if bc_id not in existing_ids] + + if missing_bc_ids: + raise BindingConstraintNotFound(f"Binding constraint(s) '{missing_bc_ids}' not found") + def get_binding_constraint(self, study: Study, bc_id: str) -> ConstraintOutput: """ Retrieves a binding constraint by its ID within a given study. @@ -1018,6 +1033,31 @@ def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> ) execute_or_add_commands(study, file_study, [command], self.storage_service) + def remove_multiple_binding_constraints(self, study: Study, binding_constraints_ids: t.List[str]) -> None: + """ + Removes multiple binding constraints from a study. + + Args: + study: The study from which to remove the constraint. + binding_constraints_ids: The IDs of the binding constraints to remove. + + Raises: + BindingConstraintNotFound: If at least one binding constraint within the specified list is not found. + """ + + self.check_binding_constraints_exists(study, binding_constraints_ids) + + command_context = self.storage_service.variant_study_service.command_factory.command_context + file_study = self.storage_service.get_storage(study).get_raw(study) + + command = RemoveMultipleBindingConstraints( + ids=binding_constraints_ids, + command_context=command_context, + study_version=file_study.config.version, + ) + + execute_or_add_commands(study, file_study, [command], self.storage_service) + def _update_constraint_with_terms( self, study: Study, bc: ConstraintOutput, terms: t.Mapping[str, ConstraintTerm] ) -> None: diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index d5971dd69e..4b74d2a0ba 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -38,6 +38,9 @@ from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource @@ -163,6 +166,14 @@ def _revert_remove_binding_constraint( ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveBindingConstraint is not available") + @staticmethod + def _revert_remove_multiple_binding_constraints( + base_command: RemoveMultipleBindingConstraints, + history: t.List["ICommand"], + base: FileStudy, + ) -> t.List[ICommand]: + raise NotImplementedError("The revert function for RemoveMultipleBindingConstraints is not available") + @staticmethod def _revert_update_scenario_builder( base_command: UpdateScenarioBuilder, diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 9638141643..f20f0ef58d 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -37,6 +37,9 @@ from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource @@ -63,6 +66,7 @@ CommandName.CREATE_BINDING_CONSTRAINT.value: CreateBindingConstraint, CommandName.UPDATE_BINDING_CONSTRAINT.value: UpdateBindingConstraint, CommandName.REMOVE_BINDING_CONSTRAINT.value: RemoveBindingConstraint, + CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value: RemoveMultipleBindingConstraints, CommandName.CREATE_THERMAL_CLUSTER.value: CreateCluster, CommandName.REMOVE_THERMAL_CLUSTER.value: RemoveCluster, CommandName.CREATE_RENEWABLES_CLUSTER.value: CreateRenewablesCluster, diff --git a/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py b/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py new file mode 100644 index 0000000000..45d40d5bc5 --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py @@ -0,0 +1,35 @@ +# Copyright (c) 2025, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy + + +def remove_bc_from_scenario_builder(study_data: FileStudy, removed_groups: t.Set[str]) -> None: + """ + Update the scenario builder by removing the rows that correspond to the BC groups to remove. + + NOTE: this update can be very long if the scenario builder configuration is large. + """ + if not removed_groups: + return + + rulesets = study_data.tree.get(["settings", "scenariobuilder"]) + + for ruleset in rulesets.values(): + for key in list(ruleset): + # The key is in the form "symbol,group,year" + symbol, *parts = key.split(",") + if symbol == "bc" and parts[0] in removed_groups: + del ruleset[key] + + study_data.tree.save(rulesets, ["settings", "scenariobuilder"]) diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index 744c87d22c..e91a0e2e58 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -39,6 +39,7 @@ class CommandName(Enum): CREATE_BINDING_CONSTRAINT = "create_binding_constraint" UPDATE_BINDING_CONSTRAINT = "update_binding_constraint" REMOVE_BINDING_CONSTRAINT = "remove_binding_constraint" + REMOVE_MULTIPLE_BINDING_CONSTRAINTS = "remove_multiple_binding_constraints" CREATE_THERMAL_CLUSTER = "create_cluster" REMOVE_THERMAL_CLUSTER = "remove_cluster" CREATE_RENEWABLES_CLUSTER = "create_renewables_cluster" diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index b76f092086..766934c8ee 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -38,6 +38,7 @@ from antarest.study.storage.variantstudy.business.utils_binding_constraint import ( parse_bindings_coeffs_and_save_into_config, ) +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener @@ -503,24 +504,3 @@ def match(self, other: "ICommand", equal: bool = False) -> bool: if not equal: return self.name == other.name return super().match(other, equal) - - -def remove_bc_from_scenario_builder(study_data: FileStudy, removed_groups: t.Set[str]) -> None: - """ - Update the scenario builder by removing the rows that correspond to the BC groups to remove. - - NOTE: this update can be very long if the scenario builder configuration is large. - """ - if not removed_groups: - return - - rulesets = study_data.tree.get(["settings", "scenariobuilder"]) - - for ruleset in rulesets.values(): - for key in list(ruleset): - # The key is in the form "symbol,group,year" - symbol, *parts = key.split(",") - if symbol == "bc" and parts[0] in removed_groups: - del ruleset[key] - - study_data.tree.save(rulesets, ["settings", "scenariobuilder"]) diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index b05b51efc4..482ffc5a1b 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -19,8 +19,8 @@ from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import DEFAULT_GROUP from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener from antarest.study.storage.variantstudy.model.model import CommandDTO diff --git a/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py new file mode 100644 index 0000000000..7747f4945f --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py @@ -0,0 +1,111 @@ +# Copyright (c) 2025, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from typing_extensions import override + +from antarest.study.model import STUDY_VERSION_8_7 +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import DEFAULT_GROUP +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput +from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand, OutputTuple +from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener +from antarest.study.storage.variantstudy.model.model import CommandDTO + + +class RemoveMultipleBindingConstraints(ICommand): + """ + Command used to remove multiple binding constraints at once. + """ + + command_name: CommandName = CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS + version: int = 1 + + # Properties of the `REMOVE_MULTIPLE_BINDING_CONSTRAINTS` command: + ids: t.List[str] + + @override + def _apply_config(self, study_data: FileStudyTreeConfig) -> OutputTuple: + # If at least one bc is missing in the database, we raise an error + already_existing_ids = {binding.id for binding in study_data.bindings} + missing_bc_ids = [id_ for id_ in self.ids if id_ not in already_existing_ids] + if missing_bc_ids: + return CommandOutput(status=False, message=f"Binding constraint not found: '{missing_bc_ids}'"), {} + return CommandOutput(status=True), {} + + @override + def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: + command_output, _ = self._apply_config(study_data.config) + + if not command_output.status: + return command_output + + binding_constraints = study_data.tree.get(["input", "bindingconstraints", "bindingconstraints"]) + + old_groups = {bd.get("group", DEFAULT_GROUP).lower() for bd in binding_constraints.values()} + + deleted_binding_constraints = [] + + for key in list(binding_constraints.keys()): + if binding_constraints[key].get("id") in self.ids: + deleted_binding_constraints.append(binding_constraints.pop(key)) + + study_data.tree.save( + binding_constraints, + ["input", "bindingconstraints", "bindingconstraints"], + ) + + existing_files = study_data.tree.get(["input", "bindingconstraints"], depth=1) + for bc in deleted_binding_constraints: + if study_data.config.version < STUDY_VERSION_8_7: + study_data.tree.delete(["input", "bindingconstraints", bc.get("id")]) + else: + for term in ["lt", "gt", "eq"]: + matrix_id = f"{bc.get('id')}_{term}" + if matrix_id in existing_files: + study_data.tree.delete(["input", "bindingconstraints", matrix_id]) + + new_groups = {bd.get("group", DEFAULT_GROUP).lower() for bd in binding_constraints.values()} + removed_groups = old_groups - new_groups + remove_bc_from_scenario_builder(study_data, removed_groups) + + return command_output + + @override + def to_dto(self) -> CommandDTO: + return CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args={ + "ids": self.ids, + }, + study_version=self.study_version, + ) + + @override + def match_signature(self) -> str: + return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + ",".join(self.ids)) + + @override + def match(self, other: ICommand, equal: bool = False) -> bool: + if not isinstance(other, RemoveMultipleBindingConstraints): + return False + return self.ids == other.ids + + @override + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: + return [] + + @override + def get_inner_matrices(self) -> t.List[str]: + return [] diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 9be21c1743..95659ecd7f 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -1378,6 +1378,25 @@ def delete_binding_constraint( study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) return study_service.binding_constraint_manager.remove_binding_constraint(study, binding_constraint_id) + @bp.delete( + "/studies/{uuid}/bindingconstraints", + tags=[APITag.study_data], + summary="Delete multiple binding constraints", + response_model=None, + ) + def delete_multiple_binding_constraints( + uuid: str, binding_constraints_ids: t.List[str], current_user: JWTUser = Depends(auth.get_current_user) + ) -> None: + logger.info( + f"Deleting the binding constraints {binding_constraints_ids!r} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) + return study_service.binding_constraint_manager.remove_multiple_binding_constraints( + study, binding_constraints_ids + ) + @bp.post( "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/term", tags=[APITag.study_data], diff --git a/tests/integration/study_data_blueprint/test_binding_constraints.py b/tests/integration/study_data_blueprint/test_binding_constraints.py index 408cef124d..84b27ded12 100644 --- a/tests/integration/study_data_blueprint/test_binding_constraints.py +++ b/tests/integration/study_data_blueprint/test_binding_constraints.py @@ -972,6 +972,26 @@ def test_for_version_870(self, client: TestClient, user_access_token: str, study binding_constraints_list = preparer.get_binding_constraints(study_id) assert len(binding_constraints_list) == 2 + # Delete multiple binding constraint + preparer.create_binding_constraint(study_id, name="bc1", group="grp1", **args) + preparer.create_binding_constraint(study_id, name="bc2", group="grp2", **args) + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 4 + + res = client.request( + "DELETE", + f"/v1/studies/{study_id}/bindingconstraints", + json=["bc1", "bc2"], + ) + assert res.status_code == 200, res.json() + + # Asserts that the deletion worked + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 2 + actual_ids = [constraint["id"] for constraint in binding_constraints_list] + assert actual_ids == ["binding_constraint_1", "binding_constraint_3"] + # ============================= # CONSTRAINT DUPLICATION # ============================= @@ -1015,6 +1035,22 @@ def test_for_version_870(self, client: TestClient, user_access_token: str, study # ERRORS # ============================= + # Deletion multiple binding constraints, one does not exist. Make sure none is deleted + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 3 + + res = client.request( + "DELETE", + f"/v1/studies/{study_id}/bindingconstraints", + json=["binding_constraint_1", "binding_constraint_2", "binding_constraint_3"], + ) + assert res.status_code == 404, res.json() + assert res.json()["description"] == "Binding constraint(s) '['binding_constraint_2']' not found" + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 3 + # Creation with wrong matrix according to version for operator in ["less", "equal", "greater", "both"]: args["operator"] = operator diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index c4406b50da..a2c392785a 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -159,6 +159,16 @@ CommandDTO( action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8 ), + CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args={"ids": ["id"]}, + study_version=STUDY_VERSION_8_8, + ), + CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args=[{"ids": ["id"]}], + study_version=STUDY_VERSION_8_8, + ), CommandDTO( action=CommandName.CREATE_THERMAL_CLUSTER.value, args={