Change all double leading underscores with sigle leading underscores.
Also make minor refactoring and stylistic changes.
This commit is contained in:
280
weatherdata.py
280
weatherdata.py
@@ -113,6 +113,95 @@ class SpaceWeatherData(_BaseWeatherData):
|
||||
]
|
||||
|
||||
|
||||
def _make_labels_table(forecast, probabilities, rows):
|
||||
"""Organize all the arguments to feed _get_lbl_value."""
|
||||
def get_first_split(x): return x.split("/")[0]
|
||||
def get_second_split(x): return x.split("/")[1]
|
||||
def get_third_split(x): return x.split("/")[2]
|
||||
solar_row = rows["solar_row"]
|
||||
event_row = rows["event_row"]
|
||||
rb_now_row = rows["rb_now_row"]
|
||||
ga_now_row = rows["ga_now_row"]
|
||||
kp_index_row = rows["kp_index_row"]
|
||||
return [
|
||||
[
|
||||
[forecast, solar_row, 3, None],
|
||||
[probabilities, event_row + 1, 2, get_first_split],
|
||||
[probabilities, event_row + 2, 2, get_first_split],
|
||||
[probabilities, event_row + 3, 1, get_first_split],
|
||||
[forecast, rb_now_row, 1, None],
|
||||
[forecast, rb_now_row + 1, 3, None],
|
||||
[probabilities, ga_now_row + 2, 1, get_first_split],
|
||||
[probabilities, ga_now_row + 3, 2, get_first_split],
|
||||
[probabilities, ga_now_row + 4, 2, get_first_split],
|
||||
[probabilities, ga_now_row + 6, 1, get_first_split],
|
||||
[probabilities, ga_now_row + 7, 2, get_first_split],
|
||||
[probabilities, ga_now_row + 8, 2, get_first_split],
|
||||
[forecast, kp_index_row + 3, 1, None],
|
||||
[forecast, kp_index_row + 4, 1, None],
|
||||
[forecast, kp_index_row + 5, 1, None],
|
||||
[forecast, kp_index_row + 6, 1, None],
|
||||
[forecast, kp_index_row + 7, 1, None],
|
||||
[forecast, kp_index_row + 8, 1, None],
|
||||
[forecast, kp_index_row + 9, 1, None],
|
||||
[forecast, kp_index_row + 10, 1, None]
|
||||
],
|
||||
[
|
||||
[forecast, solar_row, 4, None],
|
||||
[probabilities, event_row + 1, 2, get_second_split],
|
||||
[probabilities, event_row + 2, 2, get_second_split],
|
||||
[probabilities, event_row + 3, 1, get_second_split],
|
||||
[forecast, rb_now_row, 2, None],
|
||||
[forecast, rb_now_row + 1, 4, None],
|
||||
[probabilities, ga_now_row + 2, 1, get_second_split],
|
||||
[probabilities, ga_now_row + 3, 2, get_second_split],
|
||||
[probabilities, ga_now_row + 4, 2, get_second_split],
|
||||
[probabilities, ga_now_row + 6, 1, get_second_split],
|
||||
[probabilities, ga_now_row + 7, 2, get_second_split],
|
||||
[probabilities, ga_now_row + 8, 2, get_second_split],
|
||||
[forecast, kp_index_row + 3, 2, None],
|
||||
[forecast, kp_index_row + 4, 2, None],
|
||||
[forecast, kp_index_row + 5, 2, None],
|
||||
[forecast, kp_index_row + 6, 2, None],
|
||||
[forecast, kp_index_row + 7, 2, None],
|
||||
[forecast, kp_index_row + 8, 2, None],
|
||||
[forecast, kp_index_row + 9, 2, None],
|
||||
[forecast, kp_index_row + 10, 2, None]
|
||||
],
|
||||
[
|
||||
[forecast, solar_row, 5, None],
|
||||
[probabilities, event_row + 1, 2, get_third_split],
|
||||
[probabilities, event_row + 2, 2, get_third_split],
|
||||
[probabilities, event_row + 3, 1, get_third_split],
|
||||
[forecast, rb_now_row, 3, None],
|
||||
[forecast, rb_now_row + 1, 5, None],
|
||||
[probabilities, ga_now_row + 2, 1, get_third_split],
|
||||
[probabilities, ga_now_row + 3, 2, get_third_split],
|
||||
[probabilities, ga_now_row + 4, 2, get_third_split],
|
||||
[probabilities, ga_now_row + 6, 1, get_third_split],
|
||||
[probabilities, ga_now_row + 7, 2, get_third_split],
|
||||
[probabilities, ga_now_row + 8, 2, get_third_split],
|
||||
[forecast, kp_index_row + 3, 3, None],
|
||||
[forecast, kp_index_row + 4, 3, None],
|
||||
[forecast, kp_index_row + 5, 3, None],
|
||||
[forecast, kp_index_row + 6, 3, None],
|
||||
[forecast, kp_index_row + 7, 3, None],
|
||||
[forecast, kp_index_row + 8, 3, None],
|
||||
[forecast, kp_index_row + 9, 3, None],
|
||||
[forecast, kp_index_row + 10, 3, None]
|
||||
]
|
||||
]
|
||||
|
||||
def _get_lbl_value(data, row, col, f=None):
|
||||
"""Return the well-formatted string-value of the label."""
|
||||
val = data[row][col]
|
||||
if f is not None:
|
||||
val = f(val)
|
||||
val = val.rstrip('%')
|
||||
if len(val) > 1:
|
||||
val = val.lstrip('0')
|
||||
return val
|
||||
|
||||
class ForecastData(_BaseWeatherData):
|
||||
"""3-day forecast class. Extends _BaseWeatherData."""
|
||||
|
||||
@@ -124,49 +213,39 @@ class ForecastData(_BaseWeatherData):
|
||||
"kp_index_row": "NOAA Kp index breakdown"
|
||||
}
|
||||
|
||||
def __init__(self, parent):
|
||||
LABELS_PER_COLUMN = 20
|
||||
|
||||
def __init__(self, owner):
|
||||
"""Initialize all attributes and connect the thread to _parse_and_emit_signal."""
|
||||
super().__init__()
|
||||
self.forecast = ''
|
||||
self.probabilities = ''
|
||||
self.__labels_table = []
|
||||
self.__solar_row = None
|
||||
self.__event_row = None
|
||||
self.__rb_now_row = None
|
||||
self.__ga_now_row = None
|
||||
self.__kp_index_row = None
|
||||
self.forecast = []
|
||||
self.probabilities = []
|
||||
self._update_thread = UpdateForecastThread(self)
|
||||
self._update_thread.finished.connect(self._parse_and_emit_signal)
|
||||
# Cannot use '__' here because of the for loop below.
|
||||
self._today_lbl = parent.today_lbl
|
||||
self._today_p1_lbl = parent.today_p1_lbl
|
||||
self._today_p2_lbl = parent.today_p2_lbl
|
||||
self.__today_lbls = []
|
||||
self.__today_p1_lbls = []
|
||||
self.__today_p2_lbls = []
|
||||
self.__all_lbls = []
|
||||
self._today_lbl = owner.today_lbl
|
||||
self._today_p1_lbl = owner.today_p1_lbl
|
||||
self._today_p2_lbl = owner.today_p2_lbl
|
||||
today_lbls = []
|
||||
today_p1_lbls = []
|
||||
today_p2_lbls = []
|
||||
flags = ['', 'p1_', 'p2_']
|
||||
for flag in flags:
|
||||
title_lbl = getattr(self, "_today_" + flag + "lbl")
|
||||
title_lbl.setText("-")
|
||||
for index in range(20):
|
||||
for index in range(self.LABELS_PER_COLUMN):
|
||||
label = getattr(
|
||||
parent,
|
||||
owner,
|
||||
"forecast_today_" + flag + str(index) + "_lbl"
|
||||
)
|
||||
label.setText(Constants.UNKNOWN)
|
||||
if flag == flags[0]:
|
||||
self.__today_lbls.append(label)
|
||||
today_lbls.append(label)
|
||||
if flag == flags[1]:
|
||||
self.__today_p1_lbls.append(label)
|
||||
today_p1_lbls.append(label)
|
||||
if flag == flags[2]:
|
||||
self.__today_p2_lbls.append(label)
|
||||
today_p2_lbls.append(label)
|
||||
|
||||
self.__all_lbls = [
|
||||
self.__today_lbls,
|
||||
self.__today_p1_lbls,
|
||||
self.__today_p2_lbls
|
||||
]
|
||||
self._all_lbls = [today_lbls, today_p1_lbls, today_p2_lbls]
|
||||
|
||||
def _parse_data(self):
|
||||
"""Override _BaseWeatherData._parse_data.
|
||||
@@ -182,152 +261,65 @@ class ForecastData(_BaseWeatherData):
|
||||
)
|
||||
self.probabilities = self.probabilities.splitlines()
|
||||
|
||||
def __split_lists(self):
|
||||
def _split_lists(self):
|
||||
"""Split the elements of forecast and probabilities."""
|
||||
self.forecast = [i.split() for i in self.forecast]
|
||||
self.probabilities = [i.split() for i in self.probabilities]
|
||||
return [i.split() for i in self.forecast], [i.split() for i in self.probabilities]
|
||||
|
||||
def __find_row_with(self, data, text):
|
||||
def _find_row_with(self, data, text):
|
||||
"""Given a list of strings, return the index of the first string containing the target text."""
|
||||
for i, row in enumerate(data):
|
||||
if text in row:
|
||||
return i
|
||||
return None
|
||||
|
||||
def __get_rows(self):
|
||||
"""Set all the rows needed for updating the screen.
|
||||
def _get_rows(self):
|
||||
"""Get all the rows needed for updating the screen.
|
||||
|
||||
Raise an exception if something goes wrong."""
|
||||
self.__solar_row = self.__find_row_with(
|
||||
|
||||
rows = {}
|
||||
rows["solar_row"] = self._find_row_with(
|
||||
self.forecast,
|
||||
self.ROW_KEYWORDS["solar_row"]
|
||||
)
|
||||
self.__event_row = self.__find_row_with(
|
||||
rows["event_row"] = self._find_row_with(
|
||||
self.probabilities,
|
||||
self.ROW_KEYWORDS["event_row"]
|
||||
)
|
||||
self.__rb_now_row = self.__find_row_with(
|
||||
rows["rb_now_row"] = self._find_row_with(
|
||||
self.forecast,
|
||||
self.ROW_KEYWORDS["rb_now_row"]
|
||||
)
|
||||
self.__ga_now_row = self.__find_row_with(
|
||||
rows["ga_now_row"] = self._find_row_with(
|
||||
self.probabilities,
|
||||
self.ROW_KEYWORDS["ga_now_row"]
|
||||
)
|
||||
self.__kp_index_row = self.__find_row_with(
|
||||
rows["kp_index_row"] = self._find_row_with(
|
||||
self.forecast,
|
||||
self.ROW_KEYWORDS["kp_index_row"]
|
||||
)
|
||||
|
||||
if any([
|
||||
self.__solar_row is None,
|
||||
self.__event_row is None,
|
||||
self.__rb_now_row is None,
|
||||
self.__ga_now_row is None,
|
||||
self.__kp_index_row is None
|
||||
]):
|
||||
if any(row is None for row in rows.values()):
|
||||
raise Exception('Missing Rows')
|
||||
else:
|
||||
return rows
|
||||
|
||||
def __set_dates(self):
|
||||
def _set_dates(self, forecast, solar_row):
|
||||
"""Set the date labels."""
|
||||
month = self.forecast[self.__solar_row - 1][0]
|
||||
today = self.forecast[self.__solar_row - 1][1]
|
||||
today_p1 = self.forecast[self.__solar_row - 1][3]
|
||||
today_p2 = self.forecast[self.__solar_row - 1][5]
|
||||
month = forecast[solar_row - 1][0]
|
||||
today = forecast[solar_row - 1][1]
|
||||
today_p1 = forecast[solar_row - 1][3]
|
||||
today_p2 = forecast[solar_row - 1][5]
|
||||
self._today_lbl.setText(month + ' ' + today)
|
||||
self._today_p1_lbl.setText(month + ' ' + today_p1)
|
||||
self._today_p2_lbl.setText(month + ' ' + today_p2)
|
||||
|
||||
def __make_labels_table(self):
|
||||
"""Organize all the arguments to feed __get_lbl_value."""
|
||||
get_first_split = lambda x: x.split("/")[0]
|
||||
get_second_split = lambda x: x.split("/")[1]
|
||||
get_third_split = lambda x: x.split("/")[2]
|
||||
self.__labels_table = [
|
||||
[
|
||||
[self.forecast, self.__solar_row, 3, None],
|
||||
[self.probabilities, self.__event_row + 1, 2, get_first_split],
|
||||
[self.probabilities, self.__event_row + 2, 2, get_first_split],
|
||||
[self.probabilities, self.__event_row + 3, 1, get_first_split],
|
||||
[self.forecast, self.__rb_now_row, 1, None],
|
||||
[self.forecast, self.__rb_now_row + 1, 3, None],
|
||||
[self.probabilities, self.__ga_now_row + 2, 1, get_first_split],
|
||||
[self.probabilities, self.__ga_now_row + 3, 2, get_first_split],
|
||||
[self.probabilities, self.__ga_now_row + 4, 2, get_first_split],
|
||||
[self.probabilities, self.__ga_now_row + 6, 1, get_first_split],
|
||||
[self.probabilities, self.__ga_now_row + 7, 2, get_first_split],
|
||||
[self.probabilities, self.__ga_now_row + 8, 2, get_first_split],
|
||||
[self.forecast, self.__kp_index_row + 3, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 4, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 5, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 6, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 7, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 8, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 9, 1, None],
|
||||
[self.forecast, self.__kp_index_row + 10, 1, None]
|
||||
],
|
||||
[
|
||||
[self.forecast, self.__solar_row, 4, None],
|
||||
[self.probabilities, self.__event_row + 1, 2, get_second_split],
|
||||
[self.probabilities, self.__event_row + 2, 2, get_second_split],
|
||||
[self.probabilities, self.__event_row + 3, 1, get_second_split],
|
||||
[self.forecast, self.__rb_now_row, 2, None],
|
||||
[self.forecast, self.__rb_now_row + 1, 4, None],
|
||||
[self.probabilities, self.__ga_now_row + 2, 1, get_second_split],
|
||||
[self.probabilities, self.__ga_now_row + 3, 2, get_second_split],
|
||||
[self.probabilities, self.__ga_now_row + 4, 2, get_second_split],
|
||||
[self.probabilities, self.__ga_now_row + 6, 1, get_second_split],
|
||||
[self.probabilities, self.__ga_now_row + 7, 2, get_second_split],
|
||||
[self.probabilities, self.__ga_now_row + 8, 2, get_second_split],
|
||||
[self.forecast, self.__kp_index_row + 3, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 4, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 5, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 6, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 7, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 8, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 9, 2, None],
|
||||
[self.forecast, self.__kp_index_row + 10, 2, None]
|
||||
],
|
||||
[
|
||||
[self.forecast, self.__solar_row, 5, None],
|
||||
[self.probabilities, self.__event_row + 1, 2, get_third_split],
|
||||
[self.probabilities, self.__event_row + 2, 2, get_third_split],
|
||||
[self.probabilities, self.__event_row + 3, 1, get_third_split],
|
||||
[self.forecast, self.__rb_now_row, 3, None],
|
||||
[self.forecast, self.__rb_now_row + 1, 5, None],
|
||||
[self.probabilities, self.__ga_now_row + 2, 1, get_third_split],
|
||||
[self.probabilities, self.__ga_now_row + 3, 2, get_third_split],
|
||||
[self.probabilities, self.__ga_now_row + 4, 2, get_third_split],
|
||||
[self.probabilities, self.__ga_now_row + 6, 1, get_third_split],
|
||||
[self.probabilities, self.__ga_now_row + 7, 2, get_third_split],
|
||||
[self.probabilities, self.__ga_now_row + 8, 2, get_third_split],
|
||||
[self.forecast, self.__kp_index_row + 3, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 4, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 5, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 6, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 7, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 8, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 9, 3, None],
|
||||
[self.forecast, self.__kp_index_row + 10, 3, None]
|
||||
]
|
||||
]
|
||||
|
||||
def __get_lbl_value(self, data, row, col, f=None):
|
||||
"""Return the well-formatted string-value of the label."""
|
||||
val = data[row][col]
|
||||
if f is not None:
|
||||
val = f(val)
|
||||
val = val.rstrip('%')
|
||||
if len(val) > 1:
|
||||
val = val.lstrip('0')
|
||||
return val
|
||||
|
||||
def __set_labels_values(self):
|
||||
def _set_labels_values(self, labels_table):
|
||||
"""Set all the labels values."""
|
||||
for lbl_list, table in zip(self.__all_lbls, self.__labels_table):
|
||||
for lbl_list, table in zip(self._all_lbls, labels_table):
|
||||
for lbl, row in zip(lbl_list, table):
|
||||
lbl.switch_off()
|
||||
value = self.__get_lbl_value(*row)
|
||||
value = _get_lbl_value(*row)
|
||||
lbl.level = safe_cast(value, int)
|
||||
if not isinstance(lbl, MultiColorSwitchableLabel):
|
||||
value += '%'
|
||||
@@ -339,15 +331,15 @@ class ForecastData(_BaseWeatherData):
|
||||
|
||||
If an exception is raised in the process, do nothing."""
|
||||
try:
|
||||
self.__get_rows()
|
||||
self.__split_lists()
|
||||
self.__make_labels_table()
|
||||
self.__set_dates()
|
||||
self.__set_labels_values()
|
||||
rows = self._get_rows()
|
||||
forecast, probabilities = self._split_lists()
|
||||
labels_table = _make_labels_table(forecast, probabilities, rows)
|
||||
self._set_dates(forecast, rows["solar_row"])
|
||||
self._set_labels_values(labels_table)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def remove_data(self):
|
||||
"""Remove the reference to the downloaded data."""
|
||||
self.forecast = ''
|
||||
self.probabilities = ''
|
||||
self.forecast = []
|
||||
self.probabilities = []
|
||||
|
||||
Reference in New Issue
Block a user