Skip to content

Commit 564ae3b

Browse files
committed
100% backend coverage
1 parent f443df1 commit 564ae3b

File tree

3 files changed

+421
-28
lines changed

3 files changed

+421
-28
lines changed

src/ephys_link/back_end/server.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@
3434
from ephys_link.back_end.platform_handler import PlatformHandler
3535
from ephys_link.front_end.console import Console
3636
from ephys_link.utils.constants import (
37+
MALFORMED_REQUEST_ERROR,
3738
PORT,
3839
PROXY_CLIENT_NOT_INITIALIZED_ERROR,
3940
SERVER_NOT_INITIALIZED_ERROR,
41+
UNKNOWN_EVENT_ERROR,
4042
cannot_connect_as_client_is_already_connected_error,
4143
client_disconnected_without_being_connected_error,
4244
)
@@ -129,13 +131,13 @@ def _malformed_request_response(self, request: str, data: tuple[tuple[Any], ...]
129131
Response for a malformed request.
130132
"""
131133
self._console.error_print("MALFORMED REQUEST", f"{request}: {data}")
132-
return dumps({"error": "Malformed request."})
134+
return dumps(MALFORMED_REQUEST_ERROR)
133135

134136
async def _run_if_data_available(
135137
self,
136138
function: Callable[[str], Coroutine[Any, Any, VBLBaseModel]], # pyright: ignore [reportExplicitAny]
137139
event: str,
138-
data: tuple[tuple[Any], ...], # pyright: ignore [reportExplicitAny]
140+
data: Any, # pyright: ignore [reportAny, reportExplicitAny]
139141
) -> str:
140142
"""Run a function if data is available.
141143
@@ -147,17 +149,16 @@ async def _run_if_data_available(
147149
Returns:
148150
Response data from function.
149151
"""
150-
request_data = data[1]
151-
if request_data:
152-
return str((await function(str(request_data))).to_json_string())
153-
return self._malformed_request_response(event, request_data)
152+
if data:
153+
return str((await function(str(data))).to_json_string()) # pyright: ignore[reportAny]
154+
return self._malformed_request_response(event, data) # pyright: ignore[reportAny]
154155

155156
async def _run_if_data_parses(
156157
self,
157158
function: Callable[[INPUT_TYPE], Coroutine[Any, Any, OUTPUT_TYPE]], # pyright: ignore [reportExplicitAny]
158159
data_type: type[INPUT_TYPE],
159160
event: str,
160-
data: tuple[tuple[Any], ...], # pyright: ignore [reportExplicitAny]
161+
data: Any, # pyright: ignore [reportAny, reportExplicitAny]
161162
) -> str:
162163
"""Run a function if data parses.
163164
@@ -170,18 +171,17 @@ async def _run_if_data_parses(
170171
Returns:
171172
Response data from function.
172173
"""
173-
request_data = data[1]
174-
if request_data:
174+
if data:
175175
try:
176-
parsed_data = data_type(**loads(str(request_data)))
176+
parsed_data = data_type(**loads(str(data))) # pyright: ignore[reportAny]
177177
except JSONDecodeError:
178-
return self._malformed_request_response(event, request_data)
178+
return self._malformed_request_response(event, data) # pyright: ignore[reportAny]
179179
except ValidationError as e:
180180
self._console.exception_error_print(event, e)
181-
return self._malformed_request_response(event, request_data)
181+
return self._malformed_request_response(event, data) # pyright: ignore[reportAny]
182182
else:
183183
return str((await function(parsed_data)).to_json_string())
184-
return self._malformed_request_response(event, request_data)
184+
return self._malformed_request_response(event, data) # pyright: ignore[reportAny]
185185

186186
# Event Handlers.
187187

@@ -222,14 +222,15 @@ async def disconnect(self, sid: str) -> None:
222222
else:
223223
self._console.error_print("DISCONNECTION", client_disconnected_without_being_connected_error(sid))
224224

225-
async def platform_event_handler(self, event: str, *args: tuple[Any]) -> str: # pyright: ignore [reportExplicitAny]
225+
async def platform_event_handler(self, event: str, _: str, data: Any) -> str: # pyright: ignore [reportAny, reportExplicitAny]
226226
"""Handle events from the server.
227227
228228
Matches incoming events based on the Socket.IO API.
229229
230230
Args:
231231
event: Event name.
232-
args: Event arguments.
232+
_: Socket session ID (unused).
233+
data: Event data.
233234
234235
Returns:
235236
Response data.
@@ -252,28 +253,27 @@ async def platform_event_handler(self, event: str, *args: tuple[Any]) -> str: #
252253
case "get_manipulators":
253254
return str((await self._platform_handler.get_manipulators()).to_json_string())
254255
case "get_position":
255-
return await self._run_if_data_available(self._platform_handler.get_position, event, args)
256+
return await self._run_if_data_available(self._platform_handler.get_position, event, data)
256257
case "get_angles":
257-
return await self._run_if_data_available(self._platform_handler.get_angles, event, args)
258+
return await self._run_if_data_available(self._platform_handler.get_angles, event, data)
258259
case "get_shank_count":
259-
return await self._run_if_data_available(self._platform_handler.get_shank_count, event, args)
260+
return await self._run_if_data_available(self._platform_handler.get_shank_count, event, data)
260261
case "set_position":
261262
return await self._run_if_data_parses(
262-
self._platform_handler.set_position, SetPositionRequest, event, args
263+
self._platform_handler.set_position, SetPositionRequest, event, data
263264
)
264265
case "set_depth":
265-
return await self._run_if_data_parses(self._platform_handler.set_depth, SetDepthRequest, event, args)
266+
return await self._run_if_data_parses(self._platform_handler.set_depth, SetDepthRequest, event, data)
266267
case "set_inside_brain":
267268
return await self._run_if_data_parses(
268-
self._platform_handler.set_inside_brain, SetInsideBrainRequest, event, args
269+
self._platform_handler.set_inside_brain, SetInsideBrainRequest, event, data
269270
)
270271
case "stop":
271-
request_data = args[1]
272-
if request_data:
273-
return await self._platform_handler.stop(str(request_data))
274-
return self._malformed_request_response(event, request_data)
272+
if data:
273+
return await self._platform_handler.stop(str(data)) # pyright: ignore[reportAny]
274+
return self._malformed_request_response(event, data) # pyright: ignore[reportAny]
275275
case "stop_all":
276276
return await self._platform_handler.stop_all()
277277
case _:
278278
self._console.error_print("EVENT", f"Unknown event: {event}.")
279-
return dumps({"error": "Unknown event."})
279+
return dumps(UNKNOWN_EVENT_ERROR)

src/ephys_link/utils/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,7 @@ def client_disconnected_without_being_connected_error(client_sid: str) -> str:
8282
str: The error message.
8383
"""
8484
return f"Client {client_sid} disconnected without being connected."
85+
86+
87+
MALFORMED_REQUEST_ERROR = {"error": "Malformed request."}
88+
UNKNOWN_EVENT_ERROR = {"error": "Unknown event."}

0 commit comments

Comments
 (0)