Cleanup the Fonduer database and create a new project in the database.
Parameters:
| Name |
Type |
Description |
Default |
conn_string |
str
|
Fonduer postgres connection string. |
required
|
project_name |
str
|
Fonduer project name. |
required
|
Source code in LabelstudioToFonduer/fonduer_tools.py
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | def save_create_project(conn_string: str, project_name: str):
"""Cleanup the Fonduer database and create a new project in the database.
Args:
conn_string (str): Fonduer postgres connection string.
project_name (str): Fonduer project name.
"""
# create connection
engine = sqlalchemy.create_engine(conn_string)
conn = engine.connect()
conn.execute("commit")
# Check existing projects
current_dbs = engine.execute("SELECT datname FROM pg_database;").fetchall()
current_dbs = [db[0] for db in current_dbs]
# Wipe if project exists
if project_name in current_dbs:
engine = sqlalchemy.create_engine(conn_string)
conn = engine.connect()
conn.execute("commit")
conn.execute(
f"""SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
pid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = '{project_name}'
;"""
)
conn.execute("commit")
conn.execute("drop database " + project_name)
# Create Project
conn.execute("commit")
conn.execute("create database " + project_name)
conn.close()
|