author | Daniel Hans <Daniel.M.Hans@gmail.com> |
Fri, 30 Oct 2009 22:24:34 +0100 | |
changeset 3069 | 1b9c554ca96d |
parent 2906 | 6fb53ed7aff4 |
permissions | -rw-r--r-- |
2902
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
2 |
# |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2009 the Melange authors. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
4 |
# |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
8 |
# |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
10 |
# |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
16 |
|
2905
378833eb5a95
Fix copy/paste fail in maintenance middleware docstring
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2902
diff
changeset
|
17 |
"""Middleware to handle maintenance mode. |
2902
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
18 |
""" |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
19 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
20 |
__authors__ = [ |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
21 |
'"Sverre Rabbelier" <sverre@rabbelier.nl>', |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
22 |
] |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
23 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
24 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
25 |
from google.appengine.runtime.apiproxy_errors import CapabilityDisabledError |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
26 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
27 |
from django import http |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
28 |
from django.utils.translation import ugettext |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
29 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
30 |
from soc.views.helper import responses |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
31 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
32 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
33 |
DEF_DOWN_FOR_MAINTENANCE_MSG = ugettext("Down for maintenance") |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
34 |
DEF_IN_UNEXPECTED_MAINTENANCE_MSG = ugettext( |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
35 |
"Down for unexpected maintenance.") |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
36 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
37 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
38 |
class MaintenanceMiddleware(object): |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
39 |
"""Middleware to handle maintenance mode. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
40 |
""" |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
41 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
42 |
def maintenance(self, request): |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
43 |
"""Returns a 'down for maintenance' view. |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
44 |
""" |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
45 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
46 |
context = responses.getUniversalContext(request) |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
47 |
context['page_name'] = ugettext('Maintenance') |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
48 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
49 |
notice = context.pop('site_notice') |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
50 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
51 |
if not notice: |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
52 |
context['body_content'] = DEF_IN_UNEXPECTED_MAINTENANCE_MSG |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
53 |
else: |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
54 |
context['body_content'] = notice |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
55 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
56 |
context['header_title'] = DEF_DOWN_FOR_MAINTENANCE_MSG |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
57 |
context['sidebar_menu_items'] = [ |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
58 |
{'heading': DEF_DOWN_FOR_MAINTENANCE_MSG, |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
59 |
'group': ''}, |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
60 |
] |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
61 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
62 |
template = 'soc/base.html' |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
63 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
64 |
return responses.respond(request, template, context=context) |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
65 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
66 |
def process_request(self, request): |
2906
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
67 |
"""Called when a request is made. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
68 |
|
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
69 |
See the Django middleware documentation for an explanation of |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
70 |
the method signature. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
71 |
""" |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
72 |
|
2902
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
73 |
context = responses.getUniversalContext(request) |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
74 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
75 |
if not context['is_admin'] and context['in_maintenance']: |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
76 |
return self.maintenance(request) |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
77 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
78 |
def process_exception(self, request, exception): |
2906
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
79 |
"""Called when an uncaught exception is raised. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
80 |
|
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
81 |
See the Django middleware documentation for an explanation of |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
82 |
the method signature. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
83 |
""" |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2905
diff
changeset
|
84 |
|
2902
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
85 |
if isinstance(exception, CapabilityDisabledError): |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
86 |
# assume the site is in maintenance if we get CDE |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
87 |
return maintenance(request) |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
88 |
|
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
89 |
# let the exception handling middleware handle it |
23e00d707255
Add MaintenanceMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
90 |
return None |