2
2
3
3
# pylint: disable=C0115,C0116, E0213
4
4
5
- from typing import Dict , Optional , Union
5
+ from copy import deepcopy
6
+ from typing import Dict , Optional , Union , cast
6
7
from urllib .parse import quote , urlencode
7
8
8
9
from pydantic import Field , PostgresDsn , validator
@@ -68,7 +69,7 @@ class DatabaseSettings(FidesSettings):
68
69
default = "defaultuser" ,
69
70
description = "The database user with which to login to the application database." ,
70
71
)
71
- params : dict = Field (
72
+ params : Dict = Field (
72
73
default = {},
73
74
description = "Additional connection parameters used when connecting to the applicaiton database." ,
74
75
)
@@ -113,7 +114,9 @@ def assemble_sync_database_uri(
113
114
host = values ["server" ],
114
115
port = values .get ("port" ),
115
116
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
+ ),
117
120
)
118
121
)
119
122
@@ -127,6 +130,12 @@ def assemble_async_database_uri(
127
130
return value
128
131
129
132
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
130
139
return str (
131
140
PostgresDsn .build (
132
141
scheme = "postgresql+asyncpg" ,
@@ -135,7 +144,7 @@ def assemble_async_database_uri(
135
144
host = values ["server" ],
136
145
port = values .get ("port" ),
137
146
path = f"/{ db_name or '' } " ,
138
- query = urlencode (values [ " params" ] , quote_via = quote , safe = "/" ),
147
+ query = urlencode (params , quote_via = quote , safe = "/" ),
139
148
)
140
149
)
141
150
@@ -155,7 +164,9 @@ def assemble_db_connection(
155
164
host = values ["server" ],
156
165
port = values .get ("port" ),
157
166
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
+ ),
159
170
)
160
171
)
161
172
@@ -175,7 +186,9 @@ def assemble_test_db_connection(
175
186
host = values ["server" ],
176
187
port = values ["port" ],
177
188
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
+ ),
179
192
)
180
193
)
181
194
0 commit comments