Removed spurious static_path.
[smonitor.git] / monitor / cherrypy / tutorial / tut10_http_errors.py
blobdfa573318216fe85c26e68b4ba80518a5d0ec02e
1 """
3 Tutorial: HTTP errors
5 HTTPError is used to return an error response to the client.
6 CherryPy has lots of options regarding how such errors are
7 logged, displayed, and formatted.
9 """
11 import os
12 localDir = os.path.dirname(__file__)
13 curpath = os.path.normpath(os.path.join(os.getcwd(), localDir))
15 import cherrypy
18 class HTTPErrorDemo(object):
20 # Set a custom response for 403 errors.
21 _cp_config = {'error_page.403' : os.path.join(curpath, "custom_error.html")}
23 def index(self):
24 # display some links that will result in errors
25 tracebacks = cherrypy.request.show_tracebacks
26 if tracebacks:
27 trace = 'off'
28 else:
29 trace = 'on'
31 return """
32 <html><body>
33 <p>Toggle tracebacks <a href="toggleTracebacks">%s</a></p>
34 <p><a href="/doesNotExist">Click me; I'm a broken link!</a></p>
35 <p><a href="/error?code=403">Use a custom error page from a file.</a></p>
36 <p>These errors are explicitly raised by the application:</p>
37 <ul>
38 <li><a href="/error?code=400">400</a></li>
39 <li><a href="/error?code=401">401</a></li>
40 <li><a href="/error?code=402">402</a></li>
41 <li><a href="/error?code=500">500</a></li>
42 </ul>
43 <p><a href="/messageArg">You can also set the response body
44 when you raise an error.</a></p>
45 </body></html>
46 """ % trace
47 index.exposed = True
49 def toggleTracebacks(self):
50 # simple function to toggle tracebacks on and off
51 tracebacks = cherrypy.request.show_tracebacks
52 cherrypy.config.update({'request.show_tracebacks': not tracebacks})
54 # redirect back to the index
55 raise cherrypy.HTTPRedirect('/')
56 toggleTracebacks.exposed = True
58 def error(self, code):
59 # raise an error based on the get query
60 raise cherrypy.HTTPError(status = code)
61 error.exposed = True
63 def messageArg(self):
64 message = ("If you construct an HTTPError with a 'message' "
65 "argument, it wil be placed on the error page "
66 "(underneath the status line by default).")
67 raise cherrypy.HTTPError(500, message=message)
68 messageArg.exposed = True
71 import os.path
72 tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf')
74 if __name__ == '__main__':
75 # CherryPy always starts with app.root when trying to map request URIs
76 # to objects, so we need to mount a request handler root. A request
77 # to '/' will be mapped to HelloWorld().index().
78 cherrypy.quickstart(HTTPErrorDemo(), config=tutconf)
79 else:
80 # This branch is for the test suite; you can ignore it.
81 cherrypy.tree.mount(HTTPErrorDemo(), config=tutconf)