author | Daniel Hans <Daniel.M.Hans@gmail.com> |
Sat, 24 Oct 2009 22:45:29 +0200 | |
changeset 3033 | 8a18ac7ca909 |
parent 2906 | 6fb53ed7aff4 |
permissions | -rw-r--r-- |
2901
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
2 |
# |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2009 the Melange authors. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
4 |
# |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
8 |
# |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
10 |
# |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
16 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
17 |
"""Middleware to handle exceptions. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
18 |
""" |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
19 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
20 |
__authors__ = [ |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
21 |
'"Sverre Rabbelier" <sverre@rabbelier.nl>', |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
22 |
] |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
23 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
24 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
25 |
import logging |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
26 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
27 |
from google.appengine.runtime import DeadlineExceededError |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
28 |
from google.appengine.runtime.apiproxy_errors import CapabilityDisabledError |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
29 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
30 |
from django import http |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
31 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
32 |
from soc.views.helper import responses |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
33 |
from soc.views import out_of_band |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
34 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
35 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
36 |
class ExceptionHandlerMiddleware(object): |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
37 |
"""Middleware class to handle exceptions.. |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
38 |
""" |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
39 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
40 |
def process_exception(self, request, exception): |
2906
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
41 |
"""Called when an uncaught exception is raised. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
42 |
|
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
43 |
See the Django middleware documentation for an explanation of |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
44 |
the method signature. |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
45 |
""" |
6fb53ed7aff4
Add docstring to middleware hooks
Sverre Rabbelier <srabbelier@gmail.com>
parents:
2901
diff
changeset
|
46 |
|
2901
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
47 |
template = None |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
48 |
context = responses.getUniversalContext(request) |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
49 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
50 |
if isinstance(exception, DeadlineExceededError): |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
51 |
template = 'soc/deadline_exceeded.html' |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
52 |
if isinstance(exception, MemoryError): |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
53 |
template = 'soc/memory_error.html' |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
54 |
if isinstance(exception, AssertionError): |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
55 |
template = 'soc/assertion_error.html' |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
56 |
if isinstance(exception, out_of_band.Error): |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
57 |
return responses.errorResponse(error, request) |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
58 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
59 |
if template: |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
60 |
logging.exception(exception) |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
61 |
return responses.respond(request, template, context=context) |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
62 |
|
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
63 |
# let Django handle it |
6c8ba67289a6
Add ExceptionHandlerMiddleware
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
64 |
return None |