Merge pull request #2833 from Sanjays2402/fix/delete-project-does-not-start-nodes

Do not start nodes when deleting a project
This commit is contained in:
Jeremy Grossmann 2026-07-26 09:23:12 +02:00 committed by GitHub
commit 6c2a980afc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 3 deletions

View File

@ -917,7 +917,7 @@ class Project:
if self._status != "opened": if self._status != "opened":
try: try:
await self.open() await self.open(auto_start=False)
except aiohttp.web.HTTPConflict as e: except aiohttp.web.HTTPConflict as e:
# ignore missing images or other conflicts when deleting a project # ignore missing images or other conflicts when deleting a project
log.warning(f"Conflict while deleting project: {e}") log.warning(f"Conflict while deleting project: {e}")
@ -998,9 +998,12 @@ class Project:
return os.path.join(self.path, self._filename) return os.path.join(self.path, self._filename)
@locking @locking
async def open(self): async def open(self, auto_start=True):
""" """
Load topology elements Load topology elements
:param auto_start: whether the nodes may be started when the project
has auto start enabled
""" """
if self._closing: if self._closing:
@ -1114,7 +1117,7 @@ class Project:
self._loading = False self._loading = False
self.emit_controller_notification("project.opened", self.__json__()) self.emit_controller_notification("project.opened", self.__json__())
# Should we start the nodes when project is open # Should we start the nodes when project is open
if self._auto_start: if self._auto_start and auto_start:
# Start all in the background without waiting for completion # Start all in the background without waiting for completion
# we ignore errors because we want to let the user open # we ignore errors because we want to let the user open
# their project and fix it # their project and fix it

View File

@ -655,6 +655,19 @@ async def test_delete(project):
assert not os.path.exists(project.path) assert not os.path.exists(project.path)
async def test_delete_does_not_start_nodes(project):
"""
Deleting a project must not start its nodes, even when auto_start is enabled.
"""
project.auto_start = True
project.dump()
await project.close()
project.start_all = AsyncioMagicMock()
await project.delete()
assert not project.start_all.called
async def test_dump(projects_dir): async def test_dump(projects_dir):
directory = projects_dir directory = projects_dir