Skip to content

Commit b31cd22

Browse files
committed
fix: address sourcery-ai review comments
- Updated MockHandler.open to use the port argument. - Clarified partial read behavior in MockHandler.read. - Added safety check in ScienceLab to prevent mixed device/mock arguments.
1 parent f50c1eb commit b31cd22

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

pslab/mock_handler.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@ def __init__(self, port: Optional[str] = None):
2323
self.logger = logging.getLogger(__name__)
2424

2525
def open(self, port: Optional[str] = None) -> None:
26+
"""
27+
Simulate opening the connection.
28+
29+
Args:
30+
port (str, optional): The port to connect to. Updates the handler's port if provided.
31+
"""
32+
if port:
33+
self.port = port
2634
self.connected = True
2735
self.logger.info(f"MockHandler connected on {self.port}")
28-
2936
def close(self) -> None:
3037
self.connected = False
3138
self.read_buffer.clear()
@@ -52,6 +59,17 @@ def read(self, size: int = 1) -> bytes:
5259
if not self.connected:
5360
raise RuntimeError("Attempted to read from closed MockHandler.")
5461

62+
if len(self.read_buffer) < size:
63+
self.logger.warning(f"MockHandler: Requested {size} bytes, but only {len(self.read_buffer)} available.")
64+
# Return all currently available bytes and clear the buffer (partial read)
65+
data = self.read_buffer[:]
66+
self.read_buffer.clear()
67+
return bytes(data)
68+
69+
data = self.read_buffer[:size]
70+
self.read_buffer = self.read_buffer[size:]
71+
return bytes(data)
72+
5573
if len(self.read_buffer) < size:
5674
self.logger.warning(f"MockHandler: Requested {size} bytes, but only {len(self.read_buffer)} available.")
5775
# Return what we have, then empty bytes

pslab/sciencelab.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,17 @@ class ScienceLab:
3535
"""
3636

3737
def __init__(self, device: ConnectionHandler | None = None, mock: bool = False):
38+
"""
39+
Initialize the ScienceLab interface.
40+
41+
:param device: The connection handler (real hardware).
42+
:param mock: If True, use the MockHandler for simulation.
43+
:raises ValueError: If both 'device' and 'mock=True' are provided.
44+
"""
3845
if mock:
46+
if device is not None:
47+
raise ValueError("Cannot initialize ScienceLab with both a physical device and mock=True.")
48+
3949
self.device = MockHandler()
4050
self.device.open()
4151
self.firmware = "MOCK_FW_1.0" # Fake firmware version

0 commit comments

Comments
 (0)