Skip to content

Commit d145aea

Browse files
authored
fix refreshable credentials injection (#1314)
1 parent 1515727 commit d145aea

File tree

5 files changed

+51
-9
lines changed

5 files changed

+51
-9
lines changed

CHANGES.rst

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
Changes
22
-------
3+
2.21.1 (2025-03-04)
4+
^^^^^^^^^^^^^^^^^^^
5+
* fix for refreshable credential account-id lookup
36

47
2.21.0 (2025-02-28)
58
^^^^^^^^^^^^^^^^^^^

aiobotocore/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '2.21.0'
1+
__version__ = '2.21.1'

aiobotocore/args.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import botocore.parsers
44
import botocore.serialize
5-
from botocore.args import ClientArgsCreator
5+
from botocore.args import ClientArgsCreator, EPRBuiltins
66

77
from .config import AioConfig
88
from .endpoint import DEFAULT_HTTP_SESSION_CLS, AioEndpointCreator
@@ -176,6 +176,12 @@ def _build_endpoint_resolver(
176176
credentials=credentials,
177177
account_id_endpoint_mode=account_id_endpoint_mode,
178178
)
179+
180+
# replace with async version
181+
resolver_builtins[EPRBuiltins.ACCOUNT_ID] = (
182+
credentials.get_account_id if credentials else None
183+
)
184+
179185
# Client context params for s3 conflict with the available settings
180186
# in the `s3` parameter on the `Config` object. If the same parameter
181187
# is set in both places, the value in the `s3` parameter takes priority.

aiobotocore/credentials.py

+33-4
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,19 @@ async def call(self):
247247

248248

249249
class AioCredentials(Credentials):
250+
# Overrides for property accessors
251+
def get_account_id(self):
252+
return self.account_id
253+
254+
def get_access_key(self):
255+
return self.access_key
256+
257+
def get_secret_key(self):
258+
return self.secret_key
259+
260+
def get_token(self):
261+
return self.token
262+
250263
async def get_frozen_credentials(self):
251264
return ReadOnlyCredentials(
252265
self.access_key, self.secret_key, self.token, self.account_id
@@ -258,14 +271,30 @@ def __init__(self, *args, **kwargs):
258271
super().__init__(*args, **kwargs)
259272
self._refresh_lock = asyncio.Lock()
260273

274+
async def get_account_id(self):
275+
await self._refresh()
276+
return self._account_id
277+
278+
async def get_access_key(self):
279+
await self._refresh()
280+
return self._access_key
281+
282+
async def get_secret_key(self):
283+
await self._refresh()
284+
return self._secret_key
285+
286+
async def get_token(self):
287+
await self._refresh()
288+
return self._token
289+
261290
# Redeclaring the properties so it doesn't call refresh
262291
# Have to redeclare setter as we're overriding the getter
263292
@property
264293
def access_key(self):
265294
# TODO: this needs to be resolved
266295
raise NotImplementedError(
267296
"missing call to self._refresh. "
268-
"Use get_frozen_credentials instead"
297+
"Use get_frozen_credentials or get_access_key"
269298
)
270299
return self._access_key
271300

@@ -278,7 +307,7 @@ def secret_key(self):
278307
# TODO: this needs to be resolved
279308
raise NotImplementedError(
280309
"missing call to self._refresh. "
281-
"Use get_frozen_credentials instead"
310+
"Use get_frozen_credentials or get_secret_key instead"
282311
)
283312
return self._secret_key
284313

@@ -291,7 +320,7 @@ def token(self):
291320
# TODO: this needs to be resolved
292321
raise NotImplementedError(
293322
"missing call to self._refresh. "
294-
"Use get_frozen_credentials instead"
323+
"Use get_frozen_credentials or get_token instead"
295324
)
296325
return self._token
297326

@@ -304,7 +333,7 @@ def account_id(self):
304333
# TODO: this needs to be resolved
305334
raise NotImplementedError(
306335
"missing call to self._refresh. "
307-
"Use get_frozen_credentials instead"
336+
"Use get_frozen_credentials or get_account_id instead"
308337
)
309338
return self._account_id
310339

aiobotocore/regions.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from botocore.exceptions import EndpointProviderError
55
from botocore.regions import EndpointRulesetResolver
66

7+
from aiobotocore._helpers import resolve_awaitable
8+
79
LOG = logging.getLogger(__name__)
810

911

@@ -82,9 +84,11 @@ async def _get_provider_params(
8284
call_args=call_args,
8385
)
8486
if param_val is None and param_def.builtin is not None:
85-
param_val = self._resolve_param_as_builtin(
86-
builtin_name=param_def.builtin,
87-
builtins=customized_builtins,
87+
param_val = await resolve_awaitable(
88+
self._resolve_param_as_builtin(
89+
builtin_name=param_def.builtin,
90+
builtins=customized_builtins,
91+
)
8892
)
8993
if param_val is not None:
9094
provider_params[param_name] = param_val

0 commit comments

Comments
 (0)