2020
2121
2222class 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
122136def _rstrip_null (bytestring ):
123137 return bytestring .rstrip (b'\x00 ' )
0 commit comments