Skip to content

Commit e4c89ef

Browse files
committed
Allow passing list or tuple to Packet()
1 parent 8db5cbb commit e4c89ef

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

tests/test_hlapi.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,23 @@ class PacketTest(object):
1616
def setup(self):
1717
self.pkt1 = Packet(*self.fields)
1818
self.pkt2 = Packet.unpack(self.pkt1.pack())
19+
20+
# Passing tuple to Packet()
21+
self.pkt3 = Packet(tuple(self.fields))
22+
self.pkt4 = Packet.unpack(self.pkt3.pack())
23+
24+
# Passing list to Packet()
25+
self.pkt5 = Packet(list(self.fields))
26+
self.pkt6 = Packet.unpack(self.pkt3.pack())
1927

2028
def test_pack(self):
21-
assert self.pkt1.fields == self.fields == self.pkt2.fields
29+
assert self.pkt1.fields == \
30+
self.fields == \
31+
self.pkt2.fields == \
32+
self.pkt3.fields == \
33+
self.pkt4.fields == \
34+
self.pkt5.fields == \
35+
self.pkt6.fields
2236

2337

2438
@raises(PackError)

tsip/hlapi.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ class Packet(object):
2525
2626
Check the TSIP reference documentation for the description of individual
2727
packets.
28+
29+
The argument(s) to `Packet()` can be either individual values, a single
30+
tuple or a single list.
2831
2932
Examples::
3033
31-
>>> pkt = Packet(0x1f) # Request software versions.
32-
>>> pkt = Packet(0x1e, 0x4b) # Request cold-start.
33-
>>> pkt = Packet(0x23, -37.1, 144.1, 10.0) # Set initial position.
34-
>>> pkt = Packet(0x8e, 0x4f, 0.1) # Set PPS with to 0.1s
34+
>>> pkt = Packet(0x1f) # Request software versions.
35+
>>> pkt = Packet(0x1e, 0x4b) # Request cold-start.
36+
>>> pkt = Packet( (0x23, -37.1, 144.1, 10.0) ) # Set initial position (tuple).
37+
>>> pkt = Packet( [0x8e, 0x4f, 0.1] ) # Set PPS with to 0.1s (list)
3538
3639
"""
3740

@@ -40,7 +43,20 @@ class Packet(object):
4043

4144

4245
def __init__(self, *fields):
43-
self.fields = fields
46+
47+
# Allow `*fields` to be either individual arguments or a list or tuple.
48+
# Because `fields` will always be a tuple anyway, passing a list or
49+
# tuple will result in `fields` being a nested structure.A
50+
#
51+
# Packet(1,2,3) -> (1,2,3) -> self.fields = fields
52+
# Packet((1,2,3)) -> ((1,2,3)) -> self.fields = fields[0]
53+
# Packet([1,2,3]) -> [(1,2,3)] -> self.fields = fields[0]
54+
#
55+
try:
56+
fields[0][0] # Passed list or tuple to `Packet()`?
57+
self.fields = fields[0]
58+
except TypeError:
59+
self.fields = fields
4460

4561

4662
# Make self.fields accessible as indexes on the

0 commit comments

Comments
 (0)