1 #!/usr/bin/env python 2 3 "A simple application for test purposes." 4 5 import WebStack.Generic 6 7 class SimpleResource: 8 9 "A simple resource." 10 11 def respond(self, trans): 12 trans.set_content_type(WebStack.Generic.ContentType("text/html", "utf-8")) 13 14 # Get some information. 15 16 out = trans.get_response_stream() 17 if trans.get_content_type(): 18 content_type = trans.get_content_type().media_type 19 charset = trans.get_content_type().charset 20 else: 21 content_type, charset = None, None 22 23 # Use Unicode strings for correct character encoding. 24 25 out.write(u""" 26 <html> 27 <head> 28 <title>Simple Example</title> 29 </head> 30 <body> 31 <h1>Test</h1> 32 <ul> 33 <li>Path: %s</li> 34 <li>Path without query: %s</li> 35 <li>Path info: %s</li> 36 <li>Query string: %s</li> 37 <li>Request method: %s</li> 38 <li>User: %s</li> 39 <li>Content type: %s</li> 40 <li>Charset: %s</li> 41 <li>Headers: 42 <dl> 43 %s 44 </dl> 45 </li> 46 <li>User-Agent: 47 <ul> 48 %s 49 </ul> 50 </li> 51 <li>user-agent: 52 <ul> 53 %s 54 </ul> 55 </li> 56 <li>Fields from path: 57 <ul> 58 %s 59 </ul> 60 </li> 61 <li>Fields from body: 62 <ul> 63 %s 64 </ul> 65 </li> 66 <li>Fields from path and body: 67 <ul> 68 %s 69 </ul> 70 </li> 71 <li>Cookies: 72 <ul> 73 %s 74 </ul> 75 </li> 76 </ul> 77 </body> 78 </html> 79 """ % ( 80 trans.get_path(), 81 trans.get_path_without_query(), 82 trans.get_path_info(), 83 trans.get_query_string(), 84 trans.get_request_method(), 85 trans.get_user(), 86 content_type, 87 charset, 88 self._format_dict(trans.get_headers()), 89 self._format_list(trans.get_header_values("User-Agent")), 90 self._format_list(trans.get_header_values("user-agent")), 91 self._format_fields(trans.get_fields_from_path()), 92 self._format_fields(trans.get_fields_from_body()), 93 self._format_fields(trans.get_fields()), 94 self._format_cookies(trans.get_cookies()), 95 )) 96 97 def _format_dict(self, d): 98 return "".join([ 99 "<dt>%s</dt><dd>%s</dd>" % (key, value) 100 for key, value in d.items() 101 ]) 102 103 def _format_fields(self, d): 104 return "".join([ 105 "<li>%s<ul>%s</ul></li>" % (key, self._format_list(value)) 106 for key, value in d.items() 107 ]) 108 109 def _format_cookies(self, d): 110 return "".join([ 111 "<dt>%s</dt><dd>%s</dd>" % (key, value.value) 112 for key, value in d.items() 113 ]) 114 115 def _format_list(self, l): 116 return "".join([ 117 "<li>%s</li>" % (value or "<em>empty</em>") 118 for value in l 119 ]) 120 121 # vim: tabstop=4 expandtab shiftwidth=4