paulb@184 | 1 | #!/usr/bin/env python |
paulb@184 | 2 | |
paulb@184 | 3 | "A test of sessions." |
paulb@184 | 4 | |
paulb@184 | 5 | import WebStack.Generic |
paulb@184 | 6 | |
paulb@184 | 7 | class SessionsResource: |
paulb@184 | 8 | |
paulb@184 | 9 | "A resource adding and expiring sessions." |
paulb@184 | 10 | |
paulb@184 | 11 | def respond(self, trans): |
paulb@184 | 12 | trans.set_content_type(WebStack.Generic.ContentType("text/html")) |
paulb@184 | 13 | |
paulb@184 | 14 | # Get the fields and choose an action. |
paulb@184 | 15 | |
paulb@184 | 16 | fields = trans.get_fields_from_path() |
paulb@184 | 17 | |
paulb@184 | 18 | # Get the session, creating one if appropriate. |
paulb@184 | 19 | |
paulb@184 | 20 | create = fields.has_key("create") |
paulb@184 | 21 | session = trans.get_session(create) |
paulb@184 | 22 | message = "No action taken - use expire, add and delete to edit sessions." |
paulb@184 | 23 | |
paulb@184 | 24 | # If a session exists, perform editing operations. |
paulb@184 | 25 | |
paulb@241 | 26 | if session is not None: |
paulb@184 | 27 | names = fields.get("name") or ["test"] |
paulb@184 | 28 | values = fields.get("value") or ["test"] |
paulb@184 | 29 | name = names[0] |
paulb@184 | 30 | value = values[0] |
paulb@184 | 31 | |
paulb@184 | 32 | if fields.has_key("add"): |
paulb@184 | 33 | session[name] = value |
paulb@184 | 34 | message = "Attribute %s added!" % name |
paulb@184 | 35 | |
paulb@184 | 36 | elif fields.has_key("delete"): |
paulb@184 | 37 | del session[name] |
paulb@184 | 38 | message = "Attribute %s deleted!" % name |
paulb@184 | 39 | |
paulb@184 | 40 | elif fields.has_key("expire"): |
paulb@184 | 41 | trans.expire_session() |
paulb@184 | 42 | message = "Session expired!" |
paulb@184 | 43 | else: |
paulb@184 | 44 | message = "No session present - use create to add one." |
paulb@184 | 45 | |
paulb@184 | 46 | # If a session exists, get its contents. |
paulb@184 | 47 | |
paulb@241 | 48 | if session is not None: |
paulb@184 | 49 | session_items = session.items() |
paulb@184 | 50 | else: |
paulb@184 | 51 | session_items = [] |
paulb@184 | 52 | |
paulb@184 | 53 | # Get some information. |
paulb@184 | 54 | |
paulb@184 | 55 | out = trans.get_response_stream() |
paulb@184 | 56 | out.write(""" |
paulb@184 | 57 | <html> |
paulb@184 | 58 | <head> |
paulb@184 | 59 | <title>Session Example</title> |
paulb@184 | 60 | </head> |
paulb@184 | 61 | <body> |
paulb@184 | 62 | <h1>Session Details</h1> |
paulb@184 | 63 | <p>%s</p> |
paulb@184 | 64 | <ul> |
paulb@184 | 65 | %s |
paulb@184 | 66 | </ul> |
paulb@184 | 67 | </body> |
paulb@184 | 68 | </html> |
paulb@184 | 69 | """ % ( |
paulb@184 | 70 | message, |
paulb@184 | 71 | self._format_attributes(session_items), |
paulb@184 | 72 | )) |
paulb@184 | 73 | |
paulb@184 | 74 | def _format_attributes(self, items): |
paulb@184 | 75 | return "".join([ |
paulb@184 | 76 | "<dt>%s</dt><dd>%s</dd>" % (key, value) |
paulb@184 | 77 | for key, value in items |
paulb@184 | 78 | ]) |
paulb@184 | 79 | |
paulb@184 | 80 | # vim: tabstop=4 expandtab shiftwidth=4 |