Package omeroweb :: Package feedback :: Module views
[hide private]
[frames] | no frames]

Source Code for Module omeroweb.feedback.views

  1  #!/usr/bin/env python 
  2  #  
  3  #  
  4  #  
  5  # Copyright (c) 2008 University of Dundee.  
  6  #  
  7  # This program is free software: you can redistribute it and/or modify 
  8  # it under the terms of the GNU Affero General Public License as 
  9  # published by the Free Software Foundation, either version 3 of the 
 10  # License, or (at your option) any later version. 
 11  #  
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 15  # GNU Affero General Public License for more details. 
 16  #  
 17  # You should have received a copy of the GNU Affero General Public License 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 19  #  
 20  # Author: Aleksandra Tarkowska <A(dot)Tarkowska(at)dundee(dot)ac(dot)uk>, 2008. 
 21  #  
 22  # Version: 1.0 
 23  # 
 24   
 25  ''' A view functions is simply a Python function that takes a Web request and  
 26  returns a Web response. This response can be the HTML contents of a Web page,  
 27  or a redirect, or the 404 and 500 error, or an XML document, or an image...  
 28  or anything.''' 
 29   
 30  import sys 
 31  import locale 
 32  import datetime 
 33  import traceback 
 34  import logging 
 35   
 36  from django.conf import settings 
 37  from django.core import template_loader 
 38  from django.http import HttpResponse, HttpResponseRedirect 
 39  from django.shortcuts import render_to_response 
 40  from django.template import RequestContext as Context 
 41  from django.views.defaults import page_not_found, server_error 
 42  from django.views import debug 
 43  from django.core.urlresolvers import reverse 
 44   
 45  from omeroweb.feedback.sendfeedback import SendFeedback 
 46  from omeroweb.feedback.forms import ErrorForm, CommentForm 
 47   
 48  logger = logging.getLogger('views-feedback') 
 49   
 50  ############################################################################### 
51 -def thanks(request):
52 return render_to_response("thanks.html",None)
53
54 -def send_feedback(request):
55 error = None 56 form = ErrorForm(data=request.REQUEST.copy()) 57 if form.is_valid(): 58 error = request.REQUEST['error'] 59 comment = None 60 if request.REQUEST.get('comment',None) is not None and request.REQUEST['comment'] != "": 61 comment = request.REQUEST['comment'] 62 email = None 63 if request.REQUEST.get('email', None) is not None and request.REQUEST['email'] != "": 64 email = request.REQUEST['email'] 65 try: 66 sf = SendFeedback() 67 sf.give_feedback(error, comment, email) 68 except: 69 logger.error('handler500: Feedback could not be sent') 70 logger.error(traceback.format_exc()) 71 error = "Feedback could not been sent. Please contact administrator." 72 fileObj = open(("%s/error500-%s.html" % (settings.LOGDIR, datetime.datetime.now())),"w") 73 try: 74 try: 75 fileObj.write(request.REQUEST['error']) 76 except: 77 logger.error('handler500: Error could not be saved.') 78 logger.error(traceback.format_exc()) 79 finally: 80 fileObj.close() 81 82 return HttpResponseRedirect(reverse("fthanks")) 83 84 context = {'form':form, 'error':error} 85 t = template_loader.get_template('500.html') 86 c = Context(request, context) 87 return HttpResponse(t.render(c))
88
89 -def send_comment(request):
90 error = None 91 form = CommentForm() 92 93 if request.method == "POST": 94 form = CommentForm(data=request.REQUEST.copy()) 95 if form.is_valid(): 96 comment = request.REQUEST['comment'] 97 email = None 98 if request.REQUEST['email'] is not None or request.REQUEST['email'] != "": 99 email = request.REQUEST['email'] 100 try: 101 sf = SendFeedback() 102 sf.give_comment(comment, email) 103 except: 104 logger.error('handler500: Feedback could not be sent') 105 logger.error(traceback.format_exc()) 106 error = "Feedback could not been sent. Please contact administrator." 107 else: 108 return HttpResponseRedirect(reverse("fthanks")) 109 110 context = {'form':form, 'error':error} 111 t = template_loader.get_template('comment.html') 112 c = Context(request, context) 113 return HttpResponse(t.render(c))
114
115 -def custom_server_error(request, error500):
116 """ 117 Custom 500 error handler. 118 119 Templates: `500.html` 120 Context: ErrorForm 121 """ 122 form = ErrorForm(initial={'error':error500}) 123 context = {'form':form} 124 t = template_loader.get_template('500.html') 125 c = Context(request, context) 126 return HttpResponse(t.render(c))
127 128 ################################################################################ 129 # handlers 130
131 -def handler500(request):
132 logger.error('handler500: Server error') 133 as_string = '\n'.join(traceback.format_exception(*sys.exc_info())) 134 logger.error(as_string) 135 136 try: 137 request_repr = repr(request) 138 except: 139 request_repr = "Request repr() unavailable" 140 141 error500 = "%s\n\n%s" % (as_string, request_repr) 142 143 return custom_server_error(request, error500)
144
145 -def handler404(request):
146 logger.error('handler404: Page not found') 147 as_string = '\n'.join(traceback.format_exception(*sys.exc_info())) 148 logger.error(as_string) 149 150 try: 151 request_repr = repr(request) 152 except: 153 request_repr = "Request repr() unavailable" 154 155 error404 = "%s\n\n%s" % (as_string, request_repr) 156 157 return page_not_found(request, "404.html")
158
159 -def handlerInternalError(error):
160 template = "error.html" 161 context = {"error":error} 162 return render_to_response(template,context)
163