diff --git a/src/lib/db/crud_db.py b/src/lib/db/crud_db.py index 6ae47e5..f883bed 100755 --- a/src/lib/db/crud_db.py +++ b/src/lib/db/crud_db.py @@ -11,11 +11,12 @@ class Crud_DB: self.table_fields = list(self.table_model._meta.fields.keys()) self.pagination = pagination self.default_filters = {} + self.sorting = {} + self.filters = {} if filters is None: filters = {} for column_name, filter in filters.items(): self.filter(column_name, filter, filter_storage=self.default_filters) - self.revert() def commit(self, data, deleted_rows=None): with db.atomic() as trx: @@ -37,8 +38,8 @@ class Crud_DB: raise e def revert(self): - self.sorting = {} - self.filters = {} + self.sorting.clear() + self.filters.clear() def get(self, page=0): if self.table_model._meta.composite_key: diff --git a/src/main.py b/src/main.py index 3dc159a..44b0173 100644 --- a/src/main.py +++ b/src/main.py @@ -6,6 +6,7 @@ import os import signal import sys import traceback +import weakref from datetime import datetime from pathlib import Path @@ -112,18 +113,18 @@ try: # self.main_window = Main_Window(self.bench) self.main_window = Main_Window() # CONNECT MAIN WINDOW ACTIONS - self.main_window.archive_a.triggered.connect(self.open_archive) + self.main_window.archive_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Archive())) if "--archive" in sys.argv: self.main_window.archive_a.trigger() - self.main_window.autotests_archive_a.triggered.connect(self.open_autotests_archive) + self.main_window.autotests_archive_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Autotests_Archive())) if "--autotests-archive" in sys.argv: self.main_window.autotests_archive_a.trigger() - self.main_window.about_a.triggered.connect(self.open_about) + self.main_window.about_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(About())) if "--about" in sys.argv: self.main_window.about_a.trigger() self.main_window.admin_m.menuAction().setVisible(False) # admin menu should not be visible before an admin logs in self.main_window.quit_a.triggered.connect(quit_app) - self.main_window.users_management_a.triggered.connect(self.open_users_management) + self.main_window.users_management_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Users_Management())) if "--users-management" in sys.argv: self.main_window.users_management_a.trigger() # OPEN LOGIN TAB @@ -138,19 +139,6 @@ try: else: self.main_window.showFullScreen() - def open_archive(self): - self.main_window.open_dialog(Archive()) - - def open_autotests_archive(self): - self.main_window.open_dialog(Autotests_Archive()) - - def open_users_management(self): - self.main_window.open_dialog(Users_Management()) - - def open_about(self): - about_widget = About() - self.main_window.open_dialog(about_widget) - def open_login(self): tab = Login() tab.successful_login.connect(self.logghed_in) @@ -163,13 +151,8 @@ try: self.main_window.admin_m.menuAction().setVisible(True) else: self.main_window.admin_m.menuAction().setVisible(False) - self.open_test() - - def open_test(self): - self.main_window.open_tab(Test(self.config.machine_id, self.components)) - - def open_test(self): - self.main_window.open_tab(Test(self.config.machine_id, self.components)) + # open test + self.main_window.open_tab(Test(self.config.machine_id, self.components)) if __name__ == "__main__": app = QApplication(sys.argv) diff --git a/src/ui/crud/crud.py b/src/ui/crud/crud.py index 124b470..139d124 100755 --- a/src/ui/crud/crud.py +++ b/src/ui/crud/crud.py @@ -1,6 +1,7 @@ import ast import json import traceback +import weakref from datetime import datetime from lib.db import Crud_DB @@ -198,7 +199,7 @@ class Crud(Widget): self.filters = {} self.db_tw.crud = self self.refresh("init") - self.db_tw.horizontalHeader().sectionClicked.connect(self.toggleSort) + self.db_tw.horizontalHeader().sectionClicked.connect(self.toggle_sort) # self.db_tw.horizontalHeader().setStretchLastSection(True) self.db_tw.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) # self.db_tw.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) @@ -208,13 +209,13 @@ class Crud(Widget): else: self.db_tw.setSelectionMode(QAbstractItemView.ExtendedSelection) self.db_tw.itemSelectionChanged.connect(self.show_selection) - self.revert_b.clicked.connect(lambda: self.refresh("revert")) + self.revert_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("revert")) if self.pagination is not False: - self.start_b.clicked.connect(lambda: self.refresh("pagination", page=0)) - self.previous_b.clicked.connect(lambda: self.refresh("pagination", page=max(self.page - 1, 0))) - self.page_n_sb.valueChanged.connect(lambda page: self.refresh("pagination", page=page - 1)) - self.next_b.clicked.connect(lambda: self.refresh("pagination", page=self.page + 1)) - self.end_b.clicked.connect(lambda: self.refresh("pagination", page=-1)) + self.start_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=0)) + self.previous_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=max(self().page - 1, 0))) + self.page_n_sb.valueChanged.connect(lambda page, self=weakref.ref(self): self().refresh("pagination", page=page - 1)) + self.next_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=self().page + 1)) + self.end_b.clicked.connect(lambda checked, self=weakref.ref(self): self().refresh("pagination", page=-1)) else: self.next_b.setHidden(True) self.previous_b.setHidden(True) @@ -239,7 +240,7 @@ class Crud(Widget): sort_cycle = [True, False, None] sort_symbol = [u" \u25B4", u" \u25BE", u""] - def toggleSort(self, cn=None): + def toggle_sort(self, cn=None, refresh=True): if cn is not None: fn = self.select[cn] if fn not in self.db.table_fields: @@ -257,7 +258,8 @@ class Crud(Widget): self.db_tw.setHorizontalHeaderLabels(self.fields_aliases.values()) self.sorting.clear() # for single column sorting self.db.sort(None) # for single column sorting - self.refresh() + if refresh: + self.refresh() def filter_edited(self, cn): text = self.db_tw.cellWidget(0, cn).text() @@ -303,10 +305,9 @@ class Crud(Widget): pass elif action == "revert": # REVERT SORTING AND FILTERS - self.sorting = {} - for cn, fn in enumerate(self.select): - self.toggleSort(None) - self.filters.clear() + self.sorting.clear() + self.toggle_sort(None, refresh=False) + self.filters.clear() self.db.revert() elif action == "commit" and not (self.readonly is None or self.readonly is True): # COMMIT CHANGES @@ -358,7 +359,7 @@ class Crud(Widget): if fn in self.db.table_fields: w.setPlaceholderText("Filtro") w.setText(self.filters.get(fn, None)) - w.editingFinished.connect(lambda cn=cn: self.filter_edited(cn)) + w.editingFinished.connect(lambda cn=cn, self=weakref.ref(self): self().filter_edited(cn)) else: w.setPlaceholderText("Non filtrabile") w.setEnabled(False) @@ -373,7 +374,7 @@ class Crud(Widget): if fn in r: w._render(data=r[fn], row_number=rn, crud=self) self.db_tw.setCellWidget(rn, cn, w) - # REENABLEEVENTS AFTER UPDATE + # REENABLE EVENTS AFTER UPDATE self.db_tw.blockSignals(False) return True