@@ -254,28 +254,44 @@ def _register_test_connection(port, db_alias, preserved):
254254 return _conn
255255
256256
257- def _resolve_settings (conn_setting , remove_pass = True ):
258-
259- if conn_setting and isinstance (conn_setting , dict ):
260- conn_setting = dict (((k [8 :] if k .startswith ("MONGODB_" ) else k ), v ) for k , v in conn_setting .items () if v is not None )
261- conn_setting = dict ((k .lower (), v ) for k , v in conn_setting .items ())
262-
263- resolved = {
264- 'alias' : conn_setting .get ('alias' , DEFAULT_CONNECTION_NAME ),
265- 'name' : conn_setting .get ('db' , 'test' ),
266- 'host' : conn_setting .get ('host' , 'localhost' ),
267- 'port' : conn_setting .get ('port' , 27017 ),
268- 'username' : conn_setting .get ('username' ),
269- # default to ReadPreference.PRIMARY if no read_preference is supplied
270- 'read_preference' : conn_setting .get ('read_preference' , ReadPreference .PRIMARY ),
271- }
272- if 'replicaset' in conn_setting :
273- resolved ['replicaSet' ] = conn_setting .pop ('replicaset' )
274- if not remove_pass :
275- resolved ['password' ] = conn_setting .get ('password' )
276- return resolved
277-
278- return conn_setting
257+ def _resolve_settings (settings , settings_prefix = None , remove_pass = True ):
258+
259+ if settings and isinstance (settings , dict ):
260+ resolved_settings = dict ()
261+ for k , v in settings .items ():
262+ if settings_prefix :
263+ # Only resolve parameters that contain the prefix, ignoring the rest.
264+ if k .startswith (settings_prefix ):
265+ resolved_settings [k [len (settings_prefix ):].lower ()] = v
266+ else :
267+ # If no prefix is provided then we assume that all parameters are relevant for the DB connection string.
268+ resolved_settings [k .lower ()] = v
269+
270+ # Add various default values.
271+ resolved_settings ['alias' ] = resolved_settings .get ('alias' , DEFAULT_CONNECTION_NAME )
272+ if 'db' in resolved_settings :
273+ resolved_settings ['name' ] = resolved_settings .pop ('db' )
274+ else :
275+ resolved_settings ['name' ] = 'test'
276+
277+ resolved_settings ['host' ] = resolved_settings .get ('host' , 'localhost' )
278+ resolved_settings ['port' ] = resolved_settings .get ('port' , 27017 )
279+ resolved_settings ['username' ] = resolved_settings .get ('username' , None )
280+
281+ # default to ReadPreference.PRIMARY if no read_preference is supplied
282+ resolved_settings ['read_preference' ] = resolved_settings .get ('read_preference' , ReadPreference .PRIMARY )
283+ if 'replicaset' in resolved_settings :
284+ resolved_settings ['replicaSet' ] = resolved_settings .pop ('replicaset' )
285+ if remove_pass :
286+ try :
287+ del resolved_settings ['password' ]
288+ except KeyError :
289+ # Password not specified, ignore.
290+ pass
291+
292+ return resolved_settings
293+
294+ return settings
279295
280296
281297def fetch_connection_settings (config , remove_pass = True ):
@@ -306,14 +322,14 @@ def fetch_connection_settings(config, remove_pass=True):
306322 # List of connection settings.
307323 settings_list = []
308324 for setting in settings :
309- settings_list .append (_resolve_settings (setting , remove_pass ))
325+ settings_list .append (_resolve_settings (setting , remove_pass = remove_pass ))
310326 return settings_list
311327 else :
312328 # Connection settings provided as a dictionary.
313- return _resolve_settings (settings , remove_pass )
329+ return _resolve_settings (settings , remove_pass = remove_pass )
314330 else :
315331 # Connection settings provided in standard format.
316- return _resolve_settings (config , remove_pass )
332+ return _resolve_settings (config , settings_prefix = 'MONGODB_' , remove_pass = remove_pass )
317333
318334
319335def create_connection (config , app ):
0 commit comments