Newer
Older
from .SNCL import SNCL, __get_location_start
ELEMENT_CONVERSIONS = {
# e-field
"E-E": "QE",
"E-N": "QN",
# derived indicies
"SQ": "SQ",
"SV": "SV",
"DIST": "DT",
"DST": "GD",
}
CHANNEL_CONVERSIONS = {
ELEMENT_CONVERSIONS[key]: key for key in ELEMENT_CONVERSIONS.keys()
}
class LegacySNCL(SNCL):
interval: str,
station: str,
network: str = "NT",
) -> "LegacySNCL":
network=network,
channel=get_channel(element=element, interval=interval),
location=get_location(element=element, data_type=data_type),
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
)
@property
def element(self) -> str:
predefined_element = self.__check_predefined_element()
element = self.__get_element()
return predefined_element or element
@property
def interval(self) -> str:
channel_start = self.channel[0]
if channel_start == "S":
return "second"
elif channel_start == "M":
return "minute"
elif channel_start == "H":
return "hour"
elif channel_start == "D":
return "day"
raise ValueError(f"Unexcepted interval code: {channel_start}")
def __get_element(self):
"""Translates channel/location to element"""
element_start = self.channel[2]
channel = self.channel
channel_middle = channel[1]
location_end = self.location[1]
if channel_middle in ["Q", "E"]:
element_end = "_Volt"
elif channel_middle == "Y":
element_end = "_Bin"
elif channel_middle == "K":
element_end = "_Temp"
elif location_end == "1":
element_end = "_Sat"
else:
element_end = ""
return element_start + element_end
def __check_predefined_element(self) -> Optional[str]:
channel = self.channel
channel_end = channel[1:]
if channel_end in CHANNEL_CONVERSIONS:
return CHANNEL_CONVERSIONS[channel_end]
return None
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
def get_channel(element: str, interval: str) -> str:
predefined_channel = __check_predefined_channel(element=element, interval=interval)
channel_start = __get_channel_start(interval=interval)
channel_end = __get_channel_end(element=element)
return predefined_channel or (channel_start + channel_end)
def get_location(element: str, data_type: str) -> str:
location_start = __get_location_start(data_type=data_type)
location_end = __get_location_end(element=element)
return location_start + location_end
def __get_channel_start(interval: str) -> str:
if interval == "second":
return "S"
elif interval == "minute":
return "M"
elif interval == "hour":
return "H"
elif interval == "day":
return "D"
raise ValueError(f" Unexcepted interval: {interval}")
def __check_predefined_channel(element: str, interval: str) -> Optional[str]:
if element in ELEMENT_CONVERSIONS:
return __get_channel_start(interval=interval) + ELEMENT_CONVERSIONS[element]
elif len(element) == 3:
return element
# chan.loc format
elif "." in element:
channel = element.split(".")[0]
return channel.strip()
else:
return None
def __get_channel_end(element: str) -> str:
channel_middle = "V"
if "_Volt" in element:
channel_middle = "E"
elif "_Bin" in element:
channel_middle = "Y"
elif "_Temp" in element:
channel_middle = "K"
elif element in ["F", "G"]:
channel_middle = "S"
channel_end = element.split("_")[0]
return channel_middle + channel_end
def __get_location_end(element: str) -> str:
"""Translates element suffix to end of location code"""
if "_Sat" in element:
return "1"
return "0"