Projet

Général

Profil

0001-maintenance-allow-a-custom-message-on-the-maintenanc.patch

Emmanuel Cazenave, 11 mai 2022 18:54

Télécharger (5,71 ko)

Voir les différences:

Subject: [PATCH] maintenance: allow a custom message on the maintenance page
 (#65143)

 hobo/maintenance/forms.py      | 6 ++++++
 hobo/maintenance/views.py      | 8 ++++++++
 hobo/middleware/maintenance.py | 4 +++-
 tests/test_maintenance.py      | 5 +++++
 4 files changed, 22 insertions(+), 1 deletion(-)
hobo/maintenance/forms.py
20 20

  
21 21
class MaintenanceForm(forms.Form):
22 22
    maintenance_page = forms.BooleanField(required=False, label=_('Enable maintenance page'))
23
    maintenance_page_message = forms.CharField(
24
        required=False,
25
        widget=forms.Textarea,
26
        label=_('Maintenance page message'),
27
        help_text=_('The default value is: "The site is under maintenance."'),
28
    )
23 29
    maintenance_pass_trough_header = forms.CharField(
24 30
        required=False, label=_('Maintenance HTTP header pass through')
25 31
    )
hobo/maintenance/views.py
33 33
    def maintenance_page_variable(self):
34 34
        return get_setting_variable('MAINTENANCE_PAGE')
35 35

  
36
    @cached_property
37
    def maintenance_page_message_variable(self):
38
        return get_setting_variable('MAINTENANCE_PAGE_MESSAGE')
39

  
36 40
    @cached_property
37 41
    def maintenance_pass_trough_header_variable(self):
38 42
        return get_setting_variable('MAINTENANCE_PASS_THROUGH_HEADER')
......
44 48
    def get_initial(self):
45 49
        initial = super().get_initial()
46 50
        initial['maintenance_page'] = bool(self.maintenance_page_variable.json)
51
        initial['maintenance_page_message'] = self.maintenance_page_message_variable.value
47 52
        initial['maintenance_pass_trough_header'] = self.maintenance_pass_trough_header_variable.value
48 53
        initial['disable_cron'] = bool(self.tenant_disable_cron_jobs_variable.json)
49 54
        return initial
......
51 56
    def form_valid(self, form):
52 57
        self.maintenance_page_variable.json = form.cleaned_data['maintenance_page']
53 58
        self.maintenance_page_variable.save()
59
        self.maintenance_page_message_variable.value = form.cleaned_data['maintenance_page_message']
60
        self.maintenance_page_message_variable.save()
61

  
54 62
        self.maintenance_pass_trough_header_variable.value = form.cleaned_data[
55 63
            'maintenance_pass_trough_header'
56 64
        ]
hobo/middleware/maintenance.py
38 38
    def __call__(self, request):
39 39
        maintenance_mode = getattr(settings, 'MAINTENANCE_PAGE', None)
40 40
        if maintenance_mode and not pass_through(request):
41
            maintenance_msg = _('The site is under maintenance')
41
            maintenance_msg = getattr(settings, 'MAINTENANCE_PAGE_MESSAGE', '')
42
            if not maintenance_msg:
43
                maintenance_msg = _('The site is under maintenance.')
42 44
            context = {'maintenance_msg': maintenance_msg}
43 45
            return TemplateResponse(
44 46
                request, 'hobo/maintenance/maintenance_page.html', context=context, status=503
tests/test_maintenance.py
27 27

  
28 28
def test_manage(app, admin_user, settings):
29 29
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').count() == 0
30
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_MESSAGE').count() == 0
30 31
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').count() == 0
31 32
    assert Variable.objects.filter(name='TENANT_DISABLE_CRON_JOBS').count() == 0
32 33
    assert not getattr(settings, 'MAINTENANCE_PASS_THROUGH_IPS', [])
......
35 36
    resp = app.get('/maintenance/')
36 37
    assert 'No IP addresses configured' in resp.text
37 38
    resp.form.set('maintenance_page', True)
39
    resp.form.set('maintenance_page_message', 'Foo')
38 40
    resp.form.set('maintenance_pass_trough_header', 'X-Entrouvert')
39 41
    resp.form.set('disable_cron', True)
40 42
    resp = resp.form.submit().follow()
41 43
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').get().value == 'true'
44
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE_MESSAGE').get().value == 'Foo'
42 45
    assert (
43 46
        Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').get().value == 'X-Entrouvert'
44 47
    )
45 48
    assert Variable.objects.filter(name='SETTING_TENANT_DISABLE_CRON_JOBS').get().value == 'true'
46 49

  
47 50
    resp.form.set('maintenance_page', False)
51
    resp.form.set('maintenance_page_message', '')
48 52
    resp.form.set('maintenance_pass_trough_header', '')
49 53
    resp.form.set('disable_cron', False)
50 54
    resp = resp.form.submit().follow()
51 55
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').get().value == 'false'
56
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE_MESSAGE').get().value == ''
52 57
    assert Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').get().value == ''
53 58
    assert Variable.objects.filter(name='SETTING_TENANT_DISABLE_CRON_JOBS').get().value == 'false'
54 59

  
55
-