diff --git a/sohstationviewer/model/general_data/general_data_helper.py b/sohstationviewer/model/general_data/general_data_helper.py index 408407d1d92f86b643f0f1c963ff75fa2ec50a34..b689a6e97dda433c59a2ab8ddff4ebbd3469fc2a 100644 --- a/sohstationviewer/model/general_data/general_data_helper.py +++ b/sohstationviewer/model/general_data/general_data_helper.py @@ -1,5 +1,8 @@ from typing import List, Dict, Optional, Union, Tuple import numpy as np +import os +from pathlib import Path + from sohstationviewer.database.extract_data import get_convert_factor @@ -207,3 +210,36 @@ def reset_data(selected_key: Union[str, Tuple[str, str]], data_dict: Dict): del selected_data_dict[chan_id][k] except KeyError: pass + + +def read_text(path2file: Path) -> Union[bool, str]: + """ + CHANGED FROM handling_data.read_text: + + Don't need to check binary because UnicodeDecodeError caught means + the file is binary + + Read text file and add to log_data under channel TEXT. + + Raise exception if the file isn't a text file + + Remove empty lines in content + :param path2file: str - absolute path to text file + :param file_name: str - name of text file + :param text_logs: holder to keep log string, refer to + DataTypeModel.__init__.log_data['TEXT'] + """ + try: + with open(path2file, 'r') as file: + content = file.read().strip() + except UnicodeDecodeError: + return + + if content != '': + # skip empty lines + no_empty_line_list = [ + line for line in content.splitlines() if line] + no_empty_line_content = os.linesep.join(no_empty_line_list) + + log_text = "\n\n** STATE OF HEALTH: %s\n" % path2file.name + log_text += no_empty_line_content + else: + log_text = '' + return log_text diff --git a/sohstationviewer/model/general_data/general_record_helper.py b/sohstationviewer/model/general_data/general_record_helper.py new file mode 100644 index 0000000000000000000000000000000000000000..5d1e0603f9175af1d114e576b277a8c98c4bd2c6 --- /dev/null +++ b/sohstationviewer/model/general_data/general_record_helper.py @@ -0,0 +1,27 @@ +import struct + + +class Unpacker: + """ + A wrapper around struct.unpack() to unpack binary data without having to + explicitly define the byte order in the format string. Also restrict the + type of format to str and buffer to bytes. + """ + def __init__(self, byte_order_char: str = '') -> None: + self.byte_order_char = byte_order_char + + def unpack(self, format: str, buffer: bytes): + """ + Unpack a string of bytes into a tuple of values based on the given + format + :param format: the format used to unpack the byte string + :param buffer: the byte string + :return: a tuple containing the unpacked values. + """ + default_byte_order_chars = ('@', '=', '>', '<', '!') + if format.startswith(default_byte_order_chars): + format = self.byte_order_char + format[:1] + else: + format = self.byte_order_char + format + return struct.unpack(format, buffer) + diff --git a/sohstationviewer/model/mseed_data/mseed.py b/sohstationviewer/model/mseed_data/mseed.py index 19e515dbfc8f78380f9ce0e81b18e39db7b69f4c..c0481083024c9541cc6131a5de8baf69d6f0f5c7 100644 --- a/sohstationviewer/model/mseed_data/mseed.py +++ b/sohstationviewer/model/mseed_data/mseed.py @@ -8,16 +8,17 @@ from pathlib import Path from typing import Dict, Tuple, List from sohstationviewer.controller.util import validate_file, validate_dir -from sohstationviewer.model.mseed_data.mseed_reader import MSeedReader +from sohstationviewer.view.util.enums import LogType + from sohstationviewer.model.general_data.general_data import \ GeneralData, ThreadStopped, ProcessingDataError -from sohstationviewer.view.util.enums import LogType +from sohstationviewer.model.general_data.general_data_helper import read_text from sohstationviewer.model.mseed_data.mseed_helper import \ - retrieve_nets_from_data_dict, read_text + retrieve_nets_from_data_dict from sohstationviewer.model.mseed_data.record_reader_helper import \ MSeedReadError - +from sohstationviewer.model.mseed_data.mseed_reader import MSeedReader class MSeed(GeneralData): """ diff --git a/sohstationviewer/model/mseed_data/mseed_helper.py b/sohstationviewer/model/mseed_data/mseed_helper.py index 32d237e2ec5a3dc353458691ff4abe5381d33a46..0b604b55d620c4a48a2e124b26a08c251740d6f8 100644 --- a/sohstationviewer/model/mseed_data/mseed_helper.py +++ b/sohstationviewer/model/mseed_data/mseed_helper.py @@ -18,36 +18,3 @@ def retrieve_nets_from_data_dict(data_dict: Dict, for c in data_dict[sta_id]: nets_by_sta[sta_id].update( data_dict[sta_id][c]['nets']) - - -def read_text(path2file: Path) -> Union[bool, str]: - """ - CHANGED FROM handling_data.read_text: - + Don't need to check binary because UnicodeDecodeError caught means - the file is binary - - Read text file and add to log_data under channel TEXT. - + Raise exception if the file isn't a text file - + Remove empty lines in content - :param path2file: str - absolute path to text file - :param file_name: str - name of text file - :param text_logs: holder to keep log string, refer to - DataTypeModel.__init__.log_data['TEXT'] - """ - try: - with open(path2file, 'r') as file: - content = file.read().strip() - except UnicodeDecodeError: - return - - if content != '': - # skip empty lines - no_empty_line_list = [ - line for line in content.splitlines() if line] - no_empty_line_content = os.linesep.join(no_empty_line_list) - - log_text = "\n\n** STATE OF HEALTH: %s\n" % path2file.name - log_text += no_empty_line_content - else: - log_text = '' - return log_text diff --git a/sohstationviewer/model/mseed_data/record_reader_helper.py b/sohstationviewer/model/mseed_data/record_reader_helper.py index c9fa6ace53751c1487fd34ed678fda5cec38c862..4028d497cb3f48b426ed0371402eaa972bead41b 100644 --- a/sohstationviewer/model/mseed_data/record_reader_helper.py +++ b/sohstationviewer/model/mseed_data/record_reader_helper.py @@ -4,37 +4,14 @@ from enum import Enum from obspy import UTCDateTime +from sohstationviewer.model.general_data.general_record_helper import Unpacker + class MSeedReadError(Exception): def __init__(self, msg): self.message = msg -class Unpacker: - """ - A wrapper around struct.unpack() to unpack binary data without having to - explicitly define the byte order in the format string. Also restrict the - type of format to str and buffer to bytes. - """ - def __init__(self, byte_order_char: str = '') -> None: - self.byte_order_char = byte_order_char - - def unpack(self, format: str, buffer: bytes): - """ - Unpack a string of bytes into a tuple of values based on the given - format - :param format: the format used to unpack the byte string - :param buffer: the byte string - :return: a tuple containing the unpacked values. - """ - default_byte_order_chars = ('@', '=', '>', '<', '!') - if format.startswith(default_byte_order_chars): - format = self.byte_order_char + format[:1] - else: - format = self.byte_order_char + format - return struct.unpack(format, buffer) - - @dataclass class FixedHeader: """ diff --git a/sohstationviewer/model/reftek_data/reftek_reader/core.py b/sohstationviewer/model/reftek_data/reftek_reader/core.py index ff647893448aeaca6a43c5232dbc40d615f39eb1..74d02952b7dff1119078bb0460b0e9cb38363c04 100644 --- a/sohstationviewer/model/reftek_data/reftek_reader/core.py +++ b/sohstationviewer/model/reftek_data/reftek_reader/core.py @@ -22,7 +22,7 @@ from obspy import Trace, Stream, UTCDateTime from obspy.core.util.obspy_types import ObsPyException from obspy.io.reftek.packet import PACKET_FINAL_DTYPE -from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker +from sohstationviewer.model.general_data.general_record_helper import Unpacker from sohstationviewer.model.reftek_data.reftek_reader.packet import EHPacket from sohstationviewer.model.reftek_data.reftek_reader.reftek_helper import ( diff --git a/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py b/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py index ff9cc90a986356f3228117f5ef3861bc56f8cb5e..9e1b4f75b74b918dd67ad2f54fd3349d781572b7 100644 --- a/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py +++ b/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py @@ -3,7 +3,7 @@ from typing import Tuple, Any import numpy from obspy.io.reftek.util import bcd -from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker +from sohstationviewer.model.general_data.general_record_helper import Unpacker from sohstationviewer.model.reftek_data.reftek_reader.packet import \ eh_et_payload_end_in_packet from sohstationviewer.model.reftek_data.reftek_reader.packets import ( diff --git a/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py b/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py index 5f0e6cdc6a6aa15733d62abfe8d2517ed800554d..32b53080b94152e85e0af8a4c46102200d8839ef 100644 --- a/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py +++ b/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py @@ -4,7 +4,7 @@ from typing import Any, Dict, Callable, Union, List, Tuple import numpy import numpy as np -from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker +from sohstationviewer.model.general_data.general_record_helper import Unpacker from sohstationviewer.model.reftek_data.reftek_reader.packet import \ eh_et_payload_end_in_packet from sohstationviewer.model.reftek_data.reftek_reader.packet_readers import (