__main__.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. import sys
  3. import os
  4. import argparse
  5. import searx.search
  6. import searx.search.checker
  7. from searx.search import processors
  8. from searx.engines import engine_shortcuts
  9. if sys.stdout.isatty() and os.environ.get('TERM') not in ['dumb', 'unknown']:
  10. RESET_SEQ = "\033[0m"
  11. COLOR_SEQ = "\033[1;%dm"
  12. BOLD_SEQ = "\033[1m"
  13. BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = map(lambda i: COLOR_SEQ % (30 + i), range(8))
  14. else:
  15. RESET_SEQ = ""
  16. COLOR_SEQ = ""
  17. BOLD_SEQ = ""
  18. BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = "", "", "", "", "", "", "", ""
  19. def iter_processor(engine_name_list):
  20. if len(engine_name_list) > 0:
  21. for name in engine_name_list:
  22. name = engine_shortcuts.get(name, name)
  23. processor = processors.get(name)
  24. if processor is not None:
  25. yield name, processor
  26. else:
  27. print(BOLD_SEQ, 'Engine ', '%-30s' % name, RESET_SEQ, RED, ' Not found ', RESET_SEQ)
  28. else:
  29. for name, processor in searx.search.processors.items():
  30. yield name, processor
  31. def run(engine_name_list):
  32. searx.search.initialize()
  33. broken_urls = []
  34. for name, processor in iter_processor(engine_name_list):
  35. if sys.stdout.isatty():
  36. print(BOLD_SEQ, 'Engine ', '%-30s' % name, RESET_SEQ, WHITE, ' Checking', RESET_SEQ)
  37. checker = searx.search.checker.Checker(processor)
  38. checker.run()
  39. if checker.test_results.succesfull:
  40. print(BOLD_SEQ, 'Engine ', '%-30s' % name, RESET_SEQ, GREEN, ' OK', RESET_SEQ)
  41. else:
  42. errors = [test_name + ': ' + error for test_name, error in checker.test_results]
  43. print(BOLD_SEQ, 'Engine ', '%-30s' % name, RESET_SEQ, RED, ' Error ', str(errors), RESET_SEQ)
  44. broken_urls += checker.test_results.broken_urls
  45. for url in broken_urls:
  46. print('Error fetching', url)
  47. def main():
  48. parser = argparse.ArgumentParser(description='Check searx engines.')
  49. parser.add_argument('engine_name_list', metavar='engine name', type=str, nargs='*',
  50. help='engines name or shortcut list. Empty for all engines.')
  51. args = parser.parse_args()
  52. run(args.engine_name_list)
  53. if __name__ == '__main__':
  54. main()