Skip to content

Commit fec34da

Browse files
committed
Create sensor type and payload id methods
1 parent 13b93d4 commit fec34da

File tree

1 file changed

+42
-28
lines changed

1 file changed

+42
-28
lines changed

microSWIFTtelemetry/sbd/sbd_message.py

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121

2222
class SbdMessage:
23+
# TODO: add docstring
2324
"""The summary line for a class docstring should fit on one line.
2425
2526
If the class has public attributes, they may be documented here
@@ -47,53 +48,32 @@ def __init__(self, file: IO[bytes]):
4748
self.file = file
4849
self.file_content = _rstrip_null(self.file.read())
4950
self.file_size = len(self.file_content)
50-
self._payload_type_id: Union[str, None] = None # TODO: are these types needed?
51+
self._payload_type_id: Union[str, None] = None # TODO: just put methods here?
5152
self._sensor_type_id: Union[int, None] = None
5253
self._sensor_type: Union[SensorType, None] = None
5354

5455
@property
5556
def payload_type_id(self) -> Union[str, None]:
56-
""" TODO: """
57+
""" Cache and return this message's payload type ID. """
5758
if self._payload_type_id is None:
58-
payload_type_id_slice = slice(self.PAYLOAD_START,
59-
self.PAYLOAD_START + 1)
60-
payload_type_id_str = self.file_content[payload_type_id_slice]
61-
self._payload_type_id = payload_type_id_str.decode(errors='replace')
59+
self._payload_type_id = self.get_payload_type_id()
6260
return self._payload_type_id
6361

6462
@property
6563
def sensor_type_id(self) -> Union[int, None]:
66-
""" Determine sensor type id from an SBD message. """
64+
""" Cache and return this message's sensor type ID. """
6765
if self._sensor_type_id is None:
68-
if self.payload_type_id == '7':
69-
sensor_type_slice = slice(self.PAYLOAD_START + 1,
70-
self.PAYLOAD_START + 2)
71-
self._sensor_type_id = ord(self.file_content[sensor_type_slice])
66+
self._sensor_type_id = self.get_sensor_type_id()
7267
return self._sensor_type_id
7368

7469
@property
7570
def sensor_type(self) -> SensorType:
76-
""" Get sensor type class. """
71+
""" Return sensor type class based on sensor type ID. """
7772
if self._sensor_type is None:
78-
sensor_type = self.get_sensor_type_by_id()
73+
sensor_type = self.get_sensor_type()
7974
self._sensor_type = sensor_type(self.file_content, self.file.name)
8075
return self._sensor_type
8176

82-
def get_sensor_type_by_id(self) -> Type[SensorType]:
83-
""" Return sensor type class based on sensor type id. """
84-
if self.sensor_type_id is None:
85-
raise ValueError('Sensor type ID cannot be `None`.')
86-
else:
87-
return SENSOR_TYPES[self.sensor_type_id]
88-
89-
def validate_file_size(self) -> None:
90-
""" Validate file size against the sensor type's expected size ."""
91-
if self.file_size != self.sensor_type.expected_file_size:
92-
raise ValueError(
93-
f'Expected {self.sensor_type.expected_file_size} bytes, '
94-
f'but received {self.file_size} bytes.'
95-
)
96-
9777
def read(self) -> tuple[dict, dict]:
9878
"""
9979
Read microSWIFT short burst data (SBD) messages into dictionaries
@@ -118,6 +98,40 @@ def read(self) -> tuple[dict, dict]:
11898
error_message['error'] = self.file_content
11999
return swift, error_message
120100

101+
def get_payload_type_id(self) -> str:
102+
""" Read and return the payload type ID from an SBD message. """
103+
payload_type_id_slice = slice(self.PAYLOAD_START,
104+
self.PAYLOAD_START + 1)
105+
payload_type_id_str = self.file_content[payload_type_id_slice]
106+
return payload_type_id_str.decode(errors='replace')
107+
108+
def get_sensor_type_id(self) -> Union[int, None]:
109+
""" Read and return the sensor type ID from an SBD message. """
110+
# Currently payload type ID 7 is the only payload type, but
111+
# future versions may have more and/or no payload type.
112+
if self.payload_type_id == '7':
113+
sensor_type_slice = slice(self.PAYLOAD_START + 1,
114+
self.PAYLOAD_START + 2)
115+
sensor_type_id = ord(self.file_content[sensor_type_slice])
116+
else:
117+
sensor_type_id = None
118+
return sensor_type_id
119+
120+
def get_sensor_type(self) -> Type[SensorType]:
121+
""" Return sensor type class based on sensor type id. """
122+
if self.sensor_type_id is None:
123+
raise ValueError('Sensor type ID cannot be `None`.')
124+
else:
125+
return SENSOR_TYPES[self.sensor_type_id]
126+
127+
def validate_file_size(self) -> None:
128+
""" Validate file size against the sensor type's expected size ."""
129+
if self.file_size != self.sensor_type.expected_file_size:
130+
raise ValueError(
131+
f'Expected {self.sensor_type.expected_file_size} bytes, '
132+
f'but received {self.file_size} bytes.'
133+
)
134+
121135

122136
def _rstrip_null(bytestring):
123137
return bytestring.rstrip(b'\x00')

0 commit comments

Comments
 (0)