8
8
from django .utils .functional import SimpleLazyObject
9
9
from django .utils .text import format_lazy
10
10
from django .utils .version import get_version_tuple
11
- from pymongo .encryption_options import AutoEncryptionOpts
12
11
from pymongo .uri_parser import parse_uri as pymongo_parse_uri
13
12
14
13
@@ -34,12 +33,14 @@ def get_auto_encryption_options(crypt_shared_lib_path=None):
34
33
key_vault_collection_name = "__keyVault"
35
34
key_vault_namespace = f"{ key_vault_database_name } .{ key_vault_collection_name } "
36
35
kms_providers = {}
37
- return AutoEncryptionOpts (
38
- kms_providers , key_vault_namespace , crypt_shared_lib_path = crypt_shared_lib_path
39
- )
36
+ return {
37
+ "kms_providers" : kms_providers ,
38
+ "key_vault_namespace" : key_vault_namespace ,
39
+ "crypt_shared_lib_path" : crypt_shared_lib_path ,
40
+ }
40
41
41
42
42
- def parse_uri (uri , * , db_name = None , test = None ):
43
+ def parse_uri (uri , * , auto_encryption_options = None , db_name = None , test = None ):
43
44
"""
44
45
Convert the given uri into a dictionary suitable for Django's DATABASES
45
46
setting.
@@ -59,14 +60,17 @@ def parse_uri(uri, *, db_name=None, test=None):
59
60
db_name = db_name or uri ["database" ]
60
61
if not db_name :
61
62
raise ImproperlyConfigured ("You must provide the db_name parameter." )
63
+ options = uri .get ("options" )
64
+ if auto_encryption_options :
65
+ options = {** uri .get ("options" ), ** auto_encryption_options }
62
66
settings_dict = {
63
67
"ENGINE" : "django_mongodb_backend" ,
64
68
"NAME" : db_name ,
65
69
"HOST" : host ,
66
70
"PORT" : port ,
67
71
"USER" : uri .get ("username" ),
68
72
"PASSWORD" : uri .get ("password" ),
69
- "OPTIONS" : uri . get ( " options" ) ,
73
+ "OPTIONS" : options ,
70
74
}
71
75
if "authSource" not in settings_dict ["OPTIONS" ] and uri ["database" ]:
72
76
settings_dict ["OPTIONS" ]["authSource" ] = uri ["database" ]
0 commit comments