sqlite.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. SQLite database (Offline)
  4. """
  5. # pylint: disable=missing-function-docstring
  6. import sqlite3
  7. engine_type = 'offline'
  8. database = ""
  9. query_str = ""
  10. limit = 10
  11. paging = True
  12. result_template = 'key-value.html'
  13. def init(engine_settings):
  14. if 'query_str' not in engine_settings:
  15. raise ValueError('query_str cannot be empty')
  16. if not engine_settings['query_str'].lower().startswith('select '):
  17. raise ValueError('only SELECT query is supported')
  18. def search(query, params):
  19. query_params = {'query': query}
  20. query_to_run = query_str + ' LIMIT {0} OFFSET {1}'.format(limit, (params['pageno'] - 1) * limit)
  21. connection = sqlite3.connect(database)
  22. cur = connection.cursor()
  23. cur.execute(query_to_run, query_params)
  24. results = _fetch_results(cur)
  25. cur.close()
  26. connection.close()
  27. return results
  28. def _fetch_results(cur):
  29. results = []
  30. titles = [name for (name, _, _, _, _, _, _) in cur.description]
  31. res = cur.fetchone()
  32. while res:
  33. result = dict(zip(titles, map(str, res)))
  34. result['template'] = result_template
  35. results.append(result)
  36. res = cur.fetchone()
  37. return results