Nora Myer
10/26/2022, 4:20 PMKalise Richmond
10/26/2022, 4:30 PMRyan Peden
10/26/2022, 4:38 PMpydantic.SecretStr
like many of our blocks do. For example:
from prefect import flow, get_run_logger
from pydantic import SecretStr
@flow
def flow1():
secret = SecretStr("password")
flow2(secret)
@flow
def flow2(secret: SecretStr):
logger = get_run_logger()
<http://logger.info|logger.info>(f"secret: {secret}")
if __name__ == "__main__":
flow1()
As this example shows, the secret remains obscured in the flow run parameters UI (screenshot attached), and if you accidentally log a secret, it will be hidden there as well:
12:30:30.654 | INFO | prefect.engine - Created flow run 'quiet-boobook' for flow 'flow1'
12:30:30.826 | INFO | Flow run 'quiet-boobook' - Created subflow run 'crystal-sponge' for flow 'flow2'
12:30:30.856 | INFO | Flow run 'crystal-sponge' - secret: **********
12:30:30.877 | INFO | Flow run 'crystal-sponge' - Finished in state Completed()
12:30:30.891 | INFO | Flow run 'quiet-boobook' - Finished in state Completed('All states completed.')
Nora Myer
10/26/2022, 6:05 PM