# 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