diff --git a/scripts/constant.py b/scripts/constant.py index c719768..e1be7f5 100644 --- a/scripts/constant.py +++ b/scripts/constant.py @@ -89,6 +89,7 @@ MIGRATE_V211_LIMITS = NETWORK_STORE_SERVER_URL + "/migration/v211limits/{networkId}/{variantNum}" MIGRATE_V214_TAP_CHANGER_STEPS = NETWORK_STORE_SERVER_URL + "/migration/v214tapChangeSteps/{networkId}/{variantNum}" MIGRATE_V221_LIMITS = NETWORK_STORE_SERVER_URL + "/migration/v221limits/{networkId}/{variantNum}" +MIGRATE_V237_LIMITS = NETWORK_STORE_SERVER_URL + "/migration/v237limits/{networkId}/{variantNum}" DELETE_NETWORKS = NETWORK_STORE_SERVER_URL + "/networks" diff --git a/scripts/functions/networks/networks.py b/scripts/functions/networks/networks.py index a04bc6e..52e81da 100644 --- a/scripts/functions/networks/networks.py +++ b/scripts/functions/networks/networks.py @@ -28,3 +28,8 @@ def migrate_v214_tapchangersteps(network_id, variant_num): def migrate_v221_limits(network_id, variant_num): response = requests.put(constant.MIGRATE_V221_LIMITS.format(networkId = network_id, variantNum = variant_num)) response.raise_for_status() + + +def migrate_v237_limits(network_id, variant_num): + response = requests.put(constant.MIGRATE_V237_LIMITS.format(networkId=network_id, variantNum=variant_num)) + response.raise_for_status() diff --git a/scripts/migrate_v237_limits.py b/scripts/migrate_v237_limits.py new file mode 100644 index 0000000..38216d4 --- /dev/null +++ b/scripts/migrate_v237_limits.py @@ -0,0 +1,77 @@ +# +# Copyright (c) 2026, RTE (http://www.rte-france.com) +# 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/. +# + +import requests +import argparse +import constant +import sys +from tqdm import tqdm + +from functions.networks.networks import get_all_networks_uuid +from functions.networks.networks import get_variants +from functions.networks.networks import migrate_v237_limits +from functions.plateform.plateform import get_plateform_info +from functions.plateform.plateform import check_server_status + +# +# @author Etienne Lesot +# + +parser = argparse.ArgumentParser(description='Send requests to the gridsuite services to migrate V2.37 limits', ) + +parser.add_argument("-n", "--dry-run", help="test mode (default) will not execute any deletion request", + action="store_true") + + +args = parser.parse_args() +dry_run = args.dry_run + +print("---------------------------------------------------------") +print("V2.37 limits migration script") +if dry_run: + print("dry-run=" + str(dry_run) + " -> will run without modifying anything (test mode)") +if constant.DEV: + print("DEV=" + str(constant.DEV) + " -> hostnames configured for a local execution (172.17.0.1:xxxx)") +print("\n") + +# Check network-store-server +if not check_server_status(constant.NETWORK_STORE_SERVER_HOSTNAME): sys.exit() +print("\n") +# Just getting an enlightening url opportunistically from here because it exists +plateformName = get_plateform_info()['redirect_uri'] + +print("\n") + +print("---------------------------------------------------------") +print("This script will apply on plateform = " + plateformName ) +print("\n") +print("===> network-store-server seems OK ! The script can proceed") +print("\n") +networks = get_all_networks_uuid() +print("For a total of " + str(len(networks)) + " networks") +print("---------------------------------------------------------") + +print("V2.11 limits migration (dry-run=" + str(dry_run) + ") in processing...") +failCount = 0 +successCount = 0 +for network in tqdm(networks): + variants = get_variants(network['uuid']) + for variant in variants: + if not dry_run: + try: + migrate_v237_limits(network['uuid'], variant['num']) + successCount += 1 + except Exception as e: + failCount += 1 + # print only str(e) instead of the full traceback because we call this method from a simple for loop script + tqdm.write("network " + network['uuid'] + ", variantNum " + str(variant['num']) + " => migration failed: "+ str(e)) + if isinstance(e, requests.exceptions.RequestException) and e.response is not None: + tqdm.write("Response body: " + repr(e.response.text)) # repr for cheap escaping + tqdm.write("") # emtpy newline between errors for legibility +print("End of V2.37.0 limits migration") +print("Variant migration sucesses : " + str(successCount)) +print("Variant migration failures : " + str(failCount))