0001-maintenance-allow-a-custom-message-on-the-maintenanc.patch
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 |
- |