import gradio as gr import logging from app.document_handling import upload_and_index, list_indexed_files, delete_file_from_database from app.functions.database_handling import ( create_database, modify_database, delete_database, list_databases ) class ManagementTabs: def __init__(self, update_all_dropdowns): self.update_all_dropdowns = update_all_dropdowns self.databases = list_databases() def create_tabs(self): with gr.Tabs(): self._create_db_management_tab() self._create_document_management_tab() def _create_db_management_tab(self): with gr.Tab("Gestione Database"): gr.Markdown("## Operazioni sui Database") with gr.Row(): # Creazione Database with gr.Column(): gr.Markdown("### Crea Database") self.db_name_input = gr.Textbox(label="Nome Nuovo Database") self.create_db_button = gr.Button("Crea Database") self.create_output = gr.Textbox(label="Stato Creazione") # Modifica Database with gr.Column(): gr.Markdown("### Rinomina Database") self.modify_db_old_name = gr.Dropdown( choices=self.databases, label="Database da Rinominare" ) self.modify_db_new_name = gr.Textbox(label="Nuovo Nome") self.modify_db_button = gr.Button("Rinomina Database") self.modify_output = gr.Textbox(label="Stato Modifica") # Eliminazione Database with gr.Column(): gr.Markdown("### Elimina Database") self.delete_db_dropdown = gr.Dropdown( choices=self.databases, label="Database da Eliminare" ) self.delete_db_button = gr.Button("Elimina Database") self.delete_output = gr.Textbox(label="Stato Eliminazione") self._setup_db_events() def _create_document_management_tab(self): with gr.Tab("Gestione Documenti"): with gr.Column(): # Upload Documenti gr.Markdown("### Carica Documenti") with gr.Row(): self.file_input = gr.File( label="Carica i tuoi documenti", file_types=[".txt", ".pdf", ".docx"], file_count="multiple" ) self.db_name_upload = gr.Dropdown( choices=self.databases, label="Seleziona Database", value="default_db" ) with gr.Row(): self.title_input = gr.Textbox(label="Titolo del documento") self.author_input = gr.Textbox(label="Autore") self.upload_button = gr.Button("Indicizza Documenti") self.upload_output = gr.Textbox(label="Stato Upload") # Gestione File self._setup_file_management() self._setup_document_events() def _setup_file_management(self): gr.Markdown("### Gestione File") with gr.Row(): self.db_name_list = gr.Dropdown( choices=self.databases, label="Database", value="default_db" ) self.list_button = gr.Button("Lista File") self.list_output = gr.Textbox(label="File nel Database") with gr.Row(): self.delete_file_input = gr.Textbox(label="Nome File da Eliminare") self.delete_file_button = gr.Button("Elimina File") self.delete_file_output = gr.Textbox(label="Stato Eliminazione") def _setup_db_events(self): # Eventi per la gestione del database self.create_db_button.click( fn=create_database, inputs=self.db_name_input, outputs=self.create_output ).then(fn=self.update_all_dropdowns) self.modify_db_button.click( fn=modify_database, inputs=[self.modify_db_old_name, self.modify_db_new_name], outputs=self.modify_output ).then(fn=self.update_all_dropdowns) self.delete_db_button.click( fn=delete_database, inputs=self.delete_db_dropdown, outputs=self.delete_output ).then(fn=self.update_all_dropdowns) def _setup_document_events(self): # Eventi per la gestione dei documenti self.upload_button.click( fn=self._upload_and_index_callback, inputs=[self.file_input, self.title_input, self.author_input, self.db_name_upload], outputs=self.upload_output ).then(fn=self.update_all_dropdowns).then( fn=self._list_files_callback, inputs=[self.db_name_list], outputs=self.list_output ) self.list_button.click( fn=self._list_files_callback, inputs=[self.db_name_list], outputs=self.list_output ) self.delete_file_button.click( fn=self._delete_file_callback, inputs=[self.delete_file_input, self.db_name_list], outputs=self.delete_file_output ).then(fn=self.update_all_dropdowns) def _upload_and_index_callback(self, files, title, author, db_name): try: status = upload_and_index(files, title, author, db_name) logging.info(f"Upload completato: {status}") return status except Exception as e: logging.error(f"Errore durante l'upload: {str(e)}") return f"Errore: {str(e)}" def _list_files_callback(self, db_name): return list_indexed_files(db_name) def _delete_file_callback(self, file_name, db_name): return delete_file_from_database(file_name, db_name) def create_management_tabs(update_all_dropdowns): tabs = ManagementTabs(update_all_dropdowns) tabs.create_tabs() return tabs