diff --git a/ddgs/base.py b/ddgs/base.py index c8a1027..7d3887e 100644 --- a/ddgs/base.py +++ b/ddgs/base.py @@ -9,6 +9,7 @@ from lxml import html from lxml.etree import HTMLParser as LHTMLParser +from .exceptions import RatelimitException from .http_client import HttpClient from .results import BooksResult, ImagesResult, NewsResult, TextResult, VideosResult @@ -65,6 +66,9 @@ def build_payload( def request(self, *args: Any, **kwargs: Any) -> Any: # noqa: ANN401 """Make a request to the search engine.""" resp = self.http_client.request(*args, **kwargs) + if resp.status_code == 429: + msg = "Rate limit exceeded." + raise RatelimitException(msg) if resp.status_code == 200: return resp.text return None diff --git a/ddgs/ddgs.py b/ddgs/ddgs.py index 004c7da..c4cb3df 100644 --- a/ddgs/ddgs.py +++ b/ddgs/ddgs.py @@ -10,7 +10,7 @@ from .base import BaseSearchEngine from .engines import ENGINES -from .exceptions import DDGSException, TimeoutException +from .exceptions import DDGSException, RatelimitException, TimeoutException from .http_client import HttpClient from .results import ResultsAggregator from .similarity import SimpleFilterRanker @@ -202,6 +202,8 @@ def _search_sync( # noqa: C901 if r := f.result(): results_aggregator.extend(r) seen_providers.add(f_engine.provider) + except RatelimitException: + raise except Exception as ex: # noqa: BLE001 err = ex logger.info("Error in engine %s: %r", f_engine.name, ex)