From a65b9b1cc53ba070ff9321d26da8e30bd792168b Mon Sep 17 00:00:00 2001 From: wqy Date: Sun, 18 Sep 2022 00:26:58 +0800 Subject: [PATCH] Add project ref count to allow multiple connections --- api/project.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/api/project.py b/api/project.py index 0853e1c..d1d9e60 100644 --- a/api/project.py +++ b/api/project.py @@ -3,6 +3,8 @@ from .connection import g_conn_dict as conn # no undo/redo +_project_open_count: dict[str, int] = {} + def have_project(name: str) -> bool: with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn: with conn.cursor() as cur: @@ -23,11 +25,19 @@ def delete_project(name: str) -> None: cur.execute(f"drop database {name}") def open_project(name: str) -> None: - conn[name] = pg.connect(conninfo=f"dbname={name} host=127.0.0.1", autocommit=True) + if name not in _project_open_count: + conn[name] = pg.connect(conninfo=f"dbname={name} host=127.0.0.1", autocommit=True) + _project_open_count[name] = 0 + + _project_open_count[name] += 1 def is_project_open(name: str) -> bool: return name in conn def close_project(name: str) -> None: - conn[name].close() - del conn[name] + if name in _project_open_count: + _project_open_count[name] -= 1 + if _project_open_count[name] == 0: + conn[name].close() + del conn[name] + del _project_open_count[name]