Minor constants.py refactoring
This commit is contained in:
198
artemis.py
198
artemis.py
@@ -27,7 +27,13 @@ from audio_player import AudioPlayer
|
|||||||
from double_text_button import DoubleTextButton
|
from double_text_button import DoubleTextButton
|
||||||
from download_window import DownloadWindow
|
from download_window import DownloadWindow
|
||||||
|
|
||||||
import constants
|
from constants import (Constants,
|
||||||
|
Ftype,
|
||||||
|
GfdType,
|
||||||
|
Database,
|
||||||
|
ChecksumWhat,
|
||||||
|
Messages,
|
||||||
|
Signal,)
|
||||||
from themes import Theme
|
from themes import Theme
|
||||||
|
|
||||||
from utilities import (checksum_ok,
|
from utilities import (checksum_ok,
|
||||||
@@ -127,7 +133,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.upper_freq_confidence)
|
self.upper_freq_confidence)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.apply_remove_freq_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_freq_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_freq_filter_btn.set_slave_filters(
|
self.apply_remove_freq_filter_btn.set_slave_filters(
|
||||||
[
|
[
|
||||||
*self.frequency_filters_btns,
|
*self.frequency_filters_btns,
|
||||||
@@ -149,7 +155,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
self.apply_remove_freq_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_freq_filter_btn.clicked.connect(self.display_signals)
|
||||||
self.reset_frequency_filters_btn.clicked.connect(partial(self.reset_fb_filters, constants.Ftype.FREQ))
|
self.reset_frequency_filters_btn.clicked.connect(partial(self.reset_fb_filters, Ftype.FREQ))
|
||||||
|
|
||||||
# Manage bandwidth filters.
|
# Manage bandwidth filters.
|
||||||
|
|
||||||
@@ -203,7 +209,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.upper_band_confidence)
|
self.upper_band_confidence)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.apply_remove_band_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_band_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_band_filter_btn.set_slave_filters(
|
self.apply_remove_band_filter_btn.set_slave_filters(
|
||||||
[
|
[
|
||||||
self.include_undef_bands,
|
self.include_undef_bands,
|
||||||
@@ -224,7 +230,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
self.apply_remove_band_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_band_filter_btn.clicked.connect(self.display_signals)
|
||||||
self.reset_band_filters_btn.clicked.connect(partial(self.reset_fb_filters, constants.Ftype.BAND))
|
self.reset_band_filters_btn.clicked.connect(partial(self.reset_fb_filters, Ftype.BAND))
|
||||||
|
|
||||||
# Manage category filters
|
# Manage category filters
|
||||||
|
|
||||||
@@ -247,7 +253,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.number_stations_btn,
|
self.number_stations_btn,
|
||||||
self.time_signal_btn,]
|
self.time_signal_btn,]
|
||||||
|
|
||||||
self.apply_remove_cat_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_cat_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_cat_filter_btn.set_slave_filters([*self.cat_filter_btns,
|
self.apply_remove_cat_filter_btn.set_slave_filters([*self.cat_filter_btns,
|
||||||
self.cat_at_least_one,
|
self.cat_at_least_one,
|
||||||
self.cat_all])
|
self.cat_all])
|
||||||
@@ -293,16 +299,16 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.set_mode_tree_widget()
|
self.set_mode_tree_widget()
|
||||||
self.mode_tree_widget.itemSelectionChanged.connect(self.manage_mode_selections)
|
self.mode_tree_widget.itemSelectionChanged.connect(self.manage_mode_selections)
|
||||||
self.reset_mode_filters_btn.clicked.connect(self.reset_mode_filters)
|
self.reset_mode_filters_btn.clicked.connect(self.reset_mode_filters)
|
||||||
self.apply_remove_mode_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_mode_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_mode_filter_btn.set_slave_filters([self.mode_tree_widget,
|
self.apply_remove_mode_filter_btn.set_slave_filters([self.mode_tree_widget,
|
||||||
self.include_unknown_modes_btn])
|
self.include_unknown_modes_btn])
|
||||||
self.apply_remove_mode_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_mode_filter_btn.clicked.connect(self.display_signals)
|
||||||
|
|
||||||
# Set modulation filter screen.
|
# Set modulation filter screen.
|
||||||
|
|
||||||
self.modulation_list.addItems(constants.MODULATIONS)
|
self.modulation_list.addItems(Constants.MODULATIONS)
|
||||||
self.search_bar_modulation.textEdited.connect(self.show_matching_modulations)
|
self.search_bar_modulation.textEdited.connect(self.show_matching_modulations)
|
||||||
self.apply_remove_modulation_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_modulation_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_modulation_filter_btn.set_slave_filters([self.search_bar_modulation,
|
self.apply_remove_modulation_filter_btn.set_slave_filters([self.search_bar_modulation,
|
||||||
self.modulation_list])
|
self.modulation_list])
|
||||||
self.apply_remove_modulation_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_modulation_filter_btn.clicked.connect(self.display_signals)
|
||||||
@@ -311,9 +317,9 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
# Set location filter screen.
|
# Set location filter screen.
|
||||||
|
|
||||||
self.locations_list.addItems(constants.LOCATIONS)
|
self.locations_list.addItems(Constants.LOCATIONS)
|
||||||
self.search_bar_location.textEdited.connect(self.show_matching_locations)
|
self.search_bar_location.textEdited.connect(self.show_matching_locations)
|
||||||
self.apply_remove_location_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_location_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_location_filter_btn.set_slave_filters([self.search_bar_location,
|
self.apply_remove_location_filter_btn.set_slave_filters([self.search_bar_location,
|
||||||
self.locations_list])
|
self.locations_list])
|
||||||
self.apply_remove_location_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_location_filter_btn.clicked.connect(self.display_signals)
|
||||||
@@ -321,11 +327,11 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.locations_list.itemClicked.connect(self.remove_if_unselected_location)
|
self.locations_list.itemClicked.connect(self.remove_if_unselected_location)
|
||||||
|
|
||||||
# Set ACF filter screen.
|
# Set ACF filter screen.
|
||||||
self.apply_remove_acf_filter_btn.set_texts(constants.APPLY, constants.REMOVE)
|
self.apply_remove_acf_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE)
|
||||||
self.apply_remove_acf_filter_btn.set_slave_filters([self.include_undef_acf, self.acf_spinbox, self.acf_confidence])
|
self.apply_remove_acf_filter_btn.set_slave_filters([self.include_undef_acf, self.acf_spinbox, self.acf_confidence])
|
||||||
self.apply_remove_acf_filter_btn.clicked.connect(self.display_signals)
|
self.apply_remove_acf_filter_btn.clicked.connect(self.display_signals)
|
||||||
self.reset_acf_filters_btn.clicked.connect(self.reset_acf_filters)
|
self.reset_acf_filters_btn.clicked.connect(self.reset_acf_filters)
|
||||||
self.acf_info_btn.clicked.connect(lambda : webbrowser.open(constants.ACF_DOCS))
|
self.acf_info_btn.clicked.connect(lambda : webbrowser.open(Constants.ACF_DOCS))
|
||||||
|
|
||||||
connect_to(
|
connect_to(
|
||||||
events_to_connect = [self.acf_spinbox.valueChanged, self.acf_confidence.valueChanged],
|
events_to_connect = [self.acf_spinbox.valueChanged, self.acf_confidence.valueChanged],
|
||||||
@@ -334,9 +340,9 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# GFD
|
# GFD
|
||||||
self.freq_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, constants.GfdType.FREQ))
|
self.freq_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, GfdType.FREQ))
|
||||||
self.location_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, constants.GfdType.LOC))
|
self.location_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, GfdType.LOC))
|
||||||
self.gfd_line_edit.returnPressed.connect(partial(self.go_to_gfd, constants.GfdType.LOC))
|
self.gfd_line_edit.returnPressed.connect(partial(self.go_to_gfd, GfdType.LOC))
|
||||||
|
|
||||||
# ##########################################################################################
|
# ##########################################################################################
|
||||||
|
|
||||||
@@ -379,13 +385,13 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def go_to_gfd(self, by):
|
def go_to_gfd(self, by):
|
||||||
query = "/?q="
|
query = "/?q="
|
||||||
if by == constants.GfdType.FREQ:
|
if by == GfdType.FREQ:
|
||||||
value_in_mhz = self.freq_gfd.value() * constants.CONVERSION_FACTORS[self.unit_freq_gfd.currentText()] / constants.CONVERSION_FACTORS["MHz"]
|
value_in_mhz = self.freq_gfd.value() * Constants.CONVERSION_FACTORS[self.unit_freq_gfd.currentText()] / Constants.CONVERSION_FACTORS["MHz"]
|
||||||
query += str(value_in_mhz)
|
query += str(value_in_mhz)
|
||||||
elif by == constants.GfdType.LOC:
|
elif by == GfdType.LOC:
|
||||||
query += self.gfd_line_edit.text()
|
query += self.gfd_line_edit.text()
|
||||||
try:
|
try:
|
||||||
webbrowser.open(constants.GFD_SITE + query.lower())
|
webbrowser.open(Constants.GFD_SITE + query.lower())
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -417,7 +423,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
item.setHidden(True)
|
item.setHidden(True)
|
||||||
|
|
||||||
def set_mode_tree_widget(self):
|
def set_mode_tree_widget(self):
|
||||||
for parent, children in constants.MODES.items():
|
for parent, children in Constants.MODES.items():
|
||||||
iparent = QTreeWidgetItem([parent])
|
iparent = QTreeWidgetItem([parent])
|
||||||
self.mode_tree_widget.addTopLevelItem(iparent)
|
self.mode_tree_widget.addTopLevelItem(iparent)
|
||||||
for child in children:
|
for child in children:
|
||||||
@@ -427,11 +433,11 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def manage_mode_selections(self):
|
def manage_mode_selections(self):
|
||||||
selected_items = self.mode_tree_widget.selectedItems()
|
selected_items = self.mode_tree_widget.selectedItems()
|
||||||
parents = constants.MODES.keys()
|
parents = Constants.MODES.keys()
|
||||||
for parent in parents:
|
for parent in parents:
|
||||||
for item in selected_items:
|
for item in selected_items:
|
||||||
if parent == item.text(0):
|
if parent == item.text(0):
|
||||||
for i in range(len(constants.MODES[parent])):
|
for i in range(len(Constants.MODES[parent])):
|
||||||
item.child(i).setSelected(True)
|
item.child(i).setSelected(True)
|
||||||
|
|
||||||
def set_initial_size(self):
|
def set_initial_size(self):
|
||||||
@@ -493,7 +499,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def ask_if_download(self):
|
def ask_if_download(self):
|
||||||
if not self.download_window.isVisible():
|
if not self.download_window.isVisible():
|
||||||
db_path = os.path.join(constants.DATA_FOLDER, constants.Database.NAME)
|
db_path = os.path.join(Constants.DATA_FOLDER, Database.NAME)
|
||||||
try:
|
try:
|
||||||
with open(db_path, "rb") as file_db:
|
with open(db_path, "rb") as file_db:
|
||||||
db = file_db.read()
|
db = file_db.read()
|
||||||
@@ -501,17 +507,17 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.download_db()
|
self.download_db()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
is_checksum_ok = checksum_ok(db, constants.ChecksumWhat.DB)
|
is_checksum_ok = checksum_ok(db, ChecksumWhat.DB)
|
||||||
except:
|
except:
|
||||||
pop_up(self, title = constants.Messages.NO_CONNECTION,
|
pop_up(self, title = Messages.NO_CONNECTION,
|
||||||
text = constants.Messages.NO_CONNECTION_MSG).show()
|
text = Messages.NO_CONNECTION_MSG).show()
|
||||||
else:
|
else:
|
||||||
if not is_checksum_ok:
|
if not is_checksum_ok:
|
||||||
self.download_db()
|
self.download_db()
|
||||||
else:
|
else:
|
||||||
answer = pop_up(self, title = constants.Messages.DB_UP_TO_DATE,
|
answer = pop_up(self, title = Messages.DB_UP_TO_DATE,
|
||||||
text = constants.Messages.DB_UP_TO_DATE_MSG,
|
text = Messages.DB_UP_TO_DATE_MSG,
|
||||||
informative_text = constants.Messages.DOWNLOAD_ANYWAY_QUESTION,
|
informative_text = Messages.DOWNLOAD_ANYWAY_QUESTION,
|
||||||
is_question = True,
|
is_question = True,
|
||||||
default_btn = QMessageBox.No).exec()
|
default_btn = QMessageBox.No).exec()
|
||||||
if answer == QMessageBox.Yes:
|
if answer == QMessageBox.Yes:
|
||||||
@@ -520,31 +526,31 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def check_db_ver(self):
|
def check_db_ver(self):
|
||||||
if not self.download_window.isVisible():
|
if not self.download_window.isVisible():
|
||||||
db_path = os.path.join(constants.DATA_FOLDER, constants.Database.NAME)
|
db_path = os.path.join(Constants.DATA_FOLDER, Database.NAME)
|
||||||
answer = None
|
answer = None
|
||||||
try:
|
try:
|
||||||
with open(db_path, "rb") as file_db:
|
with open(db_path, "rb") as file_db:
|
||||||
db = file_db.read()
|
db = file_db.read()
|
||||||
except:
|
except:
|
||||||
answer = pop_up(self, title = constants.Messages.NO_DB,
|
answer = pop_up(self, title = Messages.NO_DB,
|
||||||
text = constants.Messages.NO_DB_AVAIL,
|
text = Messages.NO_DB_AVAIL,
|
||||||
informative_text = constants.Messages.DOWNLOAD_NOW_QUESTION,
|
informative_text = Messages.DOWNLOAD_NOW_QUESTION,
|
||||||
is_question = True).exec()
|
is_question = True).exec()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
is_checksum_ok = checksum_ok(db, constants.ChecksumWhat.DB)
|
is_checksum_ok = checksum_ok(db, ChecksumWhat.DB)
|
||||||
except:
|
except:
|
||||||
pop_up(self, title = constants.Messages.NO_CONNECTION,
|
pop_up(self, title = Messages.NO_CONNECTION,
|
||||||
text = constants.Messages.NO_CONNECTION_MSG).show()
|
text = Messages.NO_CONNECTION_MSG).show()
|
||||||
else:
|
else:
|
||||||
if is_checksum_ok:
|
if is_checksum_ok:
|
||||||
pop_up(self, title = constants.Messages.DB_UP_TO_DATE,
|
pop_up(self, title = Messages.DB_UP_TO_DATE,
|
||||||
text = constants.Messages.DB_UP_TO_DATE_MSG).show()
|
text = Messages.DB_UP_TO_DATE_MSG).show()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
answer = pop_up(self, title = constants.Messages.DB_NEW_VER,
|
answer = pop_up(self, title = Messages.DB_NEW_VER,
|
||||||
text = constants.Messages.DB_NEW_VER_MSG,
|
text = Messages.DB_NEW_VER_MSG,
|
||||||
informative_text = constants.Messages.DOWNLOAD_NOW_QUESTION,
|
informative_text = Messages.DOWNLOAD_NOW_QUESTION,
|
||||||
is_question = True).exec()
|
is_question = True).exec()
|
||||||
if answer == QMessageBox.Yes:
|
if answer == QMessageBox.Yes:
|
||||||
self.download_db()
|
self.download_db()
|
||||||
@@ -557,27 +563,27 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.display_signals()
|
self.display_signals()
|
||||||
|
|
||||||
def load_db(self):
|
def load_db(self):
|
||||||
names = constants.Database.NAMES
|
names = Database.NAMES
|
||||||
try:
|
try:
|
||||||
self.db = read_csv(os.path.join(constants.DATA_FOLDER, constants.Database.NAME),
|
self.db = read_csv(os.path.join(Constants.DATA_FOLDER, Database.NAME),
|
||||||
sep = constants.Database.DELIMITER,
|
sep = Database.DELIMITER,
|
||||||
header = None,
|
header = None,
|
||||||
index_col = 0,
|
index_col = 0,
|
||||||
dtype = {name : str for name in constants.Database.STRINGS},
|
dtype = {name : str for name in Database.STRINGS},
|
||||||
names = names,)
|
names = names,)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
self.search_bar.setDisabled(True)
|
self.search_bar.setDisabled(True)
|
||||||
answer = pop_up(self, title = constants.Messages.NO_DB,
|
answer = pop_up(self, title = Messages.NO_DB,
|
||||||
text = constants.Messages.NO_DB_AVAIL,
|
text = Messages.NO_DB_AVAIL,
|
||||||
informative_text = constants.Messages.DOWNLOAD_NOW_QUESTION,
|
informative_text = Messages.DOWNLOAD_NOW_QUESTION,
|
||||||
is_question = True).exec()
|
is_question = True).exec()
|
||||||
if answer == QMessageBox.Yes:
|
if answer == QMessageBox.Yes:
|
||||||
self.download_db()
|
self.download_db()
|
||||||
else:
|
else:
|
||||||
self.signal_names = self.db.index
|
self.signal_names = self.db.index
|
||||||
self.total_signals = len(self.signal_names)
|
self.total_signals = len(self.signal_names)
|
||||||
self.db.fillna(constants.UNKNOWN, inplace = True)
|
self.db.fillna(Constants.UNKNOWN, inplace = True)
|
||||||
self.db[constants.Signal.WIKI_CLICKED] = False
|
self.db[Signal.WIKI_CLICKED] = False
|
||||||
self.update_status_tip(self.total_signals)
|
self.update_status_tip(self.total_signals)
|
||||||
self.result_list.addItems(self.signal_names)
|
self.result_list.addItems(self.signal_names)
|
||||||
|
|
||||||
@@ -594,8 +600,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
upper_units = upper_combo_box.currentText()
|
upper_units = upper_combo_box.currentText()
|
||||||
lower_value = lower_spin_box.value()
|
lower_value = lower_spin_box.value()
|
||||||
upper_value = upper_spin_box.value()
|
upper_value = upper_spin_box.value()
|
||||||
inf_limit = (lower_value * constants.CONVERSION_FACTORS[lower_units]) \
|
inf_limit = (lower_value * Constants.CONVERSION_FACTORS[lower_units]) \
|
||||||
// constants.CONVERSION_FACTORS[upper_units]
|
// Constants.CONVERSION_FACTORS[upper_units]
|
||||||
counter = 0
|
counter = 0
|
||||||
while inf_limit > upper_spin_box.maximum():
|
while inf_limit > upper_spin_box.maximum():
|
||||||
counter += 1
|
counter += 1
|
||||||
@@ -636,17 +642,17 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
min_value = lower_spinbox.value()
|
min_value = lower_spinbox.value()
|
||||||
if lower_confidence.value() != 0:
|
if lower_confidence.value() != 0:
|
||||||
min_value -= lower_spinbox.value() * lower_confidence.value() / 100
|
min_value -= lower_spinbox.value() * lower_confidence.value() / 100
|
||||||
to_display += str(round(min_value, constants.MAX_DIGITS)) + ' ' + lower_unit.currentText()
|
to_display += str(round(min_value, Constants.MAX_DIGITS)) + ' ' + lower_unit.currentText()
|
||||||
else:
|
else:
|
||||||
to_display += 'DC'
|
to_display += 'DC'
|
||||||
to_display += constants.RANGE_SEPARATOR
|
to_display += Constants.RANGE_SEPARATOR
|
||||||
if activate_up_btn.isChecked():
|
if activate_up_btn.isChecked():
|
||||||
max_value = upper_spinbox.value()
|
max_value = upper_spinbox.value()
|
||||||
activate_high = True
|
activate_high = True
|
||||||
color = self.active_color
|
color = self.active_color
|
||||||
if upper_confidence.value() != 0:
|
if upper_confidence.value() != 0:
|
||||||
max_value += upper_spinbox.value() * upper_confidence.value() / 100
|
max_value += upper_spinbox.value() * upper_confidence.value() / 100
|
||||||
to_display += str(round(max_value, constants.MAX_DIGITS)) + ' ' + upper_unit.currentText()
|
to_display += str(round(max_value, Constants.MAX_DIGITS)) + ' ' + upper_unit.currentText()
|
||||||
else:
|
else:
|
||||||
to_display += 'INF'
|
to_display += 'INF'
|
||||||
if activate_low and activate_high:
|
if activate_low and activate_high:
|
||||||
@@ -666,8 +672,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def set_acf_interval_label(self):
|
def set_acf_interval_label(self):
|
||||||
tolerance = self.acf_spinbox.value() * self.acf_confidence.value() / 100
|
tolerance = self.acf_spinbox.value() * self.acf_confidence.value() / 100
|
||||||
if tolerance > 0:
|
if tolerance > 0:
|
||||||
to_display = f"Selected range:\n\n{round(self.acf_spinbox.value() - tolerance, constants.MAX_DIGITS)}" +\
|
to_display = f"Selected range:\n\n{round(self.acf_spinbox.value() - tolerance, Constants.MAX_DIGITS)}" +\
|
||||||
constants.RANGE_SEPARATOR + f"{round(self.acf_spinbox.value() + tolerance, constants.MAX_DIGITS)} ms"
|
Constants.RANGE_SEPARATOR + f"{round(self.acf_spinbox.value() + tolerance, Constants.MAX_DIGITS)} ms"
|
||||||
else:
|
else:
|
||||||
to_display = f"Selected value:\n\n{self.acf_spinbox.value()} ms"
|
to_display = f"Selected value:\n\n{self.acf_spinbox.value()} ms"
|
||||||
self.acf_range_lbl.setText(to_display)
|
self.acf_range_lbl.setText(to_display)
|
||||||
@@ -709,7 +715,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def reset_fb_filters(self, ftype):
|
def reset_fb_filters(self, ftype):
|
||||||
if ftype != constants.Ftype.FREQ and ftype != constants.Ftype.BAND:
|
if ftype != Ftype.FREQ and ftype != Ftype.BAND:
|
||||||
raise ValueError("Wrong ftype in function 'reset_fb_filters'")
|
raise ValueError("Wrong ftype in function 'reset_fb_filters'")
|
||||||
apply_remove_btn = getattr(self, 'apply_remove_' + ftype + '_filter_btn')
|
apply_remove_btn = getattr(self, 'apply_remove_' + ftype + '_filter_btn')
|
||||||
include_undef_btn = getattr(self, 'include_undef_' + ftype + 's')
|
include_undef_btn = getattr(self, 'include_undef_' + ftype + 's')
|
||||||
@@ -721,8 +727,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
upper_spinbox = getattr(self, 'upper_' + ftype + '_spinbox')
|
upper_spinbox = getattr(self, 'upper_' + ftype + '_spinbox')
|
||||||
lower_confidence = getattr(self, 'lower_' + ftype + '_confidence')
|
lower_confidence = getattr(self, 'lower_' + ftype + '_confidence')
|
||||||
upper_confidence = getattr(self, 'lower_' + ftype + '_confidence')
|
upper_confidence = getattr(self, 'lower_' + ftype + '_confidence')
|
||||||
default_val = 1 if ftype == constants.Ftype.FREQ else 5000
|
default_val = 1 if ftype == Ftype.FREQ else 5000
|
||||||
if ftype == constants.Ftype.FREQ:
|
if ftype == Ftype.FREQ:
|
||||||
for f in self.frequency_filters_btns:
|
for f in self.frequency_filters_btns:
|
||||||
if f.isChecked():
|
if f.isChecked():
|
||||||
f.setChecked(False)
|
f.setChecked(False)
|
||||||
@@ -789,12 +795,12 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
signal_freqs = (int(self.db.at[signal_name, constants.Signal.INF_FREQ]),
|
signal_freqs = (int(self.db.at[signal_name, Signal.INF_FREQ]),
|
||||||
int(self.db.at[signal_name, constants.Signal.SUP_FREQ]))
|
int(self.db.at[signal_name, Signal.SUP_FREQ]))
|
||||||
|
|
||||||
band_filter_ok = False
|
band_filter_ok = False
|
||||||
any_checked = False
|
any_checked = False
|
||||||
for btn, band_limits in zip(self.frequency_filters_btns, constants.BANDS):
|
for btn, band_limits in zip(self.frequency_filters_btns, Constants.BANDS):
|
||||||
if btn.isChecked():
|
if btn.isChecked():
|
||||||
any_checked = True
|
any_checked = True
|
||||||
if signal_freqs[0] < band_limits.upper and signal_freqs[1] >= band_limits.lower:
|
if signal_freqs[0] < band_limits.upper and signal_freqs[1] >= band_limits.lower:
|
||||||
@@ -826,8 +832,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
signal_bands = (int(self.db.at[signal_name, constants.Signal.INF_BAND]),
|
signal_bands = (int(self.db.at[signal_name, Signal.INF_BAND]),
|
||||||
int(self.db.at[signal_name, constants.Signal.SUP_BAND]))
|
int(self.db.at[signal_name, Signal.SUP_BAND]))
|
||||||
|
|
||||||
lower_limit_ok = True
|
lower_limit_ok = True
|
||||||
upper_limit_ok = True
|
upper_limit_ok = True
|
||||||
@@ -846,7 +852,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def category_filters_ok(self, signal_name):
|
def category_filters_ok(self, signal_name):
|
||||||
if not self.apply_remove_cat_filter_btn.isChecked():
|
if not self.apply_remove_cat_filter_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
cat_code = self.db.at[signal_name, constants.Signal.CATEGORY_CODE]
|
cat_code = self.db.at[signal_name, Signal.CATEGORY_CODE]
|
||||||
cat_checked = 0
|
cat_checked = 0
|
||||||
positive_cases = 0
|
positive_cases = 0
|
||||||
for index, cat in enumerate(self.cat_filter_btns):
|
for index, cat in enumerate(self.cat_filter_btns):
|
||||||
@@ -862,15 +868,15 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def mode_filters_ok(self, signal_name):
|
def mode_filters_ok(self, signal_name):
|
||||||
if not self.apply_remove_mode_filter_btn.isChecked():
|
if not self.apply_remove_mode_filter_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
signal_mode = self.db.at[signal_name, constants.Signal.MODE]
|
signal_mode = self.db.at[signal_name, Signal.MODE]
|
||||||
if signal_mode == constants.UNKNOWN:
|
if signal_mode == Constants.UNKNOWN:
|
||||||
if self.include_unknown_modes_btn.isChecked():
|
if self.include_unknown_modes_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
selected_items = [item for item in self.mode_tree_widget.selectedItems()]
|
selected_items = [item for item in self.mode_tree_widget.selectedItems()]
|
||||||
selected_items_text = [i.text(0) for i in selected_items]
|
selected_items_text = [i.text(0) for i in selected_items]
|
||||||
parents = [item for item in selected_items_text if item in constants.MODES.keys()]
|
parents = [item for item in selected_items_text if item in Constants.MODES.keys()]
|
||||||
children = [item for item in selected_items_text if item not in parents]
|
children = [item for item in selected_items_text if item not in parents]
|
||||||
ok = []
|
ok = []
|
||||||
for item in selected_items:
|
for item in selected_items:
|
||||||
@@ -883,7 +889,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def modulation_filters_ok(self, signal_name):
|
def modulation_filters_ok(self, signal_name):
|
||||||
if not self.apply_remove_modulation_filter_btn.isChecked():
|
if not self.apply_remove_modulation_filter_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
signal_modulation = self.db.at[signal_name, constants.Signal.MODULATION]
|
signal_modulation = self.db.at[signal_name, Signal.MODULATION]
|
||||||
for item in self.modulation_list.selectedItems():
|
for item in self.modulation_list.selectedItems():
|
||||||
if item.text() == signal_modulation:
|
if item.text() == signal_modulation:
|
||||||
return True
|
return True
|
||||||
@@ -892,7 +898,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def location_filters_ok(self, signal_name):
|
def location_filters_ok(self, signal_name):
|
||||||
if not self.apply_remove_location_filter_btn.isChecked():
|
if not self.apply_remove_location_filter_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
signal_location = self.db.at[signal_name, constants.Signal.LOCATION]
|
signal_location = self.db.at[signal_name, Signal.LOCATION]
|
||||||
for item in self.locations_list.selectedItems():
|
for item in self.locations_list.selectedItems():
|
||||||
if item.text() == signal_location:
|
if item.text() == signal_location:
|
||||||
return True
|
return True
|
||||||
@@ -901,8 +907,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def acf_filters_ok(self, signal_name):
|
def acf_filters_ok(self, signal_name):
|
||||||
if not self.apply_remove_acf_filter_btn.isChecked():
|
if not self.apply_remove_acf_filter_btn.isChecked():
|
||||||
return True
|
return True
|
||||||
signal_acf = self.db.at[signal_name, constants.Signal.ACF]
|
signal_acf = self.db.at[signal_name, Signal.ACF]
|
||||||
if signal_acf == constants.UNKNOWN:
|
if signal_acf == Constants.UNKNOWN:
|
||||||
if self.include_undef_acf.isChecked():
|
if self.include_undef_acf.isChecked():
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@@ -926,31 +932,31 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.name_lab.setAlignment(Qt.AlignHCenter)
|
self.name_lab.setAlignment(Qt.AlignHCenter)
|
||||||
current_signal = self.db.loc[self.current_signal_name]
|
current_signal = self.db.loc[self.current_signal_name]
|
||||||
self.url_button.setEnabled(True)
|
self.url_button.setEnabled(True)
|
||||||
if not current_signal.at[constants.Signal.WIKI_CLICKED]:
|
if not current_signal.at[Signal.WIKI_CLICKED]:
|
||||||
self.url_button.setStyleSheet(f"color: {self.url_button.colors.active};")
|
self.url_button.setStyleSheet(f"color: {self.url_button.colors.active};")
|
||||||
else:
|
else:
|
||||||
self.url_button.setStyleSheet(f"color: {self.url_button.colors.clicked};")
|
self.url_button.setStyleSheet(f"color: {self.url_button.colors.clicked};")
|
||||||
category_code = current_signal.at[constants.Signal.CATEGORY_CODE]
|
category_code = current_signal.at[Signal.CATEGORY_CODE]
|
||||||
undef_freq = is_undef_freq(current_signal)
|
undef_freq = is_undef_freq(current_signal)
|
||||||
undef_band = is_undef_band(current_signal)
|
undef_band = is_undef_band(current_signal)
|
||||||
if not undef_freq:
|
if not undef_freq:
|
||||||
self.freq_lab.setText(format_numbers(current_signal.at[constants.Signal.INF_FREQ],
|
self.freq_lab.setText(format_numbers(current_signal.at[Signal.INF_FREQ],
|
||||||
current_signal.at[constants.Signal.SUP_FREQ])
|
current_signal.at[Signal.SUP_FREQ])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.freq_lab.setText("Undefined")
|
self.freq_lab.setText("Undefined")
|
||||||
if not undef_band:
|
if not undef_band:
|
||||||
self.band_lab.setText(format_numbers(current_signal.at[constants.Signal.INF_BAND],
|
self.band_lab.setText(format_numbers(current_signal.at[Signal.INF_BAND],
|
||||||
current_signal.at[constants.Signal.SUP_BAND])
|
current_signal.at[Signal.SUP_BAND])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.band_lab.setText("Undefined")
|
self.band_lab.setText("Undefined")
|
||||||
|
|
||||||
self.mode_lab.setText(current_signal.at[constants.Signal.MODE])
|
self.mode_lab.setText(current_signal.at[Signal.MODE])
|
||||||
self.modul_lab.setText(current_signal.at[constants.Signal.MODULATION])
|
self.modul_lab.setText(current_signal.at[Signal.MODULATION])
|
||||||
self.loc_lab.setText(current_signal.at[constants.Signal.LOCATION])
|
self.loc_lab.setText(current_signal.at[Signal.LOCATION])
|
||||||
self.acf_lab.setText(current_signal.at[constants.Signal.ACF])
|
self.acf_lab.setText(current_signal.at[Signal.ACF])
|
||||||
self.description_text.setText(current_signal.at[constants.Signal.DESCRIPTION])
|
self.description_text.setText(current_signal.at[Signal.DESCRIPTION])
|
||||||
for cat, cat_lab in zip(category_code, self.category_labels):
|
for cat, cat_lab in zip(category_code, self.category_labels):
|
||||||
if cat == '0':
|
if cat == '0':
|
||||||
cat_lab.setStyleSheet(f"color: {self.inactive_color};")
|
cat_lab.setStyleSheet(f"color: {self.inactive_color};")
|
||||||
@@ -965,22 +971,22 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
self.name_lab.setText("No Signal")
|
self.name_lab.setText("No Signal")
|
||||||
self.name_lab.setAlignment(Qt.AlignHCenter)
|
self.name_lab.setAlignment(Qt.AlignHCenter)
|
||||||
for lab in self.property_labels:
|
for lab in self.property_labels:
|
||||||
lab.setText(constants.UNKNOWN)
|
lab.setText(Constants.UNKNOWN)
|
||||||
for lab in self.category_labels:
|
for lab in self.category_labels:
|
||||||
lab.setStyleSheet(f"color: {self.inactive_color};")
|
lab.setStyleSheet(f"color: {self.inactive_color};")
|
||||||
self.set_band_range()
|
self.set_band_range()
|
||||||
self.audio_widget.set_audio_player()
|
self.audio_widget.set_audio_player()
|
||||||
|
|
||||||
def display_spectrogram(self):
|
def display_spectrogram(self):
|
||||||
default_pic = os.path.join(self.default_images_folder, constants.NOT_SELECTED)
|
default_pic = os.path.join(self.default_images_folder, Constants.NOT_SELECTED)
|
||||||
item = self.result_list.currentItem()
|
item = self.result_list.currentItem()
|
||||||
if item:
|
if item:
|
||||||
spectrogram_name = item.text()
|
spectrogram_name = item.text()
|
||||||
path_spectr = os.path.join(constants.DATA_FOLDER,
|
path_spectr = os.path.join(Constants.DATA_FOLDER,
|
||||||
constants.SPECTRA_FOLDER,
|
Constants.SPECTRA_FOLDER,
|
||||||
spectrogram_name + constants.SPECTRA_EXT)
|
spectrogram_name + Constants.SPECTRA_EXT)
|
||||||
if not QFileInfo(path_spectr).exists():
|
if not QFileInfo(path_spectr).exists():
|
||||||
path_spectr = os.path.join(self.default_images_folder, constants.NOT_AVAILABLE)
|
path_spectr = os.path.join(self.default_images_folder, Constants.NOT_AVAILABLE)
|
||||||
else:
|
else:
|
||||||
path_spectr = default_pic
|
path_spectr = default_pic
|
||||||
self.spectrogram.setPixmap(QPixmap(path_spectr))
|
self.spectrogram.setPixmap(QPixmap(path_spectr))
|
||||||
@@ -992,9 +998,9 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def set_band_range(self, current_signal = None):
|
def set_band_range(self, current_signal = None):
|
||||||
if current_signal is not None and not is_undef_freq(current_signal):
|
if current_signal is not None and not is_undef_freq(current_signal):
|
||||||
lower_freq = int(current_signal.at[constants.Signal.INF_FREQ])
|
lower_freq = int(current_signal.at[Signal.INF_FREQ])
|
||||||
upper_freq = int(current_signal.at[constants.Signal.SUP_FREQ])
|
upper_freq = int(current_signal.at[Signal.SUP_FREQ])
|
||||||
zipped = list(zip(constants.BANDS, self.band_labels))
|
zipped = list(zip(Constants.BANDS, self.band_labels))
|
||||||
for i, w in enumerate(zipped):
|
for i, w in enumerate(zipped):
|
||||||
band, band_label = w
|
band, band_label = w
|
||||||
if lower_freq >= band.lower and lower_freq < band.upper:
|
if lower_freq >= band.lower and lower_freq < band.upper:
|
||||||
@@ -1025,8 +1031,8 @@ class Artemis(QMainWindow, Ui_MainWindow):
|
|||||||
def go_to_web_page_signal(self):
|
def go_to_web_page_signal(self):
|
||||||
if self.current_signal_name:
|
if self.current_signal_name:
|
||||||
self.url_button.setStyleSheet(f"color: {self.url_button.colors.clicked}")
|
self.url_button.setStyleSheet(f"color: {self.url_button.colors.clicked}")
|
||||||
webbrowser.open(self.db.at[self.current_signal_name, constants.Signal.URL])
|
webbrowser.open(self.db.at[self.current_signal_name, Signal.URL])
|
||||||
self.db.at[self.current_signal_name, constants.Signal.WIKI_CLICKED] = True
|
self.db.at[self.current_signal_name, Signal.WIKI_CLICKED] = True
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
if self.download_window.isVisible():
|
if self.download_window.isVisible():
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from pydub import AudioSegment
|
|||||||
from pygame import mixer
|
from pygame import mixer
|
||||||
from PyQt5.QtCore import QTimer, pyqtSlot, QObject
|
from PyQt5.QtCore import QTimer, pyqtSlot, QObject
|
||||||
|
|
||||||
import constants
|
from constants import Constants
|
||||||
import qtawesome as qta
|
import qtawesome as qta
|
||||||
|
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ class AudioPlayer(QObject): # Maybe useless inheriting from QObject
|
|||||||
def set_audio_player(self, fname = ""):
|
def set_audio_player(self, fname = ""):
|
||||||
self.__first_call = True
|
self.__first_call = True
|
||||||
self.__reset_audio_widget()
|
self.__reset_audio_widget()
|
||||||
full_name = os.path.join(constants.DATA_FOLDER, constants.AUDIO_FOLDER, fname + '.ogg')
|
full_name = os.path.join(Constants.DATA_FOLDER, Constants.AUDIO_FOLDER, fname + '.ogg')
|
||||||
if os.path.exists(full_name):
|
if os.path.exists(full_name):
|
||||||
self.__play.setEnabled(True)
|
self.__play.setEnabled(True)
|
||||||
self.__audio_file = full_name
|
self.__audio_file = full_name
|
||||||
|
|||||||
69
constants.py
69
constants.py
@@ -66,38 +66,39 @@ class Database(object):
|
|||||||
Signal.SUP_BAND,
|
Signal.SUP_BAND,
|
||||||
Signal.CATEGORY_CODE,)
|
Signal.CATEGORY_CODE,)
|
||||||
|
|
||||||
ACF_DOCS = "https://aresvalley.com/documentation/"
|
class Constants(object):
|
||||||
SEARCH_LABEL_IMG = "search_icon.png"
|
ACF_DOCS = "https://aresvalley.com/documentation/"
|
||||||
VOLUME_LABEL_IMG = "volume.png"
|
SEARCH_LABEL_IMG = "search_icon.png"
|
||||||
DATA_FOLDER = "Data"
|
VOLUME_LABEL_IMG = "volume.png"
|
||||||
SPECTRA_FOLDER = "Spectra"
|
DATA_FOLDER = "Data"
|
||||||
SPECTRA_EXT = ".png"
|
SPECTRA_FOLDER = "Spectra"
|
||||||
AUDIO_FOLDER = "Audio"
|
SPECTRA_EXT = ".png"
|
||||||
ACTIVE = "active"
|
AUDIO_FOLDER = "Audio"
|
||||||
INACTIVE = "inactive"
|
ACTIVE = "active"
|
||||||
NOT_AVAILABLE = "spectrumnotavailable.png"
|
INACTIVE = "inactive"
|
||||||
NOT_SELECTED = "nosignalselected.png"
|
NOT_AVAILABLE = "spectrumnotavailable.png"
|
||||||
__Band = namedtuple("Band", ["lower", "upper"])
|
NOT_SELECTED = "nosignalselected.png"
|
||||||
__ELF = __Band(0, 30) # Formally it is (3, 30) Hz.
|
__Band = namedtuple("Band", ["lower", "upper"])
|
||||||
__SLF = __Band(30, 300)
|
__ELF = __Band(0, 30) # Formally it is (3, 30) Hz.
|
||||||
__ULF = __Band(300, 3000)
|
__SLF = __Band(30, 300)
|
||||||
__VLF = __Band(3000, 30000)
|
__ULF = __Band(300, 3000)
|
||||||
__LF = __Band(30 * 10**3, 300 * 10**3)
|
__VLF = __Band(3000, 30000)
|
||||||
__MF = __Band(300 * 10 ** 3, 3000 * 10**3)
|
__LF = __Band(30 * 10**3, 300 * 10**3)
|
||||||
__HF = __Band(3 * 10**6, 30 * 10**6)
|
__MF = __Band(300 * 10 ** 3, 3000 * 10**3)
|
||||||
__VHF = __Band(30 * 10**6, 300 * 10**6)
|
__HF = __Band(3 * 10**6, 30 * 10**6)
|
||||||
__UHF = __Band(300 * 10**6, 3000 * 10**6)
|
__VHF = __Band(30 * 10**6, 300 * 10**6)
|
||||||
__SHF = __Band(3 * 10**9, 30 * 10**9)
|
__UHF = __Band(300 * 10**6, 3000 * 10**6)
|
||||||
__EHF = __Band(30 * 10**9, 300 * 10**9)
|
__SHF = __Band(3 * 10**9, 30 * 10**9)
|
||||||
BANDS = (__ELF, __SLF, __ULF, __VLF, __LF, __MF, __HF, __VHF, __UHF, __SHF, __EHF)
|
__EHF = __Band(30 * 10**9, 300 * 10**9)
|
||||||
MAX_DIGITS = 3
|
BANDS = (__ELF, __SLF, __ULF, __VLF, __LF, __MF, __HF, __VHF, __UHF, __SHF, __EHF)
|
||||||
RANGE_SEPARATOR = ' ÷ '
|
MAX_DIGITS = 3
|
||||||
GFD_SITE = "http://qrg.globaltuners.com/"
|
RANGE_SEPARATOR = ' ÷ '
|
||||||
CONVERSION_FACTORS = {"Hz" : 1,
|
GFD_SITE = "http://qrg.globaltuners.com/"
|
||||||
|
CONVERSION_FACTORS = {"Hz" : 1,
|
||||||
"kHz": 1000,
|
"kHz": 1000,
|
||||||
"MHz": 1000000,
|
"MHz": 1000000,
|
||||||
"GHz": 1000000000}
|
"GHz": 1000000000}
|
||||||
MODES = {"FM": ("NFM", "WFM"),
|
MODES = {"FM": ("NFM", "WFM"),
|
||||||
"AM": (),
|
"AM": (),
|
||||||
"CW": (),
|
"CW": (),
|
||||||
"SK": ("FSK", "PSK", "MSK"),
|
"SK": ("FSK", "PSK", "MSK"),
|
||||||
@@ -106,10 +107,10 @@ MODES = {"FM": ("NFM", "WFM"),
|
|||||||
"FHSS-TDM": (),
|
"FHSS-TDM": (),
|
||||||
"RAW": (),
|
"RAW": (),
|
||||||
"SC-FDMA": (),}
|
"SC-FDMA": (),}
|
||||||
APPLY = "Apply"
|
APPLY = "Apply"
|
||||||
REMOVE = "Remove"
|
REMOVE = "Remove"
|
||||||
UNKNOWN = "N/A"
|
UNKNOWN = "N/A"
|
||||||
MODULATIONS = ("8VSB",
|
MODULATIONS = ("8VSB",
|
||||||
"AFSK",
|
"AFSK",
|
||||||
"AM",
|
"AM",
|
||||||
"BFSK",
|
"BFSK",
|
||||||
@@ -134,7 +135,7 @@ MODULATIONS = ("8VSB",
|
|||||||
"PSK",
|
"PSK",
|
||||||
"QAM",
|
"QAM",
|
||||||
"TDMA",)
|
"TDMA",)
|
||||||
LOCATIONS = (UNKNOWN,
|
LOCATIONS = (UNKNOWN,
|
||||||
"Australia",
|
"Australia",
|
||||||
"Canada",
|
"Canada",
|
||||||
"Central Europe",
|
"Central Europe",
|
||||||
|
|||||||
18
themes.py
18
themes.py
@@ -3,7 +3,7 @@ import os
|
|||||||
from PyQt5.QtWidgets import QAction
|
from PyQt5.QtWidgets import QAction
|
||||||
from PyQt5.QtCore import pyqtSlot
|
from PyQt5.QtCore import pyqtSlot
|
||||||
from PyQt5.QtGui import QPixmap
|
from PyQt5.QtGui import QPixmap
|
||||||
import constants
|
from constants import Constants
|
||||||
from utilities import pop_up, is_valid_html_color
|
from utilities import pop_up, is_valid_html_color
|
||||||
|
|
||||||
class ThemeConstants(object):
|
class ThemeConstants(object):
|
||||||
@@ -93,14 +93,14 @@ class Theme(object):
|
|||||||
ThemeConstants.DEFAULT,
|
ThemeConstants.DEFAULT,
|
||||||
ThemeConstants.ICONS_FOLDER)
|
ThemeConstants.ICONS_FOLDER)
|
||||||
|
|
||||||
if os.path.exists(os.path.join(icons_path, constants.NOT_SELECTED)) and \
|
if os.path.exists(os.path.join(icons_path, Constants.NOT_SELECTED)) and \
|
||||||
os.path.exists(os.path.join(icons_path, constants.NOT_AVAILABLE)):
|
os.path.exists(os.path.join(icons_path, Constants.NOT_AVAILABLE)):
|
||||||
self.__parent.default_images_folder = icons_path
|
self.__parent.default_images_folder = icons_path
|
||||||
else:
|
else:
|
||||||
self.__parent.default_images_folder = default_icons_path
|
self.__parent.default_images_folder = default_icons_path
|
||||||
|
|
||||||
path_to_search_label = os.path.join(icons_path, constants.SEARCH_LABEL_IMG)
|
path_to_search_label = os.path.join(icons_path, Constants.SEARCH_LABEL_IMG)
|
||||||
default_search_label = os.path.join(default_icons_path, constants.SEARCH_LABEL_IMG)
|
default_search_label = os.path.join(default_icons_path, Constants.SEARCH_LABEL_IMG)
|
||||||
|
|
||||||
if os.path.exists(path_to_search_label):
|
if os.path.exists(path_to_search_label):
|
||||||
self.__parent.search_label.setPixmap(QPixmap(path_to_search_label))
|
self.__parent.search_label.setPixmap(QPixmap(path_to_search_label))
|
||||||
@@ -115,8 +115,8 @@ class Theme(object):
|
|||||||
self.__parent.modulation_search_label.setScaledContents(True)
|
self.__parent.modulation_search_label.setScaledContents(True)
|
||||||
self.__parent.location_search_label.setScaledContents(True)
|
self.__parent.location_search_label.setScaledContents(True)
|
||||||
|
|
||||||
path_to_volume_label = os.path.join(icons_path, constants.VOLUME_LABEL_IMG)
|
path_to_volume_label = os.path.join(icons_path, Constants.VOLUME_LABEL_IMG)
|
||||||
default_volume_label = os.path.join(default_icons_path, constants.VOLUME_LABEL_IMG)
|
default_volume_label = os.path.join(default_icons_path, Constants.VOLUME_LABEL_IMG)
|
||||||
|
|
||||||
if os.path.exists(path_to_volume_label):
|
if os.path.exists(path_to_volume_label):
|
||||||
self.__parent.volume_label.setPixmap(QPixmap(path_to_volume_label))
|
self.__parent.volume_label.setPixmap(QPixmap(path_to_volume_label))
|
||||||
@@ -138,10 +138,10 @@ class Theme(object):
|
|||||||
valid_format = True
|
valid_format = True
|
||||||
quality, color = line.split(ThemeConstants.COLOR_SEPARATOR)
|
quality, color = line.split(ThemeConstants.COLOR_SEPARATOR)
|
||||||
color = color.rstrip()
|
color = color.rstrip()
|
||||||
if quality.lower() == constants.ACTIVE and is_valid_html_color(color):
|
if quality.lower() == Constants.ACTIVE and is_valid_html_color(color):
|
||||||
self.__parent.active_color = color
|
self.__parent.active_color = color
|
||||||
active_color_ok = True
|
active_color_ok = True
|
||||||
if quality.lower() == constants.INACTIVE and is_valid_html_color(color):
|
if quality.lower() == Constants.INACTIVE and is_valid_html_color(color):
|
||||||
self.__parent.inactive_color = color
|
self.__parent.inactive_color = color
|
||||||
inactive_color_ok = True
|
inactive_color_ok = True
|
||||||
|
|
||||||
|
|||||||
10
threads.py
10
threads.py
@@ -6,7 +6,7 @@ from shutil import rmtree
|
|||||||
import urllib3
|
import urllib3
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from PyQt5.QtCore import QThread
|
from PyQt5.QtCore import QThread
|
||||||
import constants
|
from constants import Constants, Database, ChecksumWhat
|
||||||
from utilities import checksum_ok
|
from utilities import checksum_ok
|
||||||
import constants
|
import constants
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ class DownloadThread(QThread):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
try:
|
try:
|
||||||
db = urllib3.PoolManager().request('GET', constants.Database.LINK_LOC)
|
db = urllib3.PoolManager().request('GET', Database.LINK_LOC)
|
||||||
# db = urllib.request.urlopen(constants.Database.LINK_LOC)
|
# db = urllib.request.urlopen(constants.Database.LINK_LOC)
|
||||||
# raise urllib.error.URLError('Test')
|
# raise urllib.error.URLError('Test')
|
||||||
except urllib3.exceptions.MaxRetryError: # No internet connection.
|
except urllib3.exceptions.MaxRetryError: # No internet connection.
|
||||||
@@ -43,7 +43,7 @@ class DownloadThread(QThread):
|
|||||||
self.__status = ThreadStatus.BAD_DOWNLOAD_ERR
|
self.__status = ThreadStatus.BAD_DOWNLOAD_ERR
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
is_checksum_ok = checksum_ok(db.data, constants.ChecksumWhat.FOLDER)
|
is_checksum_ok = checksum_ok(db.data, ChecksumWhat.FOLDER)
|
||||||
except:
|
except:
|
||||||
self.__status = ThreadStatus.NO_CONNECTION_ERR
|
self.__status = ThreadStatus.NO_CONNECTION_ERR
|
||||||
return
|
return
|
||||||
@@ -51,8 +51,8 @@ class DownloadThread(QThread):
|
|||||||
if not is_checksum_ok:
|
if not is_checksum_ok:
|
||||||
self.__status = ThreadStatus.BAD_DOWNLOAD_ERR
|
self.__status = ThreadStatus.BAD_DOWNLOAD_ERR
|
||||||
return
|
return
|
||||||
if os.path.exists(constants.DATA_FOLDER):
|
if os.path.exists(Constants.DATA_FOLDER):
|
||||||
rmtree(constants.DATA_FOLDER)
|
rmtree(Constants.DATA_FOLDER)
|
||||||
try:
|
try:
|
||||||
# data_folder = db.read()
|
# data_folder = db.read()
|
||||||
with ZipFile(BytesIO(db.data)) as zipped:
|
with ZipFile(BytesIO(db.data)) as zipped:
|
||||||
|
|||||||
24
utilities.py
24
utilities.py
@@ -7,7 +7,7 @@ from pandas import read_csv
|
|||||||
|
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
from PyQt5.QtWidgets import QMessageBox
|
||||||
|
|
||||||
import constants
|
from constants import Constants, Signal, Database, ChecksumWhat
|
||||||
|
|
||||||
def resource_path(relative_path):
|
def resource_path(relative_path):
|
||||||
try:
|
try:
|
||||||
@@ -42,15 +42,15 @@ def pop_up(cls, title, text,
|
|||||||
def checksum_ok(data, what):
|
def checksum_ok(data, what):
|
||||||
code = hashlib.sha256()
|
code = hashlib.sha256()
|
||||||
code.update(data)
|
code.update(data)
|
||||||
if what == constants.ChecksumWhat.FOLDER:
|
if what == ChecksumWhat.FOLDER:
|
||||||
n = 0
|
n = 0
|
||||||
elif what == constants.ChecksumWhat.DB:
|
elif what == ChecksumWhat.DB:
|
||||||
n = 1
|
n = 1
|
||||||
else:
|
else:
|
||||||
raise ValueError("Wrong entry name.")
|
raise ValueError("Wrong entry name.")
|
||||||
try:
|
try:
|
||||||
reference = read_csv(constants.Database.LINK_REF,
|
reference = read_csv(Database.LINK_REF,
|
||||||
delimiter = constants.Database.DELIMITER).iat[-1, n]
|
delimiter = Database.DELIMITER).iat[-1, n]
|
||||||
except:
|
except:
|
||||||
raise
|
raise
|
||||||
return code.hexdigest() == reference
|
return code.hexdigest() == reference
|
||||||
@@ -67,18 +67,18 @@ def connect_to(events_to_connect, fun_to_connect, fun_args):
|
|||||||
event.connect(fun_to_connect)
|
event.connect(fun_to_connect)
|
||||||
|
|
||||||
def filters_ok(spinbox, filter_unit, confidence, sign = 1):
|
def filters_ok(spinbox, filter_unit, confidence, sign = 1):
|
||||||
band_filter = spinbox.value() * constants.CONVERSION_FACTORS[filter_unit.currentText()]
|
band_filter = spinbox.value() * Constants.CONVERSION_FACTORS[filter_unit.currentText()]
|
||||||
return band_filter + sign * (confidence.value() * band_filter) // 100
|
return band_filter + sign * (confidence.value() * band_filter) // 100
|
||||||
|
|
||||||
def is_undef_freq(current_signal):
|
def is_undef_freq(current_signal):
|
||||||
lower_freq = current_signal.at[constants.Signal.INF_FREQ]
|
lower_freq = current_signal.at[Signal.INF_FREQ]
|
||||||
upper_freq = current_signal.at[constants.Signal.SUP_FREQ]
|
upper_freq = current_signal.at[Signal.SUP_FREQ]
|
||||||
return lower_freq == constants.UNKNOWN or upper_freq == constants.UNKNOWN
|
return lower_freq == Constants.UNKNOWN or upper_freq == Constants.UNKNOWN
|
||||||
|
|
||||||
def is_undef_band(current_signal):
|
def is_undef_band(current_signal):
|
||||||
lower_band = current_signal.at[constants.Signal.INF_BAND]
|
lower_band = current_signal.at[Signal.INF_BAND]
|
||||||
upper_band = current_signal.at[constants.Signal.SUP_BAND]
|
upper_band = current_signal.at[Signal.SUP_BAND]
|
||||||
return lower_band == constants.UNKNOWN or upper_band == constants.UNKNOWN
|
return lower_band == Constants.UNKNOWN or upper_band == Constants.UNKNOWN
|
||||||
|
|
||||||
def change_unit(num):
|
def change_unit(num):
|
||||||
digits = len(num)
|
digits = len(num)
|
||||||
|
|||||||
Reference in New Issue
Block a user