This commit is contained in:
matteo porta 2022-07-05 18:16:22 +02:00
parent 514964d7c6
commit a3b38a63d3
3 changed files with 27 additions and 42 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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