[autofix.ci] apply automated fixes
[e-mobility-charging-stations-simulator.git] / tests / ocpp-server / server.py
index d1771754eaafdfb814246c5baa14024798b4c2e8..cba2009275f9fb5a9ae443c5e928f0a3f99cfc22 100644 (file)
@@ -99,7 +99,7 @@ class ChargePoint(ocpp.v201.ChargePoint):
     async def on_get_base_report(
         self, request_id: int, report_base: ReportBaseType, **kwargs
     ):
-        logging.info("Received GetBaseReport")
+        logging.info("Received %s", Action.GetBaseReport)
         return ocpp.v201.call_result.GetBaseReport(status="Accepted")
 
     # Request handlers to emit OCPP messages.
@@ -119,7 +119,7 @@ class ChargePoint(ocpp.v201.ChargePoint):
         )  # Use correct ReportBaseType
         try:
             response = await self.call(request)
-            logging.info("Send GetBaseReport")
+            logging.info("Send %s", Action.GetBaseReport)
 
             if (
                 response.status == "Accepted"
@@ -149,12 +149,31 @@ async def send_ocpp_command(cp, command_name, delay=None, period=None):
 
     # If period is not None, send command repeatedly with period interval
     if period:
-        while True:
-            if command_name == "GetBaseReport":
-                logging.info("GetBaseReport parser working")
-                await cp.send_get_base_report()
 
-            await asyncio.sleep(period)
+        async def send_command_repeatedly():
+            while True:
+                command_name = await cp.receive_command()
+                try:
+                    match command_name:
+                        case Action.ClearCache:
+                            logging.info("ClearCache parser working")
+                            await cp.send_clear_cache()
+                        case Action.GetBaseReport:
+                            logging.info("GetBaseReport parser working")
+                            await cp.send_get_base_report()
+                        case _:
+                            logging.warning(f"Unsupported command {command_name}")
+                except Exception:
+                    logging.exception(
+                        f"Failure while processing command {command_name}"
+                    )
+                finally:
+                    await asyncio.sleep(period)
+
+        timer = RepeatTimer(period, send_command_repeatedly)
+        await timer.start()
+        await timer.wait_closed()  # Wait for timer to finish before exiting
+
     else:
         if command_name == "GetBaseReport":
             await cp.send_get_base_report()
@@ -184,18 +203,15 @@ async def on_connect(websocket, path):
     charge_point_id = path.strip("/")
     cp = ChargePoint(charge_point_id, websocket)
 
-    # Check if request argument is specified
-    if args.request:
-        asyncio.create_task(
-            send_ocpp_command(cp, args.request, args.delay, args.period)
-        )
-
-    # Start the ChargePoint instance to listen for incoming messages.
-    await cp.start()
-
     ChargePoints.add(cp)
     try:
         await cp.start()
+        # Check if request argument is specified
+        if args.request:
+            asyncio.create_task(
+                send_ocpp_command(cp, args.request, args.delay, args.period)
+            )
+
     except ConnectionClosed:
         logging.info("ChargePoint %s closed connection", cp.id)
         ChargePoints.remove(cp)