# SPDX-License-Identifier: AGPL-3.0-or-later # lint: pylint """MongoDB engine (Offline) """ import re from pymongo import MongoClient # pylint: disable=import-error engine_type = 'offline' # mongodb connection variables host = '127.0.0.1' port = 27017 username = '' password = '' database = None collection = None key = None # engine specific variables paging = True results_per_page = 20 exact_match_only = False result_template = 'key-value.html' _client = None def init(_): connect() def connect(): global _client # pylint: disable=global-statement kwargs = {'port': port} if username: kwargs['username'] = username if password: kwargs['password'] = password _client = MongoClient(host, **kwargs)[database][collection] def search(query, params): results = [] if exact_match_only: q = {'$eq': query} else: _re = re.compile('.*{0}.*'.format(re.escape(query)), re.I | re.M) q = {'$regex': _re} query = _client.find({key: q}).skip((params['pageno'] - 1) * results_per_page).limit(results_per_page) results.append({'number_of_results': query.count()}) for r in query: del r['_id'] r = {str(k): str(v) for k, v in r.items()} r['template'] = result_template results.append(r) return results