Skip to content

Commit c2ea037

Browse files
committed
1 parent 30f91ad commit c2ea037

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/fides/core/config/database_settings.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
# pylint: disable=C0115,C0116, E0213
44

5-
from typing import Dict, Optional, Union
5+
from copy import deepcopy
6+
from typing import Dict, Optional, Union, cast
67
from urllib.parse import quote, urlencode
78

89
from pydantic import Field, PostgresDsn, validator
@@ -68,7 +69,7 @@ class DatabaseSettings(FidesSettings):
6869
default="defaultuser",
6970
description="The database user with which to login to the application database.",
7071
)
71-
params: dict = Field(
72+
params: Dict = Field(
7273
default={},
7374
description="Additional connection parameters used when connecting to the applicaiton database.",
7475
)
@@ -113,7 +114,9 @@ def assemble_sync_database_uri(
113114
host=values["server"],
114115
port=values.get("port"),
115116
path=f"/{db_name or ''}",
116-
query=urlencode(values["params"], quote_via=quote, safe="/"),
117+
query=urlencode(
118+
cast(Dict, values["params"]), quote_via=quote, safe="/"
119+
),
117120
)
118121
)
119122

@@ -127,6 +130,12 @@ def assemble_async_database_uri(
127130
return value
128131

129132
db_name = values["test_db"] if get_test_mode() else values["db"]
133+
# Workaround https://github.com/MagicStack/asyncpg/issues/737
134+
params = cast(Dict, deepcopy(values["params"]))
135+
if "sslmode" in params.keys():
136+
params["ssl"] = params["sslmode"]
137+
del params["sslmode"]
138+
# End workaround
130139
return str(
131140
PostgresDsn.build(
132141
scheme="postgresql+asyncpg",
@@ -135,7 +144,7 @@ def assemble_async_database_uri(
135144
host=values["server"],
136145
port=values.get("port"),
137146
path=f"/{db_name or ''}",
138-
query=urlencode(values["params"], quote_via=quote, safe="/"),
147+
query=urlencode(params, quote_via=quote, safe="/"),
139148
)
140149
)
141150

@@ -155,7 +164,9 @@ def assemble_db_connection(
155164
host=values["server"],
156165
port=values.get("port"),
157166
path=f"/{values.get('db') or ''}",
158-
query=urlencode(values["params"], quote_via=quote, safe="/"),
167+
query=urlencode(
168+
cast(Dict, values["params"]), quote_via=quote, safe="/"
169+
),
159170
)
160171
)
161172

@@ -175,7 +186,9 @@ def assemble_test_db_connection(
175186
host=values["server"],
176187
port=values["port"],
177188
path=f"/{values.get('test_db') or ''}",
178-
query=urlencode(values["params"], quote_via=quote, safe="/"),
189+
query=urlencode(
190+
cast(Dict, values["params"]), quote_via=quote, safe="/"
191+
),
179192
)
180193
)
181194

tests/ctl/core/config/test_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ def test_builds_with_params(self) -> None:
377377
)
378378
assert (
379379
database_settings.async_database_uri
380-
== "postgresql+asyncpg://postgres:fides@fides-db:5432/database?sslmode=verify-full&sslrootcert=/etc/ssl/private/myca.crt"
380+
== "postgresql+asyncpg://postgres:fides@fides-db:5432/database?sslrootcert=/etc/ssl/private/myca.crt&ssl=verify-full"
381381
)
382382
assert (
383383
database_settings.sync_database_uri

0 commit comments

Comments
 (0)