@@ -0,0 +1,61 @@
1+# SPDX-License-Identifier: AGPL-3.0-or-later
2+"""
3+ MongoDB engine (Offline)
4+"""
5+
6+# pylint: disable=missing-function-docstring
7+# pylint: disable=import-error
8+
9+import re
10+from pymongo import MongoClient
11+
12+engine_type = 'offline'
13+paging = True
14+# mongodb connection variables
15+host = '127.0.0.1'
16+port = 27017
17+username = ''
18+password = ''
19+database = None
20+collection = None
21+key = None
22+# engine specific variables
23+results_per_page = 20
24+exact_match_only = False
25+result_template = 'key-value.html'
26+
27+_client = None
28+
29+
30+def init(_):
31+ connect()
32+
33+
34+def connect():
35+ global _client
36+ kwargs = {
37+ 'port': port,
38+ }
39+ if username:
40+ kwargs['username'] = username
41+ if password:
42+ kwargs['password'] = password
43+ _client = MongoClient(host, **kwargs)[database][collection]
44+
45+
46+def search(query, params):
47+ ret = []
48+ if exact_match_only:
49+ q = {'$eq': query}
50+ else:
51+ q = {'$regex': re.compile('.*{0}.*'.format(re.escape(query)), re.I | re.M)}
52+ results = _client.find({key: q})\
53+ .skip((params['pageno']-1)*results_per_page)\
54+ .limit(results_per_page)
55+ ret.append({'number_of_results': results.count()})
56+ for r in results:
57+ del(r['_id'])
58+ r = {str(k):str(v) for k,v in r.items()}
59+ r['template'] = result_template
60+ ret.append(r)
61+ return ret