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 list_databases def create_document_management_tab(update_all_dropdowns=None): """Crea il tab 'Gestione Documenti' dell'interfaccia Gradio.""" def upload_and_index_callback(files, title, author, db_name): """Carica e indicizza i documenti, quindi aggiorna la lista dei file.""" 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(db_name): """Elenca i file indicizzati nel database specificato.""" files = list_indexed_files(db_name) return files def delete_file_callback(file_name, db_name): """Elimina un file dal database e aggiorna la lista.""" status = delete_file_from_database(file_name, db_name) return status # Ottieni la lista dei database databases = list_databases() with gr.Tab("Gestione Documenti"): with gr.Column(): gr.Markdown("### Carica Documenti") with gr.Row(): file_input = gr.File( label="Carica i tuoi documenti", file_types=[".txt", ".pdf", ".docx"], file_count="multiple" ) db_name_upload = gr.Dropdown( choices=databases, label="Seleziona Database", value="default_db" ) with gr.Row(): title_input = gr.Textbox(label="Titolo del documento") author_input = gr.Textbox(label="Autore") upload_button = gr.Button("Indicizza Documenti") upload_output = gr.Textbox(label="Stato Upload") gr.Markdown("### Gestione File") with gr.Row(): db_name_list = gr.Dropdown( choices=databases, label="Database", value="default_db" ) list_button = gr.Button("Lista File") list_output = gr.Textbox(label="File nel Database") with gr.Row(): delete_file_input = gr.Textbox(label="Nome File da Eliminare") delete_file_button = gr.Button("Elimina File") delete_file_output = gr.Textbox(label="Stato Eliminazione") # Eventi upload_button.click( fn=upload_and_index_callback, inputs=[file_input, title_input, author_input, db_name_upload], outputs=upload_output ).then( fn=update_all_dropdowns, # <--- callback globale inputs=[], outputs=[db_name_upload, db_name_list] ).then( fn=list_files_callback, inputs=[db_name_list], outputs=list_output ) list_button.click( fn=list_files_callback, inputs=[db_name_list], outputs=list_output ) delete_file_button.click( fn=delete_file_callback, inputs=[delete_file_input, db_name_list], outputs=delete_file_output ).then( fn=update_all_dropdowns, # <--- callback globale inputs=[], outputs=[db_name_upload, db_name_list] ).then( fn=list_files_callback, inputs=[db_name_list], outputs=list_output ) # Ritorna i dropdown (e altri componenti, se servono) per poterli aggiornare return [db_name_upload, db_name_list, upload_button, list_button, delete_file_button]