online_url_search.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Processores for engine-type: ``online_url_search``
  4. """
  5. import re
  6. from .online import OnlineProcessor
  7. re_search_urls = {
  8. 'http': re.compile(r'https?:\/\/[^ ]*'),
  9. 'ftp': re.compile(r'ftps?:\/\/[^ ]*'),
  10. 'data:image': re.compile('data:image/[^; ]*;base64,[^ ]*'),
  11. }
  12. class OnlineUrlSearchProcessor(OnlineProcessor):
  13. """Processor class used by ``online_url_search`` engines."""
  14. engine_type = 'online_url_search'
  15. def get_params(self, search_query, engine_category):
  16. """Returns a set of *request params* or ``None`` if search query does not match
  17. to at least one of :py:obj:`re_search_urls`.
  18. """
  19. params = super().get_params(search_query, engine_category)
  20. if params is None:
  21. return None
  22. url_match = False
  23. search_urls = {}
  24. for k, v in re_search_urls.items():
  25. m = v.search(search_query.query)
  26. v = None
  27. if m:
  28. url_match = True
  29. v = m[0]
  30. search_urls[k] = v
  31. if not url_match:
  32. return None
  33. params['search_urls'] = search_urls
  34. return params