Edurag_beta / app /utils /database_handling.py
Nugh75's picture
update struttura
3c5ed5b
import logging
import os
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from app.config import BASE_DB_PATH
# Crea la cartella db se non esiste
if not os.path.exists(BASE_DB_PATH):
os.makedirs(BASE_DB_PATH)
# -------------- DATABASE MANAGEMENT TAB FUNCTIONS --------------
def create_database(db_name):
logging.info(f"Creating database: {db_name}")
db_path = os.path.join(BASE_DB_PATH, f"faiss_index_{db_name}")
if os.path.exists(db_path):
return f"Il database '{db_name}' esiste già."
try:
os.makedirs(db_path)
logging.info(f"Database {db_name} created successfully.")
return f"Database '{db_name}' creato con successo."
except Exception as e:
logging.error(f"Errore nella creazione del database: {e}")
return f"Errore nella creazione del database: {e}"
def delete_database(db_name):
db_path = os.path.join(BASE_DB_PATH, f"faiss_index_{db_name}")
if not os.path.exists(db_path):
return f"Il database '{db_name}' non esiste."
try:
shutil.rmtree(db_path)
logging.info(f"Database {db_name} eliminato con successo.")
return f"Database '{db_name}' eliminato con successo."
except OSError as e:
logging.error(f"Impossibile eliminare il database {db_name}: {e}")
return f"Impossibile eliminare il database '{db_name}': {e}"
def modify_database(old_db_name, new_db_name):
old_db_path = os.path.join(BASE_DB_PATH, f"faiss_index_{old_db_name}")
new_db_path = os.path.join(BASE_DB_PATH, f"faiss_index_{new_db_name}")
if not os.path.exists(old_db_path):
return f"Il database '{old_db_name}' non esiste."
if os.path.exists(new_db_path):
return f"Il database '{new_db_name}' esiste già."
try:
os.rename(old_db_path, new_db_path)
return f"Database '{old_db_name}' rinominato in '{new_db_name}' con successo."
except Exception as e:
return f"Errore durante la modifica del database: {e}"
def list_databases():
try:
databases = []
for item in os.listdir(BASE_DB_PATH):
if os.path.isdir(os.path.join(BASE_DB_PATH, item)) and item.startswith("faiss_index_"):
db_name = item.replace("faiss_index_", "")
databases.append(db_name)
# Ensure "default_db" is in the list
if "default_db" not in databases:
databases.append("default_db")
return databases
except Exception as e:
logging.error(f"Error listing databases: {e}")
return []
class DatabaseChangeHandler(FileSystemEventHandler):
"""Handler per monitorare i cambiamenti nella cartella db."""
def __init__(self, update_callback):
self.update_callback = update_callback
def on_any_event(self, event):
if event.is_directory: # Monitora solo le directory
self.update_callback()
def setup_db_observer(update_callback):
"""Configura l'observer per la cartella db."""
event_handler = DatabaseChangeHandler(update_callback)
observer = Observer()
observer.schedule(event_handler, BASE_DB_PATH, recursive=False)
observer.start()
return observer