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