models.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. import typing
  3. class EngineRef:
  4. """Reference by names to an engine and category"""
  5. __slots__ = 'name', 'category'
  6. def __init__(self, name: str, category: str):
  7. self.name = name
  8. self.category = category
  9. def __repr__(self):
  10. return "EngineRef({!r}, {!r})".format(self.name, self.category)
  11. def __eq__(self, other):
  12. return self.name == other.name and self.category == other.category
  13. def __hash__(self):
  14. return hash((self.name, self.category))
  15. class SearchQuery:
  16. """container for all the search parameters (query, language, etc...)"""
  17. __slots__ = (
  18. 'query',
  19. 'engineref_list',
  20. 'lang',
  21. 'safesearch',
  22. 'pageno',
  23. 'time_range',
  24. 'timeout_limit',
  25. 'external_bang',
  26. 'engine_data',
  27. )
  28. def __init__(
  29. self,
  30. query: str,
  31. engineref_list: typing.List[EngineRef],
  32. lang: str = 'all',
  33. safesearch: int = 0,
  34. pageno: int = 1,
  35. time_range: typing.Optional[str] = None,
  36. timeout_limit: typing.Optional[float] = None,
  37. external_bang: typing.Optional[str] = None,
  38. engine_data: typing.Optional[typing.Dict[str, str]] = None,
  39. ):
  40. self.query = query
  41. self.engineref_list = engineref_list
  42. self.lang = lang
  43. self.safesearch = safesearch
  44. self.pageno = pageno
  45. self.time_range = time_range
  46. self.timeout_limit = timeout_limit
  47. self.external_bang = external_bang
  48. self.engine_data = engine_data or {}
  49. @property
  50. def categories(self):
  51. return list(set(map(lambda engineref: engineref.category, self.engineref_list)))
  52. def __repr__(self):
  53. return "SearchQuery({!r}, {!r}, {!r}, {!r}, {!r}, {!r}, {!r}, {!r})".format(
  54. self.query,
  55. self.engineref_list,
  56. self.lang,
  57. self.safesearch,
  58. self.pageno,
  59. self.time_range,
  60. self.timeout_limit,
  61. self.external_bang,
  62. )
  63. def __eq__(self, other):
  64. return (
  65. self.query == other.query
  66. and self.engineref_list == other.engineref_list
  67. and self.lang == other.lang
  68. and self.safesearch == other.safesearch
  69. and self.pageno == other.pageno
  70. and self.time_range == other.time_range
  71. and self.timeout_limit == other.timeout_limit
  72. and self.external_bang == other.external_bang
  73. )
  74. def __hash__(self):
  75. return hash(
  76. (
  77. self.query,
  78. tuple(self.engineref_list),
  79. self.lang,
  80. self.safesearch,
  81. self.pageno,
  82. self.time_range,
  83. self.timeout_limit,
  84. self.external_bang,
  85. )
  86. )