Skip to content

Commit bffc69c

Browse files
committed
Rewrite packet_handler tests /w pytest-mock
1 parent 26fe494 commit bffc69c

File tree

3 files changed

+173
-215
lines changed

3 files changed

+173
-215
lines changed

PSL/packet_handler.py

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import platform
1313
import struct
1414
import time
15-
from functools import partial
15+
from functools import partial, update_wrapper
1616
from typing import List, Union
1717

1818
import serial
@@ -53,22 +53,27 @@ def __init__(
5353
self._logging = False
5454
self.interface = serial.Serial()
5555
self.send_byte = partial(self._send, size=1)
56+
update_wrapper(self.send_byte, self._send)
5657
self.send_int = partial(self._send, size=2)
58+
update_wrapper(self.send_int, self._send)
5759
self.get_byte = partial(self._receive, size=1)
60+
update_wrapper(self.get_byte, self._receive)
5861
self.get_int = partial(self._receive, size=2)
62+
update_wrapper(self.get_int, self._receive)
5963
self.get_long = partial(self._receive, size=4)
64+
update_wrapper(self.get_long, self._receive)
6065
self.connect(port=port, baudrate=baudrate, timeout=timeout)
6166

6267
# Backwards compatibility
6368
self.fd = self.interface
6469
self.occupiedPorts = set()
6570
self.connected = self.interface.is_open
66-
self.__sendByte__ = partial(self._send, size=1)
67-
self.__sendInt__ = partial(self._send, size=2)
71+
self.__sendByte__ = self.send_byte
72+
self.__sendInt__ = self.send_int
6873
self.__get_ack__ = self.get_ack
69-
self.__getByte__ = partial(self._receive, size=1)
70-
self.__getInt__ = partial(self._receive, size=2)
71-
self.__getLong__ = partial(self._receive, size=4)
74+
self.__getByte__ = self.get_byte
75+
self.__getInt__ = self.get_int
76+
self.__getLong__ = self.get_long
7277
self.waitForData = self.wait_for_data
7378
self.sendBurst = self.send_burst
7479
self.portname = self.interface.name
@@ -239,24 +244,17 @@ def _get_integer_type(size: int) -> struct.Struct:
239244
else:
240245
raise ValueError("size must be 1, 2, or 4.")
241246

242-
def _send(self, value: Union[bytes, int], size: int = None):
247+
def _send(self, value: Union[bytes, int], size: int):
243248
"""Send a value to the PSLab.
244249
245-
Optionally handles conversion from int to bytes.
246-
247250
Parameters
248251
----------
249-
value : bytes, int
252+
value : int
250253
Value to send to PSLab. Must fit in four bytes.
251-
size : int, optional
252-
Number of bytes to send. If not specified, the number of bytes sent
253-
depends on the size of :value:.
254254
"""
255255
if isinstance(value, bytes):
256256
packet = value
257257
else:
258-
# True + True == 2, see PEP 285.
259-
size = 2 ** ((value > 0xFF) + (value > 0xFFFF)) if size is None else size
260258
packer = self._get_integer_type(size)
261259
packet = packer.pack(value)
262260

@@ -266,28 +264,18 @@ def _send(self, value: Union[bytes, int], size: int = None):
266264
self.write(packet)
267265

268266
def _receive(self, size: int) -> int:
269-
"""Read and unpack the specified number of bytes from the serial port.
270-
271-
Parameters
272-
----------
273-
size : int
274-
Number of bytes to read from the serial port.
267+
"""Read and unpack data from the serial port.
275268
276269
Returns
277270
-------
278271
int
279-
Unpacked bytes, or -1 if too few bytes were read.
272+
Unpacked data, or -1 if too few bytes were read.
280273
"""
281274
received = self.read(size)
282275

283276
if len(received) == size:
284-
if size in (1, 2, 4):
285-
unpacker = self._get_integer_type(size)
286-
retval = unpacker.unpack(received)[0]
287-
else:
288-
retval = int.from_bytes(
289-
bytes=received, byteorder="little", signed=False
290-
)
277+
unpacker = self._get_integer_type(size)
278+
retval = unpacker.unpack(received)[0]
291279
else:
292280
logger.error(f"Requested {size} bytes, got {len(received)}.")
293281
retval = -1 # raise an exception instead?

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy