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