Spaces:
Running
Running
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] | |