99from esak .session import Session as Esak
1010from esak .sqlite_cache import SqliteCache
1111from natsort import humansorted , ns
12+ from requests .exceptions import ConnectionError , HTTPError # noqa: A004
1213from rich .prompt import Confirm , Prompt
1314
1415from perdoo import get_cache_root
@@ -59,10 +60,13 @@ def _search_series(self, name: str | None, volume: int | None, year: int | None)
5960 return self ._search_series (name = name , volume = volume , year = None )
6061 if Confirm .ask ("Search Again" , console = CONSOLE ):
6162 return self ._search_series (name = None , volume = None , year = None )
62- return None
63- except ApiError :
64- LOGGER .exception ("" )
65- return None
63+ except ConnectionError as err :
64+ LOGGER .error (err )
65+ except HTTPError as err :
66+ LOGGER .error (err )
67+ except ApiError as err :
68+ LOGGER .error (err )
69+ return None
6670
6771 def fetch_series (self , search : SeriesSearch ) -> Series | None :
6872 series_id = search .marvel or self ._search_series (
@@ -74,9 +78,18 @@ def fetch_series(self, search: SeriesSearch) -> Series | None:
7478 series = self .session .series (_id = series_id )
7579 search .marvel = series_id
7680 return series
77- except ApiError :
78- LOGGER .exception ("" )
81+ except ConnectionError as err :
82+ LOGGER .error (err )
83+ return None
84+ except HTTPError as err :
85+ LOGGER .error (err )
7986 return None
87+ except ApiError as err :
88+ LOGGER .error (err )
89+ if search .marvel :
90+ search .marvel = None
91+ return self .fetch_series (search = search )
92+ return None
8093
8194 def _search_issue (self , series_id : int , number : str | None ) -> int | None :
8295 try :
@@ -108,10 +121,13 @@ def _search_issue(self, series_id: int, number: str | None) -> int | None:
108121 if number :
109122 LOGGER .info ("Searching again without the IssueNumber" )
110123 return self ._search_issue (series_id = series_id , number = None )
111- return None
112- except ApiError :
113- LOGGER .exception ("" )
114- return None
124+ except ConnectionError as err :
125+ LOGGER .error (err )
126+ except HTTPError as err :
127+ LOGGER .error (err )
128+ except ApiError as err :
129+ LOGGER .error (err )
130+ return None
115131
116132 def fetch_issue (self , series_id : int , search : IssueSearch ) -> Comic | None :
117133 issue_id = search .marvel or self ._search_issue (series_id = series_id , number = search .number )
@@ -121,9 +137,18 @@ def fetch_issue(self, series_id: int, search: IssueSearch) -> Comic | None:
121137 issue = self .session .comic (_id = issue_id )
122138 search .marvel = issue_id
123139 return issue
124- except ApiError :
125- LOGGER .exception ("" )
140+ except ConnectionError as err :
141+ LOGGER .error (err )
142+ return None
143+ except HTTPError as err :
144+ LOGGER .error (err )
126145 return None
146+ except ApiError as err :
147+ LOGGER .error (err )
148+ if search .marvel :
149+ search .marvel = None
150+ return self .fetch_issue (series_id = series_id , search = search )
151+ return None
127152
128153 def _process_metron_info (self , series : Series , issue : Comic ) -> MetronInfo | None :
129154 from perdoo .metadata .metron_info import (
0 commit comments