diff --git a/src/openforms/config/service.py b/src/openforms/config/service.py deleted file mode 100644 index baacd7281a..0000000000 --- a/src/openforms/config/service.py +++ /dev/null @@ -1,40 +0,0 @@ -from dataclasses import dataclass - -from django.utils.translation import gettext_lazy as _ - -from openforms.contrib.brk.checks import BRKValidatorCheck -from openforms.forms.models.form import Form -from openforms.plugins.exceptions import InvalidPluginConfiguration -from openforms.typing import StrOrPromise - - -@dataclass -class BrokenConfiguration: - config_name: StrOrPromise - exception_message: str | None - - -def check_brk_config_for_addressNL() -> str | None: - live_forms = Form.objects.live() - - if any(form.has_component("addressNL") for form in live_forms): - try: - BRKValidatorCheck.check_config() - except InvalidPluginConfiguration as e: - return e.args[0] - - return - - -def collect_broken_configurations() -> list[BrokenConfiguration]: - check_brk_configuration = check_brk_config_for_addressNL() - - broken_configurations = [] - if check_brk_configuration: - broken_configurations.append( - BrokenConfiguration( - config_name=_("BRK Client"), exception_message=check_brk_configuration - ) - ) - - return broken_configurations diff --git a/src/openforms/contrib/brk/service.py b/src/openforms/contrib/brk/service.py new file mode 100644 index 0000000000..2d1d49056f --- /dev/null +++ b/src/openforms/contrib/brk/service.py @@ -0,0 +1,16 @@ +from openforms.forms.models.form import Form +from openforms.plugins.exceptions import InvalidPluginConfiguration + +from .checks import BRKValidatorCheck + + +def check_brk_config_for_addressNL() -> str: + live_forms = Form.objects.live() + + if any(form.has_component("addressNL") for form in live_forms): + try: + BRKValidatorCheck.check_config() + except InvalidPluginConfiguration as e: + return e.args[0] + + return "" diff --git a/src/openforms/logging/service.py b/src/openforms/emails/digest.py similarity index 87% rename from src/openforms/logging/service.py rename to src/openforms/emails/digest.py index d950abfa79..f67af0549d 100644 --- a/src/openforms/logging/service.py +++ b/src/openforms/emails/digest.py @@ -6,13 +6,16 @@ from django.contrib.contenttypes.models import ContentType from django.urls import reverse +from django.utils.translation import gettext_lazy as _ from django_yubin.models import Message from furl import furl +from openforms.contrib.brk.service import check_brk_config_for_addressNL from openforms.logging.models import TimelineLogProxy from openforms.submissions.models.submission import Submission from openforms.submissions.utils import get_filtered_submission_admin_url +from openforms.typing import StrOrPromise @dataclass @@ -60,6 +63,12 @@ def failed_submissions_counter(self) -> int: return len(self.submission_ids) +@dataclass +class BrokenConfiguration: + config_name: StrOrPromise + exception_message: str + + def collect_failed_emails(since: datetime) -> Iterable[FailedEmail]: logs = TimelineLogProxy.objects.filter( timestamp__gt=since, @@ -156,3 +165,17 @@ def collect_failed_prefill_plugins(since: datetime) -> list[FailedPrefill]: ) return failed_prefill_plugins + + +def collect_broken_configurations() -> list[BrokenConfiguration]: + check_brk_configuration = check_brk_config_for_addressNL() + + broken_configurations = [] + if check_brk_configuration: + broken_configurations.append( + BrokenConfiguration( + config_name=_("BRK Client"), exception_message=check_brk_configuration + ) + ) + + return broken_configurations diff --git a/src/openforms/emails/tasks.py b/src/openforms/emails/tasks.py index 21875528e1..2963fad61c 100644 --- a/src/openforms/emails/tasks.py +++ b/src/openforms/emails/tasks.py @@ -8,13 +8,13 @@ from openforms.celery import app from openforms.config.models import GlobalConfiguration -from openforms.config.service import collect_broken_configurations -from openforms.logging.service import ( + +from .digest import ( + collect_broken_configurations, collect_failed_emails, collect_failed_prefill_plugins, collect_failed_registrations, ) - from .utils import send_mail_html diff --git a/src/openforms/emails/templates/emails/admin_digest.html b/src/openforms/emails/templates/emails/admin_digest.html index 061cc609d1..474eee6f89 100644 --- a/src/openforms/emails/templates/emails/admin_digest.html +++ b/src/openforms/emails/templates/emails/admin_digest.html @@ -65,12 +65,12 @@ <h5>{% trans "Prefill plugins" %}</h5> {% endif %} {% if broken_configurations %} - <h5>{% trans "Broken configuration" %}</h5> + <h5>{% trans "Configuration problems" %}</h5> <ul> {% for config in broken_configurations %} <li> {% blocktranslate with name=config.config_name message=config.exception_message trimmed %} - Configuration for '{{ name }}' is broken (<i>{{ message }}</i>).<br/> + The configuration for '{{ name }}' is invalid (<i>{{ message }}</i>).<br/> Components or plugins which make use of this will not work properly. {% endblocktranslate %} </li> diff --git a/src/openforms/emails/tests/test_tasks.py b/src/openforms/emails/tests/test_tasks.py index be776d1a20..fb10c93023 100644 --- a/src/openforms/emails/tests/test_tasks.py +++ b/src/openforms/emails/tests/test_tasks.py @@ -361,12 +361,12 @@ def test_broken_brk_configuration_for_addressNL_is_sent(self): self.assertEqual(sent_email.recipients(), ["user@example.com"]) self.assertIn( _( - "Configuration for 'BRK Client' is broken (KVK endpoint is not configured)." + "The configuration for 'BRK Client' is invalid (KVK endpoint is not configured)." ), sent_email.body, ) - def test_no_email_sent_when_brk_congiguration_is_valid_for_other_component(self): + def test_no_email_sent_when_brk_congiguration_is_invalid_but_unused(self): form = FormFactory.create() form_definition = FormDefinitionFactory.create( configuration={ @@ -390,6 +390,10 @@ def test_no_email_sent_when_brk_congiguration_is_valid_for_other_component(self) recipients_email_digest=["user@example.com"] ), ), + patch( + "openforms.contrib.brk.client.BRKConfig.get_solo", + return_value=BRKConfig(service=None), + ), ): send_email_digest()