From cc392e2792deb9041832d85658d68476b5437d03 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 13 Nov 2024 11:53:20 -0800 Subject: [PATCH] add async_delete_secret --- .../secret_managers/aws_secret_manager_v2.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/litellm/secret_managers/aws_secret_manager_v2.py b/litellm/secret_managers/aws_secret_manager_v2.py index 713190e21..1011e15b7 100644 --- a/litellm/secret_managers/aws_secret_manager_v2.py +++ b/litellm/secret_managers/aws_secret_manager_v2.py @@ -4,6 +4,7 @@ This is a file for the AWS Secret Manager Integration Handles Async Operations for: - Read Secret - Write Secret +- Delete Secret Relevant issue: https://github.com/BerriAI/litellm/issues/1883 @@ -137,6 +138,54 @@ class AWSSecretsManagerV2(BaseAWSLLM): except httpx.TimeoutException: raise ValueError("Timeout error occurred") + async def async_delete_secret( + self, + secret_name: str, + recovery_window_in_days: Optional[int] = 7, + optional_params: Optional[dict] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + ) -> dict: + """ + Async function to delete a secret from AWS Secrets Manager + + Args: + secret_name: Name of the secret to delete + recovery_window_in_days: Number of days before permanent deletion (default: 7) + optional_params: Additional AWS parameters + timeout: Request timeout + + Returns: + dict: Response from AWS Secrets Manager containing deletion details + """ + # Prepare the request data + data = { + "SecretId": secret_name, + "RecoveryWindowInDays": recovery_window_in_days, + } + + endpoint_url, headers, body = self._prepare_request( + action="DeleteSecret", + secret_name=secret_name, + optional_params=optional_params, + request_data=data, + ) + + async_client = get_async_httpx_client( + llm_provider=httpxSpecialProvider.SecretManager, + params={"timeout": timeout}, + ) + + try: + response = await async_client.post( + url=endpoint_url, headers=headers, data=body.decode("utf-8") + ) + response.raise_for_status() + return response.json() + except httpx.HTTPStatusError as err: + raise ValueError(f"HTTP error occurred: {err.response.text}") + except httpx.TimeoutException: + raise ValueError("Timeout error occurred") + def _prepare_request( self, action: str, # "GetSecretValue" or "PutSecretValue"