Edurag_beta / ui /management_tabs.py
Nugh75's picture
update struttura
3c5ed5b
raw
history blame
6.41 kB
import gradio as gr
import logging
from app.document_handling import upload_and_index, list_indexed_files, delete_file_from_database
from app.utils.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