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_body() 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 is not None: 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 try: 38 del session[name] 39 except KeyError: 40 pass 41 message = "Attribute %s deleted!" % name 42 43 elif fields.has_key("expire"): 44 trans.expire_session() 45 message = "Session expired!" 46 else: 47 message = "No session present - use create to add one." 48 49 # If a session exists, get its contents. 50 51 if session is not None: 52 session_items = session.items() 53 else: 54 session_items = [] 55 56 # Get some information. 57 58 out = trans.get_response_stream() 59 out.write(""" 60 <html> 61 <head> 62 <title>Session Example</title> 63 </head> 64 <body> 65 <h1>Session Details</h1> 66 <p>%s</p> 67 <ul> 68 %s 69 </ul> 70 <h2>Session</h2> 71 <form method="POST"> 72 <p> 73 <input name="create" type="submit" value="Create..."/> 74 <input name="expire" type="submit" value="Expire..."/> 75 </p> 76 <p>Name: <input name="name"/></p> 77 <p>Value: <input name="value"/></p> 78 <p> 79 <input name="add" type="submit" value="Add..."/> 80 <input name="delete" type="submit" value="Delete..."/> 81 </p> 82 </form> 83 </body> 84 </html> 85 """ % ( 86 message, 87 self._format_attributes(session_items), 88 )) 89 90 def _format_attributes(self, items): 91 return "".join([ 92 "<dt>%s</dt><dd>%s</dd>" % (key, value) 93 for key, value in items 94 ]) 95 96 # vim: tabstop=4 expandtab shiftwidth=4