1+ """
2+ Defining the ImageDownloader class to manage the image fetching.
3+ """
4+
15# ===============================================================================
26# IMPORT STATEMENTS
37# ===============================================================================
@@ -42,11 +46,16 @@ def _request_image_via_url(self, url: str, filename: str) -> None:
4246 :param url: the image url
4347 :param filename: the image filename
4448 """
45- response = requests .get (url )
46- response .raise_for_status ()
47- with open (filename , 'wb' ) as file :
48- file .write (response .content )
49- logger .info (f'{ self .__class__ .__name__ } - File downloaded: { filename } ' )
49+ try :
50+ response = requests .get (url , timeout = 20 )
51+ response .raise_for_status ()
52+ with open (filename , 'wb' ) as file :
53+ file .write (response .content )
54+ logger .info ('%s - File downloaded: %s' , self .__class__ .__name__ , filename )
55+ except requests .exceptions .Timeout :
56+ logger .info ('%s - Image download timed out' , self .__class__ .__name__ )
57+ except requests .exceptions .RequestException as e :
58+ logger .info ('%s - Image download failed: %s' , self .__class__ .__name__ , e )
5059
5160 def fetch_image (self , page : Page , img_output : str ) -> None :
5261 """
@@ -68,26 +77,32 @@ def fetch_image(self, page: Page, img_output: str) -> None:
6877 except requests .exceptions .RequestException as e :
6978 self .failed_downloads .append (image_filename )
7079 logger .error (
71- f'{ self .__class__ .__name__ } - Failed to download file { image_filename } ' ,
80+ '%s - Failed to download file %s' ,
81+ self .__class__ .__name__ ,
82+ image_filename ,
7283 exc_info = True
7384 )
74- raise ImageFetchException ('Failed to download file %s.' , e )
85+ raise ImageFetchException (f 'Failed to download file { e } .' ) from e
7586 except (et .XMLSyntaxError , et .ParseError , IndexError , TypeError , ValueError ) as e :
7687 if image_filename is not None :
7788 self .failed_processing .append (image_filename )
7889 logger .error (
79- f'{ self .__class__ .__name__ } - Error parsing file { page } ' ,
90+ '%s - Error parsing file %s' ,
91+ self .__class__ .__name__ ,
92+ page ,
8093 exc_info = True
8194 )
82- raise ImageProcessException ('Error parsing file %s: %s' , e )
95+ raise ImageProcessException (f 'Error parsing file { e } ' ) from e
8396 except Exception as e :
8497 if image_filename is not None :
8598 self .failed_processing .append (image_filename )
8699 logger .error (
87- f'{ self .__class__ .__name__ } - An unexpected error occurred for file { page } ' ,
100+ '%s - An unexpected error occurred for file %s' ,
101+ self .__class__ .__name__ ,
102+ page ,
88103 exc_info = True
89104 )
90- raise Exception ( 'An unexpected error occurred for file %s: %s' , e )
105+ raise RuntimeError ( f 'An unexpected error occurred for file { image_filename } : { e } ' ) from e
91106
92107 def get_failed_downloads (self ) -> List [str ]:
93108 """
0 commit comments