@@ -37,26 +37,34 @@ class GoogleSecretManagerMapping(Mapping[str, Optional[str]]):
37
37
_loaded_secrets : dict [str , str | None ]
38
38
_secret_client : SecretManagerServiceClient
39
39
40
- def __init__ (self , secret_client : SecretManagerServiceClient , project_id : str ) -> None :
40
+ def __init__ (self , secret_client : SecretManagerServiceClient , project_id : str , case_sensitive : bool ) -> None :
41
41
self ._loaded_secrets = {}
42
42
self ._secret_client = secret_client
43
43
self ._project_id = project_id
44
+ self ._case_sensitive = case_sensitive
44
45
45
46
@property
46
47
def _gcp_project_path (self ) -> str :
47
48
return self ._secret_client .common_project_path (self ._project_id )
48
49
49
50
@cached_property
50
51
def _secret_names (self ) -> list [str ]:
51
- return [
52
- self ._secret_client .parse_secret_path (secret .name ).get ('secret' , '' )
53
- for secret in self ._secret_client .list_secrets (parent = self ._gcp_project_path )
54
- ]
52
+ rv : list [str ] = []
53
+
54
+ secrets = self ._secret_client .list_secrets (parent = self ._gcp_project_path )
55
+ for secret in secrets :
56
+ name = self ._secret_client .parse_secret_path (secret .name ).get ('secret' , '' )
57
+ if not self ._case_sensitive :
58
+ name = name .lower ()
59
+ rv .append (name )
60
+ return rv
55
61
56
62
def _secret_version_path (self , key : str , version : str = 'latest' ) -> str :
57
63
return self ._secret_client .secret_version_path (self ._project_id , key , version )
58
64
59
65
def __getitem__ (self , key : str ) -> str | None :
66
+ if not self ._case_sensitive :
67
+ key = key .lower ()
60
68
if key not in self ._loaded_secrets :
61
69
# If we know the key isn't available in secret manager, raise a key error
62
70
if key not in self ._secret_names :
@@ -92,6 +100,7 @@ def __init__(
92
100
env_parse_none_str : str | None = None ,
93
101
env_parse_enums : bool | None = None ,
94
102
secret_client : SecretManagerServiceClient | None = None ,
103
+ case_sensitive : bool | None = True ,
95
104
) -> None :
96
105
# Import Google Packages if they haven't already been imported
97
106
if SecretManagerServiceClient is None or Credentials is None or google_auth_default is None :
@@ -124,15 +133,17 @@ def __init__(
124
133
125
134
super ().__init__ (
126
135
settings_cls ,
127
- case_sensitive = True ,
136
+ case_sensitive = case_sensitive ,
128
137
env_prefix = env_prefix ,
129
138
env_ignore_empty = False ,
130
139
env_parse_none_str = env_parse_none_str ,
131
140
env_parse_enums = env_parse_enums ,
132
141
)
133
142
134
143
def _load_env_vars (self ) -> Mapping [str , Optional [str ]]:
135
- return GoogleSecretManagerMapping (self ._secret_client , project_id = self ._project_id )
144
+ return GoogleSecretManagerMapping (
145
+ self ._secret_client , project_id = self ._project_id , case_sensitive = self .case_sensitive
146
+ )
136
147
137
148
def __repr__ (self ) -> str :
138
149
return f'{ self .__class__ .__name__ } (project_id={ self ._project_id !r} , env_nested_delimiter={ self .env_nested_delimiter !r} )'
0 commit comments