Skip to content

Commit e9b9997

Browse files
committed
Skip list_secrets call when case_sensitive=True
When case_sensitive=True, secret names are used as-is without any name translation, so there's no need to enumerate all secrets via list_secrets (which requires secretmanager.secrets.list permission). __getitem__ now calls _get_secret_value directly when case_sensitive=True. get_field_value likewise uses env_name directly when case_sensitive=True, avoiding access to _secret_name_map (and the underlying list_secrets call) even when a SecretVersion is specified.
1 parent f4fcb53 commit e9b9997

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

  • pydantic_settings/sources/providers

pydantic_settings/sources/providers/gcp.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,15 @@ def __getitem__(self, key: str) -> str | None:
111111
if key in self._loaded_secrets:
112112
return self._loaded_secrets[key]
113113

114+
if self._case_sensitive:
115+
value = self._get_secret_value(key)
116+
if value is None:
117+
raise KeyError(key)
118+
self._loaded_secrets[key] = value
119+
return value
120+
114121
gcp_secret_name = self._secret_name_map.get(key)
115-
if gcp_secret_name is None and not self._case_sensitive:
122+
if gcp_secret_name is None:
116123
gcp_secret_name = self._secret_name_map.get(key.lower())
117124

118125
if gcp_secret_name:
@@ -204,9 +211,12 @@ def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str,
204211
# of the same secret name to be retrieved independently and cached in the GoogleSecretManagerMapping
205212
if secret_version and isinstance(self.env_vars, GoogleSecretManagerMapping):
206213
for field_key, env_name, value_is_complex in self._extract_field_info(field, field_name):
207-
gcp_secret_name = self.env_vars._secret_name_map.get(env_name)
208-
if gcp_secret_name is None and not self.case_sensitive:
209-
gcp_secret_name = self.env_vars._secret_name_map.get(env_name.lower())
214+
if self.case_sensitive:
215+
gcp_secret_name = env_name
216+
else:
217+
gcp_secret_name = self.env_vars._secret_name_map.get(env_name)
218+
if gcp_secret_name is None:
219+
gcp_secret_name = self.env_vars._secret_name_map.get(env_name.lower())
210220

211221
if gcp_secret_name:
212222
env_val = self.env_vars._get_secret_value(gcp_secret_name, secret_version)

0 commit comments

Comments
 (0)