From 21cce691f2b5621e66ef139692b24dac9e07c87a Mon Sep 17 00:00:00 2001 From: 20C Date: Tue, 13 Aug 2024 09:09:39 +0000 Subject: [PATCH 1/2] ORM configuration Options is missing (postgreSQL) #98 --- CHANGELOG.md | 1 + CHANGELOG.yaml | 1 + src/django_peeringdb/client_adaptor/load.py | 6 ++ tests/test_client_adaptor.py | 77 +++++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1be4b53..ace4ef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ## Unreleased ### Added - help text for info_traffic +- ORM configuration options exposed ### Fixed - missing migrations ### Changed diff --git a/CHANGELOG.yaml b/CHANGELOG.yaml index 0694c14..8caf406 100644 --- a/CHANGELOG.yaml +++ b/CHANGELOG.yaml @@ -1,6 +1,7 @@ Unreleased: added: - help text for info_traffic + - ORM configuration options exposed fixed: - missing migrations changed: diff --git a/src/django_peeringdb/client_adaptor/load.py b/src/django_peeringdb/client_adaptor/load.py index 12e9b67..c0bb53f 100644 --- a/src/django_peeringdb/client_adaptor/load.py +++ b/src/django_peeringdb/client_adaptor/load.py @@ -5,6 +5,7 @@ "PORT", "USER", "PASSWORD", + "OPTIONS", ) @@ -16,6 +17,11 @@ def database_settings(db_config): db[k] = v db["ENGINE"] = "django.db.backends." + db["ENGINE"] + + # Check if the ENGINE is not PostgreSQL, remove OPTIONS if it's present + if db["ENGINE"] != "django.db.backends.postgresql": + db.pop("OPTIONS", None) + return db diff --git a/tests/test_client_adaptor.py b/tests/test_client_adaptor.py index 3431cf2..408b63e 100644 --- a/tests/test_client_adaptor.py +++ b/tests/test_client_adaptor.py @@ -46,6 +46,83 @@ def test_database_settings(): assert db_config == expected +def test_database_settings_postgresql(): + db_config = database_settings( + { + "engine": "postgresql", + "name": "test_db", + "host": "localhost", + "port": 5432, + "user": "test_user", + "password": "test_password", + "options": {"options": "-c search_path=peeringdb_schema"}, + } + ) + + expected = { + "ENGINE": "django.db.backends.postgresql", + "NAME": "test_db", + "HOST": "localhost", + "PORT": 5432, + "USER": "test_user", + "PASSWORD": "test_password", + "OPTIONS": {"options": "-c search_path=peeringdb_schema"}, + } + + assert db_config == expected + assert "OPTIONS" in db_config + + +def test_database_settings_mysql(): + db_config = database_settings( + { + "engine": "mysql", + "name": "test_db", + "host": "localhost", + "port": 3306, + "user": "test_user", + "password": "test_password", + } + ) + + expected = { + "ENGINE": "django.db.backends.mysql", + "NAME": "test_db", + "HOST": "localhost", + "PORT": 3306, + "USER": "test_user", + "PASSWORD": "test_password", + } + + assert db_config == expected + + +def test_database_settings_mysql_no_options(): + db_config = database_settings( + { + "engine": "mysql", + "name": "test_db", + "host": "localhost", + "port": 3306, + "user": "test_user", + "password": "test_password", + "options": {"options": "-c some_option"}, + } + ) + + expected = { + "ENGINE": "django.db.backends.mysql", + "NAME": "test_db", + "HOST": "localhost", + "PORT": 3306, + "USER": "test_user", + "PASSWORD": "test_password", + } + + assert db_config == expected + assert "OPTIONS" not in db_config + + def test_backend_setup(): Backend.setup() for model in models.all_models: From 469252cf081012064152f73735af1af56e8b2af8 Mon Sep 17 00:00:00 2001 From: 20C Date: Wed, 21 Aug 2024 08:42:16 +0000 Subject: [PATCH 2/2] options are useful for other engines as well, not just psql --- src/django_peeringdb/client_adaptor/load.py | 5 ----- tests/test_client_adaptor.py | 7 ++++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/django_peeringdb/client_adaptor/load.py b/src/django_peeringdb/client_adaptor/load.py index c0bb53f..3a043cc 100644 --- a/src/django_peeringdb/client_adaptor/load.py +++ b/src/django_peeringdb/client_adaptor/load.py @@ -17,11 +17,6 @@ def database_settings(db_config): db[k] = v db["ENGINE"] = "django.db.backends." + db["ENGINE"] - - # Check if the ENGINE is not PostgreSQL, remove OPTIONS if it's present - if db["ENGINE"] != "django.db.backends.postgresql": - db.pop("OPTIONS", None) - return db diff --git a/tests/test_client_adaptor.py b/tests/test_client_adaptor.py index 408b63e..fa319c5 100644 --- a/tests/test_client_adaptor.py +++ b/tests/test_client_adaptor.py @@ -97,7 +97,7 @@ def test_database_settings_mysql(): assert db_config == expected -def test_database_settings_mysql_no_options(): +def test_database_settings_mysql_options(): db_config = database_settings( { "engine": "mysql", @@ -106,7 +106,7 @@ def test_database_settings_mysql_no_options(): "port": 3306, "user": "test_user", "password": "test_password", - "options": {"options": "-c some_option"}, + "options": {}, } ) @@ -117,10 +117,11 @@ def test_database_settings_mysql_no_options(): "PORT": 3306, "USER": "test_user", "PASSWORD": "test_password", + "OPTIONS": {}, } assert db_config == expected - assert "OPTIONS" not in db_config + assert "OPTIONS" in db_config def test_backend_setup():