From bc8e43dfcafd17db0ab67bf02303f3097f8b229b Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 8 Aug 2026 17:27:52 +0200 Subject: [PATCH] fix: add event handling for deleted projects --- gns3server/controller/__init__.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gns3server/controller/__init__.py b/gns3server/controller/__init__.py index edf654ec3..9a519a616 100644 --- a/gns3server/controller/__init__.py +++ b/gns3server/controller/__init__.py @@ -29,7 +29,7 @@ try: except ImportError: from importlib import resources as importlib_resources -from watchdog.events import FileSystemEventHandler +from watchdog.events import FileSystemEventHandler, DirDeletedEvent, FileDeletedEvent from watchdog.observers import Observer from ..config import Config @@ -73,6 +73,9 @@ class _ProjectsDirectoryEventHandler(FileSystemEventHandler): def on_moved(self, event): self._handle_event(event) + def on_deleted(self, event: DirDeletedEvent | FileDeletedEvent) -> None: + self._handle_event(event) + def _handle_event(self, event): if event.is_directory: # Only react to direct child directories of the projects path @@ -446,6 +449,12 @@ class Controller: return # Monitor was stopped, skip the scan try: await self.load_projects() + # Remove stale projects that no longer exist on disk + for project_id in list(self._projects): + project = self._projects[project_id] + if not os.path.exists(project.path): + log.info(f"Removing stale project '{project.name}' ('{project.path}' no longer exists)") + del self._projects[project.id] except Exception as e: log.warning(f"Projects directory rescan failed: {e}")