powertools-lambda-python icon indicating copy to clipboard operation
powertools-lambda-python copied to clipboard

Static typing: overloads for SecretsProvider.get()

Open rtandy opened this issue 7 months ago • 2 comments

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

rtandy avatar Jun 25 '24 17:06 rtandy