def get_filter_string(self, list_mode): if self.chosen_program == "cria": if list_mode == "sage": # string_0 = self.comboBox_klassen.currentText() string_1 = self.comboBox_kapitel.currentText() string_2 = self.comboBox_unterkapitel.currentText() elif list_mode == "feedback": # string_0 = self.comboBox_klassen_fb_cria.currentText() string_1 = self.comboBox_kapitel_fb_cria.currentText() string_2 = self.comboBox_unterkapitel_fb_cria.currentText() filter_string = "" # if not is_empty(string_0): # filter_string = "k" + string_0[0] + "." if not is_empty(string_1): filter_string = extract_topic_abbr(string_1) if not is_empty(string_2): filter_string = (filter_string + "." + extract_topic_abbr(string_2)) return filter_string if self.chosen_program == "lama": if list_mode == "sage": # if self.comboBox_gk.currentText() == 'Zusatzthemen': # string_0 = "" # else: string_0 = self.comboBox_gk.currentText() topic = extract_topic_abbr(self.comboBox_gk_num.currentText()) if topic != None: string_1 = topic else: string_1 = self.comboBox_gk_num.currentText() elif list_mode == "feedback": string_0 = self.comboBox_fb.currentText() topic = extract_topic_abbr(self.comboBox_fb_num.currentText()) if topic != None: string_1 = topic else: string_1 = self.comboBox_fb_num.currentText() if not is_empty(string_0): if string_0 == 'Zusatzthemen': filter_string = "zusatz_" + string_1.upper() else: filter_string = string_0 if not is_empty(string_1): filter_string = filter_string + " " + string_1 return filter_string else: return ""
def create_info_box(_file): titel = _file['titel'] gk = ', '.join(_file['themen']) if _file['af']!=None: try: af = dict_aufgabenformate[_file['af']] except KeyError: print('Fehler in der Datenbank - Aufgabe {0} (AF = {1})'.format(_file['name'],_file['af'])) af = "Fehler" af = "Aufgabenformat: {}\\\\".format(af) else: af = "" if _file['klasse'] == None: klasse = "-" else: klasse = _file['klasse'][-1] quelle = _file['quelle'] if not is_empty(_file['bilder']): bilder = "\\\\\nBilder: {}".format(_file['bilder']) else: bilder = "" info_box = """ \info{{\\fbox{{\\begin{{minipage}}{{0.98\\textwidth}} Titel: {0}\\\\ Grundkompetenz(en): {1}\\\\ {2} Klasse: {3}\\\\ Quelle: {4}{5} \end{{minipage}}}}}} """.format(titel, gk, af, klasse, quelle, bilder) return info_box
def refresh_ddb(self, auto_update=False): QtWidgets.QApplication.setOverrideCursor( QtGui.QCursor(QtCore.Qt.WaitCursor)) if self.developer_mode_active == True: text = 'Änderungen überprüfen ...' elif auto_update == 'mac': text = "Datenbank wird vor dem Update aktualisiert ..." else: text = "Datenbank wird aktualisiert. Bitte warten ..." if check_internet_connection() == False: QtWidgets.QApplication.restoreOverrideCursor() critical_window(""" Stellen Sie sicher, dass eine Verbindung zum Internet besteht und versuchen Sie es erneut. """, titel="Keine Internetverbindung") return if self.developer_mode_active == True: working_window(Worker_CheckChanges(), text, self) if not is_empty(self.worker_response): QtWidgets.QApplication.restoreOverrideCursor() response = question_window( """ Es befinden sich lokale Änderungen in Ihrer Datenbank. Durch das Aktualisieren der Datenbank werden alle lokalen Änderungen UNWIDERRUFLICH gelöscht! Lokale Änderungen können durch "Datei - Datenbank hochladen" online gespeichert werden. Sind Sie sicher, dass Sie die lokalen Änderungen unwiderruflich löschen möchten? """, titel="Lokale Änderungen löschen?", detailed_text=""" Geänderte/Gelöschte Dateien: {0} \n\n Neu erstellte Dateien: {1} """.format(self.worker_response[0], self.worker_response[1]), buttontext_yes="Lokale Änderungen löschen", buttontext_no="Abbrechen", default="no") if response == False: return QtWidgets.QApplication.setOverrideCursor( QtGui.QCursor(QtCore.Qt.WaitCursor)) text = "Datenbank wird aktualisiert. Bitte warten ..." working_window(Worker_RefreshDDB(), text, self) QtWidgets.QApplication.restoreOverrideCursor() if auto_update != True: if self.reset_successfull == False: warning_window( "Der neueste Stand der Datenbank konnte nicht heruntergeladen werden. Stellen Sie sicher, dass eine Verbindung zum Internet besteht und versuchen Sie es erneut." ) else: information_window( "Die Datenbank ist jetzt auf dem neuesten Stand!")
def build_pdf_file(ui, folder_name, file_name, latex_output_file): if sys.platform.startswith("linux") or sys.platform.startswith("darwin"): if "Teildokument" in file_name: terminal_command = 'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format( folder_name, file_name ) else: terminal_command = 'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format( folder_name, file_name ) process = subprocess.Popen( 'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format( folder_name, file_name ), stdout=subprocess.PIPE, shell=True, ) else: drive_programm = os.path.splitdrive(path_programm)[0] drive_save = os.path.splitdrive(folder_name)[0] if drive_programm.upper() != drive_save.upper(): drive = drive_save.upper() else: drive = "" if is_empty(drive): terminal_command = 'cd "{0}" & latex -interaction=nonstopmode --synctex=-1 "{1}.tex" & latex -interaction=nonstopmode --synctex=-1 "{1}.tex" & dvips "{1}.dvi" & ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format( folder_name, file_name ) else: terminal_command = '{0} & cd "{1}" & latex -interaction=nonstopmode --synctex=-1 "{2}.tex" & latex -interaction=nonstopmode --synctex=-1 "{2}.tex" & dvips "{2}.dvi" & ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{2}.ps"'.format( drive, folder_name, file_name ) process = subprocess.Popen( terminal_command, cwd=os.path.splitdrive(path_programm)[0], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) return process
def string_included_lama(value): if "zusatz_" in filter_string: string = filter_string.replace("zusatz_", "") if is_empty(string): for all in zusatzthemen_beschreibung.keys(): if value.startswith(all.upper()) and (filter_number( value, line_entry) == True): return True return False else: string = filter_string if (value.replace("-L", "").startswith(string)) and (filter_number( value, line_entry) == True): return True else: return False
def get_titlepage_vorschau(self, dict_titlepage, ausgabetyp, maximum, gruppe): datum_kurz, datum = get_datum(self) dict_titlepage = check_if_hide_all_exists(dict_titlepage) pkt_typ1 = self.get_punkteverteilung()[1] pkt_typ2 = self.get_punkteverteilung()[2] if ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Grundkompetenzcheck" ): if ausgabetyp == "schularbeit" and maximum > 2: gruppe_name = " -- " + self.dict_gruppen[gruppe] else: gruppe_name = "" if is_empty(self.dict_all_infos_for_file["data_gesamt"]["Klasse"]): klasse = "" else: klasse = self.dict_all_infos_for_file["data_gesamt"]["Klasse"] if self.dict_all_infos_for_file["data_gesamt"]["#"]==0: titlepage = ( "\\textsc{{Grundkompetenzcheck{0}}} \\hfill {1} \\hfill \\textsc{{Name:}} \\rule{{5cm}}{{0.4pt}} \\hfill {2}" "\\normalsize \\\ \\vspace{{\\baselineskip}} \n\n".format(gruppe_name, klasse, datum_kurz) ) else: titlepage = ( "\\textsc{{{0}. Grundkompetenzcheck{1}}} \\hfill {2} \\hfill \\textsc{{Name:}} \\rule{{5cm}}{{0.4pt}} \\hfill {3}" "\\normalsize \\\ \\vspace{{\\baselineskip}} \n\n".format(self.dict_all_infos_for_file["data_gesamt"]["#"], gruppe_name, klasse,datum_kurz) ) return titlepage elif self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Übungsblatt": titlepage = "Übungsblatt" if self.lineEdit_klasse.text().strip() != "": titlepage = titlepage + " -- {}".format(self.lineEdit_klasse.text()) titlepage = "\\subsection{{{0}}}".format(titlepage) return titlepage # elif self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Quiz": # titlepage = ( # "\\title{{Typ1 - Quiz}} \n" # "\subtitle{{Anzahl der Aufgaben: {0}}} \n" # "\maketitle \n" # "\subtitle{{}} \n" # ).format(len(self.list_alle_aufgaben_sage)) # return titlepage elif dict_titlepage["hide_all"] == True: if ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Wiederholungsprüfung" ): subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] else: if self.groupBox_nummer.isEnabled() == False: subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] else: if self.dict_all_infos_for_file["data_gesamt"]["#"]==0: subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] else: subsection = ( str(self.dict_all_infos_for_file["data_gesamt"]["#"]) + ". " + self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] ) titlepage = "\\subsection{{{0} \\hfill {1}}}".format(subsection, datum_kurz) # if self.dict_all_infos_for_file["data_gesamt"]["Beurteilung"] == "br": # beurteilungsraster = ( # "\\beurteilung{{0.875}}{{0.75}}{{0.625}}{{1/2}}{{ % Prozentschluessel\n" # "T1={{{0}}}, % Punkte im Teil 1\n" # "T2={{{1}}}, % Punkte im Teil 2\n" # "}}\n\n".format(pkt_typ1, pkt_typ2) # ) # titlepage = titlepage + beurteilungsraster return titlepage else: if dict_titlepage["logo"] == True: logo_name = os.path.basename(dict_titlepage["logo_path"]) logo_titlepage_path = os.path.join(path_localappdata_lama, "Teildokument", logo_name) if os.path.isfile(logo_titlepage_path): logo_input = ( "\\begin{{minipage}}[t]{{0.4\\textwidth}} \\vspace{{0pt}}\n" "\\includegraphics[width=1\\textwidth]{{{0}}}\n" "\\end{{minipage}} \\\ [1cm] \n".format(logo_name) ) else: warning_window( "Das Logo konnte nicht gefunden werden.", "Bitte suchen Sie ein Logo unter: \n\nTitelblatt anpassen - Durchsuchen", "Kein Logo gefunden", ) logo_input = "\\null\\vspace{3cm}\n\n" else: logo_input = "\\null\\vspace{3cm}\n\n" # logo_input = "~\\vfil \n" if dict_titlepage["titel"] == True: if ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Wiederholungsprüfung" ): title_header = "\\textsc{{\\Huge Wiederholungsprüfung}} \\\ [0.5cm]" elif ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Schularbeit" or self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Wiederholungsschularbeit" or self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Nachschularbeit" ): if self.dict_all_infos_for_file["data_gesamt"]["#"]==0: title_header = "\\textsc{{\\Huge Mathematikschularbeit}}" else: title_header = "\\textsc{{\\Huge {0}. Mathematikschularbeit}}".format( self.dict_all_infos_for_file["data_gesamt"]["#"] ) if ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Wiederholungsschularbeit" ): add_on = "Wiederholung" elif ( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Nachschularbeit" ): add_on = "Nachschularbeit" else: add_on = None if add_on != None: title_header = ( title_header + "\\\ [0.5cm] \\textsc{{\Large {0}}}".format(add_on) ) title_header = title_header + "\\\ [0.5cm] \n\n" else: title_header = "\\textsc{{\\Huge {0}}} \\\ [2cm]".format( self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] ) else: title_header = "" if dict_titlepage["datum"] == True: datum_text = "\\textsc{{\Large am {0}}}\\\ [1cm] \n\n".format(datum) else: datum_text = "" if dict_titlepage["klasse"] == True: klasse = "\\textsc{{\Large Klasse {0}}} \\\ [1cm] \n\n".format( self.dict_all_infos_for_file["data_gesamt"]["Klasse"] ) else: klasse = "" if ausgabetyp == "schularbeit" and maximum > 2: gruppe_name = self.dict_gruppen[gruppe] gruppe_name = "\\textsc{{\\Large Gruppe {0}}} \\\ [1cm]\n\n".format(gruppe_name) else: gruppe_name = "" if dict_titlepage["name"] == True: name = "\\Large Name: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n" else: name = "" if dict_titlepage["note"] == True: note = "\\Large Note: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n" else: note = "\\vspace{1cm}\n\n" if dict_titlepage["unterschrift"] == True: unterschrift = "\\Large Unterschrift: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n" else: unterschrift = "\\vspace{1cm}\n\n" if self.dict_all_infos_for_file["data_gesamt"]["Beurteilung"] == "br": beurteilungsraster = ( "\large\\beurteilung{{0.875}}{{0.75}}{{0.625}}{{1/2}}{{ % Prozentschluessel\n" "T1={{{0}}}, % Punkte im Teil 1\n" "T2={{{1}}}, % Punkte im Teil 2\n" "}}\n\n".format(pkt_typ1, pkt_typ2) ) else: beurteilungsraster = "" titlepage = ( "\\begin{{titlepage}}\n\n" "\\flushright\n" "{0}" "{1}" "{2}" "{3}" "{4}" "{5}" "{6}" "{7}" "\\vspace{{1cm}}\n\n{8}" "\\end{{titlepage}}\n\n".format( logo_input, title_header, datum_text, klasse, gruppe_name, name, note, unterschrift, beurteilungsraster, ) ) return titlepage
def open_pdf_file(folder_name, file_name): drive_database = os.path.splitdrive(path_localappdata_lama)[0] drive_location = os.path.splitdrive(sys.argv[-1])[0] if drive_location.upper() != drive_database.upper(): drive = drive_database.upper() else: drive = "" try: with open(lama_settings_file, "r", encoding="utf8") as f: lama_settings = json.load(f) path_pdf_reader = '{}'.format(lama_settings['pdf_reader']) except (FileNotFoundError, KeyError): path_pdf_reader = "" file_path = os.path.join(folder_name, file_name) if sys.platform.startswith("linux"): file_path = file_path + ".pdf" webbrowser.open(file_path, new=2, autoraise=True) # os.system("xdg-open {0}.pdf".format(file_path)) # subprocess.run( # [ # # "sudo", # "xdg-open", # "{0}.pdf".format(file_path), # ] # ) elif sys.platform.startswith("darwin"): if os.path.exists(path_pdf_reader) == False: if is_empty(path_pdf_reader)== False: warning_window("Der ausgewählte Pfad des Pdf-Readers zum Öffnen der Dateien ist fehlerhaft. Bitte korrigieren oder löschen Sie diesen.") subprocess.run( ["open", "{0}.pdf".format(file_path)] ) else: subprocess.run( ["open","-a","{}".format(path_pdf_reader), "{0}.pdf".format(file_path)] ) else: if os.path.isfile(path_pdf_reader) == False: if is_empty(path_pdf_reader)== False: warning_window("Der ausgewählte Pfad des Pdf-Readers zum Öffnen der Dateien ist fehlerhaft. Bitte korrigieren oder löschen Sie diesen.") path_pdf_reader = "" else: path_pdf_reader = '"{}"'.format(path_pdf_reader) if is_empty(drive): subprocess.Popen( 'cd "{0}" & {1} {2}.pdf'.format(folder_name,path_pdf_reader, file_name), shell = True).poll() else: drive = "{} &".format(drive) subprocess.Popen( '{0} cd "{1}" & {2} {3}.pdf'.format(drive, folder_name,path_pdf_reader, file_name), shell = True).poll()
def check_if_suchbegriffe_is_empty(suchbegriffe): _list = ['themen', 'af', 'klasse', 'erweiterte_suche' ,'info'] for all in _list: if not is_empty(suchbegriffe[all]) and suchbegriffe[all] != [None]: return False return True
def search_in_database(self,current_program, database,suchbegriffe): table = 'table_' + current_program table_lama = database.table(table) _file_ = Query() string_in_list_af = lambda s: True if (s in suchbegriffe['af'] or is_empty(suchbegriffe['af'])) else False string_in_list_klasse = lambda s: True if (s in suchbegriffe['klasse'] or is_empty(suchbegriffe['klasse'])) else False string_in_list_info = lambda s: True if (s in suchbegriffe['info'] or is_empty(suchbegriffe['info'])) else False lineedit_in_erweitert = lambda s: True if (r"{}".format(suchbegriffe['erweiterte_suche'].lower()) in s.lower() or is_empty(suchbegriffe['erweiterte_suche'])) else False search_True = lambda s: True def include_drafts(value): if value == False: return True else: if self.cb_drafts.isChecked(): return True else: return False def lineedit_in_bilder(value): for bilder in value: if suchbegriffe['erweiterte_suche'].lower() in bilder: return True return False if suchbegriffe['erweiterte_suche'] == "": erweiterte_suche = eval("_file_.titel.test(search_True)") elif self.comboBox_suchbegriffe.currentText() == "Titel": erweiterte_suche = eval("_file_.titel.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Inhalt": erweiterte_suche = eval("_file_.content.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Quelle": erweiterte_suche = eval("_file_.quelle.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Bilder": erweiterte_suche = _file_.bilder.test(lineedit_in_bilder) gesammeltedateien = [] if current_program == 'lama_1' or (current_program == 'cria' and self.combobox_searchtype.currentIndex()==0): if suchbegriffe['themen'] != []: gesammeltedateien = table_lama.search( (_file_.themen.any(suchbegriffe['themen'])) & (_file_.af.test(string_in_list_af)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) else: gesammeltedateien = table_lama.search( (_file_.af.test(string_in_list_af)) & # (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) elif current_program == 'cria' and self.combobox_searchtype.currentIndex()==1: def themen_included(value): for all in suchbegriffe['themen']: if all not in value: return False return True # if suchbegriffe['themen'] != []: gesammeltedateien = table_lama.search( (_file_.themen.test(themen_included)) & (_file_.af.test(string_in_list_af)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) else: gesammeltedateien = table_lama.search( (_file_.af.test(string_in_list_af)) & # (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) elif current_program == 'lama_2': def gk_in_list(value): for all in value: if all not in suchbegriffe['themen']: return False return True if suchbegriffe['themen'] == []: gesammeltedateien = table_lama.search( (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) elif self.combobox_searchtype.currentIndex()==0: gesammeltedateien = table_lama.search( (_file_.themen.any(suchbegriffe['themen'])) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) elif self.combobox_searchtype.currentIndex()==1: gesammeltedateien = table_lama.search( (_file_.themen.test(gk_in_list)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts)) ) return gesammeltedateien
def btn_move_pressed(self): filenames_fullpath = QtWidgets.QFileDialog.getOpenFileNames( None, "Dateien wählen", path_beispieleinreichung, "LaTeX Dateien (*.tex)") list_files_move = [] for item in filenames_fullpath[0]: if os.path.isfile(os.path.join(path_beispieleinreichung, item)): list_files_move.append(item) if is_empty(list_files_move) == True: return for all in list_files_move: filename = os.path.basename(all) if "i." in filename: save_folder = "_database_inoffiziell" else: save_folder = "_database" for all in list_files_move: with open(all, "r", encoding="utf8") as file: content = file.read() content = content.replace("../Beispieleinreichung/Bilder", "../{0}/Bilder".format(save_folder)) with open(all, "w", encoding="utf8") as file: file.write(content) number_images = 0 for all in list_files_move: info = get_info_from_path(all) filename = os.path.basename(all) if info[0] == None: new_path = os.path.join(path_programm, "{0}".format(save_folder), info[1], "Einzelbeispiele", filename) elif info[0] == 2: new_path = os.path.join( path_programm, "{0}".format(save_folder), "Typ2Aufgaben", "Einzelbeispiele", filename, ) elif info[0] == 1: if info[2].lower() in zusatzthemen_beschreibung: new_path = os.path.join( path_programm, "{0}".format(save_folder), "Typ1Aufgaben", "Zusatzthemen", info[2], filename, ) else: gk, gk_num = info[2].split(" ") if "-" in gk: gk, _ = gk.split("-") new_path = os.path.join( path_programm, "{0}".format(save_folder), "Typ1Aufgaben", "_Grundkompetenzen", gk, info[2], "Einzelbeispiele", filename, ) # elif info[0]==1 and info[1] != None: if os.path.isdir(os.path.dirname(new_path)) == False: os.makedirs(os.path.dirname(new_path)) with open(all, "r", encoding="utf8") as file: content = file.read() shutil.move(all, new_path) if content.count("includegraphics") != 0: path_beispieleinreichung_images = os.path.join( path_programm, "Beispieleinreichung", "Bilder") split_content = re.split( "../{0}/Bilder/|.eps".format(save_folder), content) for i in range(1, len(split_content), 2): image_name = split_content[i] image_name = image_name + ".eps" old_image_path = os.path.join( path_beispieleinreichung_images, image_name) new_image_path = os.path.join(path_programm, "{0}".format(save_folder), "Bilder", image_name) shutil.move( os.path.join(path_beispieleinreichung_images, image_name), os.path.join(path_programm, "{0}".format(save_folder), "Bilder", image_name), ) number_images += content.count("includegraphics") information_window( "Es wurden {0} Aufgaben und {1} Bild(er) in die Datenbank verschoben!" .format(len(list_files_move), number_images), titel="Erfolgreich verschoben", ) sys.exit(0)
def search_in_database(self, current_program, database, suchbegriffe): table = 'table_' + current_program table_lama = database.table(table) _file_ = Query() string_in_list_af = lambda s: True if (s in suchbegriffe['af'] or is_empty( suchbegriffe['af'])) else False string_in_list_klasse = lambda s: True if (s in suchbegriffe[ 'klasse'] or is_empty(suchbegriffe['klasse'])) else False string_in_list_info = lambda s: True if (s in suchbegriffe[ 'info'] or is_empty(suchbegriffe['info'])) else False lineedit_in_erweitert = lambda s: True if (r"{}".format(suchbegriffe[ 'erweiterte_suche'].lower()) in s.lower() or is_empty(suchbegriffe[ 'erweiterte_suche'])) else False search_True = lambda s: True def include_drafts(value): if value == False: return True else: if self.cb_drafts.isChecked(): return True else: return False def lineedit_in_bilder(value): for bilder in value: if suchbegriffe['erweiterte_suche'].lower() in bilder: return True return False def lineedit_in_name(value): simplified_search = shorten_gk( suchbegriffe['erweiterte_suche'].lower()) simplified_value = shorten_gk(value) # print(short_gk)# _list = simplified_search.split("-") gk_search = _list[0] num_search = _list[-1] _list = simplified_value.split("-") gk_value = _list[0] num_value = _list[-1] if "*" in gk_search: gk_search = gk_search.replace("*", ".*") x = re.fullmatch("{}".format(gk_search), gk_value) if x == None: return False elif gk_search != gk_value: return False if "*" in num_search: num_search = num_search.replace("*", ".*") x = re.fullmatch("{}".format(num_search), num_value) if x == None: return False elif num_search != num_value: return False return True if suchbegriffe['erweiterte_suche'] == "": erweiterte_suche = eval("_file_.titel.test(search_True)") elif self.comboBox_suchbegriffe.currentText() == "Titel": erweiterte_suche = eval("_file_.titel.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Inhalt": erweiterte_suche = eval("_file_.content.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Quelle": erweiterte_suche = eval("_file_.quelle.test(lineedit_in_erweitert)") elif self.comboBox_suchbegriffe.currentText() == "Bilder": erweiterte_suche = _file_.bilder.test(lineedit_in_bilder) elif self.comboBox_suchbegriffe.currentText() == "Aufgaben-ID": erweiterte_suche = _file_.name.test(lineedit_in_name) gesammeltedateien = [] if current_program == 'lama_1' or ( current_program == 'cria' and self.combobox_searchtype.currentIndex() == 0): if suchbegriffe['themen'] != []: gesammeltedateien = table_lama.search( (_file_.themen.any(suchbegriffe['themen'])) & (_file_.af.test(string_in_list_af)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) else: gesammeltedateien = table_lama.search( (_file_.af.test(string_in_list_af)) & # (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) elif current_program == 'cria' and self.combobox_searchtype.currentIndex( ) == 1: def themen_included(value): for all in suchbegriffe['themen']: if all not in value: return False return True # if suchbegriffe['themen'] != []: gesammeltedateien = table_lama.search( (_file_.themen.test(themen_included)) & (_file_.af.test(string_in_list_af)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) else: gesammeltedateien = table_lama.search( (_file_.af.test(string_in_list_af)) & # (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) elif current_program == 'lama_2': def gk_in_list(value): for all in value: if all not in suchbegriffe['themen']: return False return True if suchbegriffe['themen'] == []: gesammeltedateien = table_lama.search( (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) elif self.combobox_searchtype.currentIndex() == 0: gesammeltedateien = table_lama.search( (_file_.themen.any(suchbegriffe['themen'])) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) elif self.combobox_searchtype.currentIndex() == 1: gesammeltedateien = table_lama.search( (_file_.themen.test(gk_in_list)) & (_file_.klasse.test(string_in_list_klasse)) & (_file_.info.test(string_in_list_info)) & (erweiterte_suche) & (_file_.draft.test(include_drafts))) return gesammeltedateien