Skip to content

Commit f34005b

Browse files
rrenkerthjanott
andauthored
Move deactivation of notify trigger to tests (#3354)
* move deactivation of notify triggers to conftest * deactivate triggers also before and after migration test --------- Co-authored-by: Hannes Janott <hannes.janott@openslides.com>
1 parent c00ac42 commit f34005b

File tree

4 files changed

+35
-30
lines changed

4 files changed

+35
-30
lines changed

openslides_backend/services/postgresql/create_schema.py

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import os
2-
from typing import Any
32

4-
from psycopg import Connection, Cursor, rows, sql
3+
from psycopg import Connection, rows, sql
54

65
from openslides_backend.migrations.exceptions import (
76
MismatchingMigrationIndicesException,
@@ -60,7 +59,6 @@ def create_schema() -> None:
6059
MigrationHelper.set_database_migration_info(
6160
cursor, 100, MigrationState.FINALIZED
6261
)
63-
deactivate_notify_triggers(cursor)
6462
return
6563
# We have a migration index if this is a legacy instance.
6664
# A migration index higher than or equal to MIN_NON_REL_MIGRATION is not
@@ -88,7 +86,6 @@ def create_schema() -> None:
8886
type_ = "fresh"
8987
db_migration_index = MigrationHelper.get_backend_migration_index()
9088
print(f"Assuming {type_} database.")
91-
deactivate_notify_triggers(cursor)
9289
MigrationHelper.set_database_migration_info(
9390
cursor,
9491
db_migration_index,
@@ -100,28 +97,3 @@ def create_schema() -> None:
10097
except Exception as e:
10198
print(f"On applying relational schema there was an error: {str(e)}\n")
10299
return
103-
104-
105-
def deactivate_notify_triggers(cursor: Cursor[dict[str, Any]]) -> None:
106-
if env.is_dev_mode():
107-
# deactivate all notify triggers
108-
for table in MigrationHelper.get_public_tables(cursor):
109-
to_disable_triggers = cursor.execute(
110-
sql.SQL(
111-
"""SELECT
112-
tgname AS trigger_name,
113-
tgrelid::regclass AS table_name
114-
FROM
115-
pg_trigger
116-
WHERE
117-
tgrelid = {table_name}::regclass AND
118-
tgname LIKE 'tr_log_%' OR tgname LIKE 'notify_%';"""
119-
).format(table_name=table)
120-
).fetchall()
121-
for trigger_dict in to_disable_triggers:
122-
cursor.execute(
123-
sql.SQL("ALTER TABLE {table} DISABLE TRIGGER {trigger};").format(
124-
table=sql.Identifier(trigger_dict["table_name"]),
125-
trigger=sql.SQL(trigger_dict["trigger_name"]),
126-
)
127-
)

tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
get_new_os_conn,
1212
)
1313
from tests.conftest_helper import (
14+
deactivate_notify_triggers,
1415
generate_remove_all_test_functions,
1516
generate_sql_for_test_initiation,
1617
)
@@ -52,6 +53,7 @@ def setup_pytest_session() -> Generator[None]:
5253
"""
5354
with get_new_os_conn() as conn:
5455
with conn.cursor() as curs:
56+
deactivate_notify_triggers(curs)
5557
tablenames = get_rel_db_table_names(curs)
5658
if tablenames:
5759
curs.execute(

tests/conftest_helper.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from textwrap import dedent
2+
from typing import Any
3+
4+
from psycopg import Cursor, sql
25

36
from openslides_backend.migrations.migration_helper import (
47
MigrationHelper,
@@ -9,6 +12,30 @@
912
openslides_db = env.DATABASE_NAME
1013

1114

15+
def deactivate_notify_triggers(cursor: Cursor[dict[str, Any]]) -> None:
16+
"""Deactivates all notify triggers present in the database."""
17+
for table in MigrationHelper.get_public_tables(cursor):
18+
to_disable_triggers = cursor.execute(
19+
sql.SQL(
20+
"""SELECT
21+
tgname AS trigger_name,
22+
tgrelid::regclass AS table_name
23+
FROM
24+
pg_trigger
25+
WHERE
26+
tgrelid = {table_name}::regclass AND
27+
tgname LIKE 'tr_log_%' OR tgname LIKE 'notify_%';"""
28+
).format(table_name=table)
29+
).fetchall()
30+
for trigger_dict in to_disable_triggers:
31+
cursor.execute(
32+
sql.SQL("ALTER TABLE {table} DISABLE TRIGGER {trigger};").format(
33+
table=sql.Identifier(trigger_dict["table_name"]),
34+
trigger=sql.SQL(trigger_dict["trigger_name"]),
35+
)
36+
)
37+
38+
1239
def generate_trigger_sql_code(tablenames: tuple[str, ...]) -> str:
1340
sql: list[str] = []
1441
for table in tablenames:

tests/system/migrations/test_0100_init_reldb.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@
3535
)
3636
from openslides_backend.shared.env import DEV_PASSWORD, Environment
3737
from tests.conftest import OLD_TABLES, get_rel_db_table_names
38-
from tests.conftest_helper import generate_sql_for_test_initiation
38+
from tests.conftest_helper import (
39+
deactivate_notify_triggers,
40+
generate_sql_for_test_initiation,
41+
)
3942
from tests.system.action.util import get_internal_auth_header
4043
from tests.system.util import create_action_test_application, get_route_path
4144
from tests.util import AuthData, Client, Response
@@ -107,6 +110,7 @@ def apply_test_relational_schema() -> None:
107110
with conn.cursor() as curs:
108111
table_names = get_rel_db_table_names(curs)
109112
curs.execute(generate_sql_for_test_initiation(tuple(table_names)))
113+
deactivate_notify_triggers(curs)
110114

111115
def tearDown(self) -> None:
112116
migration_module.Sql_helper.offset = 0

0 commit comments

Comments
 (0)