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