Coverage for .venv/lib/python3.13/site-packages/litellm/proxy/spend_tracking/cold_storage_handler.py: 42%
20 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
1"""
2This module is responsible for handling Getting/Setting the proxy server request from cold storage.
4It allows fetching a dict of the proxy server request from s3 or GCS bucket.
5"""
7from typing import Final
9import litellm
10from litellm import _custom_logger_compatible_callbacks_literal
11from litellm.integrations.custom_logger import CustomLogger
14class ColdStorageHandler:
15 """
16 This class is responsible for handling Getting/Setting the proxy server request from cold storage.
18 It allows fetching a dict of the proxy server request from s3 or GCS bucket.
20 The cold storage logger can be injected for testing; when omitted it is
21 resolved from the configured ``litellm.cold_storage_custom_logger``.
22 """
24 def __init__(self, cold_storage_logger: CustomLogger | None = None):
25 self._injected_cold_storage_logger = cold_storage_logger
27 async def get_proxy_server_request_from_cold_storage_with_object_key(
28 self,
29 object_key: str,
30 ) -> dict | None:
31 """
32 Get the proxy server request from cold storage using the object key directly.
34 Args:
35 object_key: The S3/GCS object key to retrieve
37 Returns:
38 Optional[dict]: The proxy server request dict or None if not found
39 """
40 custom_logger: Final = self._injected_cold_storage_logger or self._resolve_cold_storage_logger()
41 if custom_logger is None:
42 return None
44 return await custom_logger.get_proxy_server_request_from_cold_storage_with_object_key(
45 object_key=object_key,
46 )
48 def _resolve_cold_storage_logger(self) -> CustomLogger | None:
49 custom_logger_name: Final = self._select_custom_logger_for_cold_storage()
50 if custom_logger_name is None:
51 return None
52 return litellm.logging_callback_manager.get_active_custom_logger_for_callback_name(custom_logger_name)
54 def _select_custom_logger_for_cold_storage(
55 self,
56 ) -> _custom_logger_compatible_callbacks_literal | None:
57 cold_storage_custom_logger: Final[_custom_logger_compatible_callbacks_literal | None] = (
58 litellm.cold_storage_custom_logger
59 )
61 return cold_storage_custom_logger