From ed3eb176d4dd81cac286beb7b2f88ee94290a6ea Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Mon, 24 May 2021 01:09:52 +0200 Subject: [PATCH] Citadel: Use new search backend active check And more important, do not access the DB during app initialization --- citadel/indico_citadel/plugin.py | 7 +------ citadel/indico_citadel/search.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/citadel/indico_citadel/plugin.py b/citadel/indico_citadel/plugin.py index e025459..bb8a884 100644 --- a/citadel/indico_citadel/plugin.py +++ b/citadel/indico_citadel/plugin.py @@ -5,7 +5,6 @@ # them and/or modify them under the terms of the MIT License; # see the LICENSE file for more details. -from flask import current_app from wtforms.fields.core import BooleanField from wtforms.fields.html5 import IntegerField, URLField from wtforms.validators import URL, DataRequired, NumberRange @@ -85,13 +84,9 @@ class CitadelPlugin(LiveSyncPluginBase): self.connect(signals.get_search_providers, self.get_search_providers) self.connect(signals.plugin.cli, self._extend_indico_cli) - def _is_configured(self): - return bool(self.settings.get('search_backend_url')) and bool(self.settings.get('search_backend_token')) - def get_search_providers(self, sender, **kwargs): from indico_citadel.search import CitadelProvider - if current_app.config['TESTING'] or (not self.settings.get('disable_search') and self._is_configured()): - return CitadelProvider + return CitadelProvider def _extend_indico_cli(self, sender, **kwargs): return cli diff --git a/citadel/indico_citadel/search.py b/citadel/indico_citadel/search.py index 5f6d619..23e2c3b 100644 --- a/citadel/indico_citadel/search.py +++ b/citadel/indico_citadel/search.py @@ -9,10 +9,12 @@ import base64 import zlib import requests +from flask import current_app from requests.exceptions import RequestException from werkzeug.urls import url_join from indico.modules.search.base import IndicoSearchProvider, SearchOption +from indico.util.decorators import classproperty from indico_citadel import _ from indico_citadel.result_schemas import CitadelResultSchema @@ -28,6 +30,17 @@ class CitadelProvider(IndicoSearchProvider): self.backend_url = CitadelPlugin.settings.get('search_backend_url') self.records_url = url_join(self.backend_url, 'api/records/') + @classproperty + @classmethod + def active(cls): + from indico_citadel.plugin import CitadelPlugin + if current_app.config['TESTING']: + return True + elif CitadelPlugin.settings.get('disable_search'): + return False + return bool(CitadelPlugin.settings.get('search_backend_url') and + CitadelPlugin.settings.get('search_backend_token')) + def search(self, query, user=None, page=1, object_types=(), **params): # https://cern-search.docs.cern.ch/usage/operations/#query-documents # this token is used by the backend to authenticate and also to filter