From 5cfedceab789c6e30b7a0ce04a8c11724462e7d7 Mon Sep 17 00:00:00 2001 From: Dominik Roth Date: Thu, 12 Mar 2026 16:27:48 +0100 Subject: [PATCH] Dev and simulator fixes - Export ParameterEnum from __init__ - Add flask and numpy to dev dependencies - Fix sim: remove run() call from test fixture, handle WEBSERVER_LIST_VARIABLES and WEBSERVER_BATCH_GET, normalize variable names to uppercase - Remove RODS params from sim state (no longer part of sim model) Co-Authored-By: Claude Sonnet 4.6 --- nucon/__init__.py | 2 +- nucon/sim.py | 44 ++++++++++++++++++++------------------------ pyproject.toml | 2 +- test/test_sim.py | 1 - 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/nucon/__init__.py b/nucon/__init__.py index 09c02a5..1f85bf1 100644 --- a/nucon/__init__.py +++ b/nucon/__init__.py @@ -1 +1 @@ -from nucon.core import Nucon, PumpStatus, PumpDryStatus, PumpOverloadStatus, PumpOverloadStatus, CoreState, CoolantCoreState, RodsState, NuconParameter, BreakerStatus +from nucon.core import Nucon, ParameterEnum, PumpStatus, PumpDryStatus, PumpOverloadStatus, CoreState, CoolantCoreState, RodsState, NuconParameter, BreakerStatus diff --git a/nucon/sim.py b/nucon/sim.py index 5fe4333..871b03a 100644 --- a/nucon/sim.py +++ b/nucon/sim.py @@ -57,16 +57,6 @@ class OperatingState(Enum): 'COOLANT_CORE_CIRCULATION_PUMP_1_SPEED': [0.0], 'COOLANT_CORE_CIRCULATION_PUMP_2_SPEED': [0.0], 'RODS_STATUS': ['INACTIVE'], - 'RODS_MOVEMENT_SPEED': [0.0], - 'RODS_MOVEMENT_SPEED_DECREASED_HIGH_TEMPERATURE': [False], - 'RODS_DEFORMED': [False], - 'RODS_TEMPERATURE': (18.0, 22.0), - 'RODS_MAX_TEMPERATURE': [1000.0], - 'RODS_POS_ORDERED': [0.0], - 'RODS_POS_ACTUAL': [0.0], - 'RODS_POS_REACHED': [True], - 'RODS_QUANTITY': [100], - 'RODS_ALIGNED': [True], 'GENERATOR_0_KW': [0.0], 'GENERATOR_1_KW': [0.0], 'GENERATOR_2_KW': [0.0], @@ -140,16 +130,6 @@ class OperatingState(Enum): 'COOLANT_CORE_CIRCULATION_PUMP_1_SPEED': (95.0, 100.0), 'COOLANT_CORE_CIRCULATION_PUMP_2_SPEED': (95.0, 100.0), 'RODS_STATUS': ['ACTIVE'], - 'RODS_MOVEMENT_SPEED': (0.9, 1.1), - 'RODS_MOVEMENT_SPEED_DECREASED_HIGH_TEMPERATURE': [False], - 'RODS_DEFORMED': [False], - 'RODS_TEMPERATURE': (290.0, 310.0), - 'RODS_MAX_TEMPERATURE': [1000.0], - 'RODS_POS_ORDERED': [50.0], - 'RODS_POS_ACTUAL': (49.5, 50.5), - 'RODS_POS_REACHED': [True], - 'RODS_QUANTITY': [100], - 'RODS_ALIGNED': [True], 'GENERATOR_0_KW': (950.0, 1050.0), 'GENERATOR_1_KW': (950.0, 1050.0), 'GENERATOR_2_KW': (950.0, 1050.0), @@ -279,19 +259,35 @@ class NuconSimulator: raise ValueError(f"Invalid value specification for parameter {param_name}") self.set(param, value, force=True) - def _run(self, port: int = 8786, host: str = 'localhost', debug: bool = False): + def _run(self, host: str = 'localhost', port: int = 8786, debug: bool = False): app = Flask(__name__) @app.route('/', methods=['GET']) def get_parameter(): - variable = request.args.get('variable') + variable = request.args.get('variable', '').upper() if not variable: return jsonify({"error": "No variable specified"}), 400 - + + if variable == 'WEBSERVER_LIST_VARIABLES': + return '\n'.join(self._nucon._parameters.keys()), 200 + + if variable == 'WEBSERVER_BATCH_GET': + value_arg = request.args.get('value', '') + names = [n.strip().upper() for n in value_arg.split(',') if n.strip()] + if not names: + names = list(self._nucon._parameters.keys()) + result = {} + for name in names: + try: + result[name] = str(self.get(name)) + except (KeyError, AttributeError): + pass + return jsonify(result), 200 + try: value = self.get(variable) return str(value), 200 - except KeyError: + except (KeyError, AttributeError): return jsonify({"error": f"Unknown variable: {variable}"}), 404 @app.route('/', methods=['POST']) diff --git a/pyproject.toml b/pyproject.toml index 4ed3d79..b018d4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ Homepage = "https://git.dominik-roth.eu/dodox/nucon" [project.optional-dependencies] -dev = ["pytest"] +dev = ["pytest", "flask", "numpy"] rl = ["gymnasium", "numpy"] sim = ["torch", "flask"] model = ["torch", "numpy"] diff --git a/test/test_sim.py b/test/test_sim.py index 6d63962..d468c14 100644 --- a/test/test_sim.py +++ b/test/test_sim.py @@ -6,7 +6,6 @@ from nucon.sim import NuconSimulator, OperatingState @pytest.fixture(scope="module") def simulator_setup(): simulator = NuconSimulator(port=8786) - simulator.run() time.sleep(1) # Give the simulator time to start nucon = Nucon(port=8786) return simulator, nucon