powertools-lambda-python
powertools-lambda-python copied to clipboard
Static typing: overloads for SecretsProvider.get()
Static type checker used
mypy (project's standard)
AWS Lambda function runtime
3.11
Powertools for AWS Lambda (Python) version
latest (2.39.1)
Static type checker info
parameters.get_secret()
has overloads to vary its return type based on the transform
parameter. Would it be possible for BaseProvider.get()
to have the same overloads? For context, I am using SecretsProvider
so that I can bring my own boto3 client.
Also, looking at those existing overloads, are the binary
and auto
cases backwards? It has:
# ...
transform: Literal["binary"],
# ...
) -> Union[str, dict, bytes]: ...
# ...
transform: Literal["auto"],
# ...
) -> bytes: ...
I would have expected binary
would return bytes
, and auto
would return str | dict | bytes
?
Thank you for your work on Powertools!
Code snippet
from aws_lambda_powertools.utilities import parameters
import boto3
secret1 = parameters.get_secret('test_secret', transform='json')
reveal_type(secret1) # dict
client = boto3.client('secretsmanager')
provider = parameters.SecretsProvider(boto3_client=client)
secret2 = provider.get('test_secret', transform='json')
reveal_type(secret2) # str | dict | bytes | None; would like dict
reveal_type(parameters.get_secret('test_secret')) # str; OK
reveal_type(parameters.get_secret('test_secret', transform='json')) # dict; OK
reveal_type(parameters.get_secret('test_secret', transform='binary')) # str | dict | bytes; should be bytes?
reveal_type(parameters.get_secret('test_secret', transform='auto')) # bytes; should be str | dict | bytes?
Possible Solution
No response