44import io
55import re
66import struct
7+ import traceback
78from datetime import timedelta
89from logging import getLogger
910from time import time
@@ -39,8 +40,8 @@ def __init__(self, settings: BaseSettings) -> None:
3940 # Upper bound on how many keys the per-spider-close cleanup sweeps (best-effort; `close_spider`).
4041 self ._expiration_max_items : int = settings .getint ('APIFY_HTTPCACHE_EXPIRATION_MAX_ITEMS' , 100 )
4142 self ._expiration_secs : int = settings .getint ('HTTPCACHE_EXPIRATION_SECS' )
42- # Caps how long each coroutine run on the background event loop may take; defaults to 60 seconds.
4343 self ._async_thread_timeout = timedelta (seconds = settings .getint ('APIFY_ASYNC_THREAD_TIMEOUT_SECS' , 60 ))
44+ """Caps how long each coroutine run on the background event loop may take; defaults to 60 seconds."""
4445 self ._spider : Spider | None = None
4546 self ._kvs : KeyValueStore | None = None
4647 self ._fingerprinter : RequestFingerprinterProtocol | None = None
@@ -67,7 +68,11 @@ async def open_kvs() -> KeyValueStore:
6768 logger .debug ("Starting background thread for cache storage's event loop" )
6869 self ._async_thread = AsyncThread (default_timeout = self ._async_thread_timeout )
6970 logger .debug (f"Opening cache storage's { kvs_name !r} key value store" )
70- self ._kvs = self ._async_thread .run_coro (open_kvs ())
71+ try :
72+ self ._kvs = self ._async_thread .run_coro (open_kvs ())
73+ except Exception :
74+ traceback .print_exc ()
75+ raise
7176
7277 def close_spider (self , _ : Spider , current_time : int | None = None ) -> None :
7378 """Close the cache storage for a spider."""
@@ -106,7 +111,11 @@ async def expire_kvs() -> None:
106111 else :
107112 logger .debug (f'Valid cache item { item .key } ' )
108113
109- self ._async_thread .run_coro (expire_kvs ())
114+ try :
115+ self ._async_thread .run_coro (expire_kvs ())
116+ except Exception :
117+ traceback .print_exc ()
118+ raise
110119 finally :
111120 logger .debug ('Closing cache storage' )
112121 try :
@@ -128,7 +137,11 @@ def retrieve_response(self, _: Spider, request: Request, current_time: int | Non
128137 raise ValueError ('Request fingerprinter not initialized' )
129138
130139 key = self ._fingerprinter .fingerprint (request ).hex ()
131- value = self ._async_thread .run_coro (self ._kvs .get_value (key ))
140+ try :
141+ value = self ._async_thread .run_coro (self ._kvs .get_value (key ))
142+ except Exception :
143+ traceback .print_exc ()
144+ raise
132145
133146 if value is None :
134147 logger .debug ('Cache miss' , extra = {'request' : request })
@@ -175,7 +188,11 @@ def store_response(self, _: Spider, request: Request, response: Response) -> Non
175188 'body' : response .body ,
176189 }
177190 value = to_gzip (data )
178- self ._async_thread .run_coro (self ._kvs .set_value (key , value ))
191+ try :
192+ self ._async_thread .run_coro (self ._kvs .set_value (key , value ))
193+ except Exception :
194+ traceback .print_exc ()
195+ raise
179196
180197
181198def to_gzip (data : dict , mtime : int | None = None ) -> bytes :
0 commit comments