1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 ''' A view functions is simply a Python function that takes a Web request and
27 returns a Web response. This response can be the HTML contents of a Web page,
28 or a redirect, or the 404 and 500 error, or an XML document, or an image...
29 or anything.'''
30
31 import sys
32 import locale
33 import datetime
34 import traceback
35 import logging
36
37 from django.conf import settings
38 from django.core import template_loader
39 from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError, HttpResponseNotFound
40 from django.shortcuts import render_to_response
41 from django.template import RequestContext, Context
42 from django.views.defaults import page_not_found, server_error
43 from django.views import debug
44 from django.core.urlresolvers import reverse
45
46 from omeroweb.feedback.sendfeedback import SendFeedback
47 from omeroweb.feedback.forms import ErrorForm, CommentForm
48
49 logger = logging.getLogger(__name__)
50
51
53 return render_to_response("thanks.html",None)
54
56 error = None
57 form = ErrorForm(data=request.REQUEST.copy())
58 if form.is_valid():
59 error = request.REQUEST['error']
60 comment = None
61 if request.REQUEST.get('comment',None) is not None and request.REQUEST['comment'] != "":
62 comment = request.REQUEST['comment']
63 email = None
64 if request.REQUEST.get('email', None) is not None and request.REQUEST['email'] != "":
65 email = request.REQUEST['email']
66 try:
67 sf = SendFeedback()
68 sf.give_feedback(error, comment, email)
69 except:
70 logger.error('handler500: Feedback could not be sent')
71 logger.error(traceback.format_exc())
72 error = "Feedback could not been sent. Please contact administrator."
73 fileObj = open(("%s/error500-%s.html" % (settings.LOGDIR, datetime.datetime.now())),"w")
74 try:
75 try:
76 fileObj.write(request.REQUEST['error'])
77 except:
78 logger.error('handler500: Error could not be saved.')
79 logger.error(traceback.format_exc())
80 finally:
81 fileObj.close()
82
83 if request.is_ajax():
84 return HttpResponse("<h1>Thanks for your feedback</h1><p>You may need to refresh your browser to recover from the error</p>");
85 return HttpResponseRedirect(reverse("fthanks"))
86
87 context = {'form':form, 'error':error}
88 t = template_loader.get_template('500.html')
89 c = RequestContext(request, context)
90 return HttpResponse(t.render(c))
91
117
119 """
120 Custom 500 error handler.
121
122 Templates: `500.html`
123 Context: ErrorForm
124 """
125 form = ErrorForm(initial={'error':error500})
126 context = {'form':form}
127 t = template_loader.get_template('500.html')
128 c = RequestContext(request, context)
129 return HttpResponse(t.render(c))
130
131
132
133
135 """
136 Custom error handling.
137 Catches errors that are not handled elsewhere.
138 NB: This only gets used by Django if omero.web.debug False (production use)
139 If debug is True, Django returns it's own debug error page
140 """
141 logger.error('handler500: Server error')
142 as_string = '\n'.join(traceback.format_exception(*sys.exc_info()))
143 logger.error(as_string)
144
145 try:
146 request_repr = repr(request)
147 except:
148 request_repr = "Request repr() unavailable"
149
150 error500 = "%s\n\n%s" % (as_string, request_repr)
151
152
153 if request.is_ajax():
154 return HttpResponseServerError(error500)
155
156 return custom_server_error(request, error500)
157
159 logger.warning('Not Found: %s' % request.path,
160 extra={
161 'status_code': 404,
162 'request': request
163 })
164 if request.is_ajax():
165 msg = traceback.format_exception(*sys.exc_info())[-1]
166 return HttpResponseNotFound(msg)
167
168 return page_not_found(request, "404.html")
169
171 """
172 This is mostly used in an "object not found" situation,
173 So there is no feedback form - simply display "not found" message.
174 If the call was AJAX, we return the message in a 404 response.
175 Otherwise return an html page, with 404 response.
176 """
177 logger.warning('Object Not Found: %s' % request.path,
178 extra={
179 'status_code': 404,
180 'request': request
181 })
182
183 if request.is_ajax():
184 return HttpResponseNotFound(error)
185
186 context = {"error":error}
187 t = template_loader.get_template("error.html")
188 c = RequestContext(request, context)
189 return HttpResponseNotFound(t.render(c))
190