Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ddgs/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion ddgs/ddgs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down