Changeset 201
- Timestamp:
- 05/22/05 12:55:07
- Files:
-
- branches/ticket-132/cherrypy/_cpdefaults.py (modified) (1 diff)
- branches/ticket-132/cherrypy/_cphttptools.py (modified) (4 diffs)
- branches/ticket-132/cherrypy/_cpserver.py (modified) (3 diffs)
- branches/ticket-132/cherrypy/_cpsession.py (deleted)
- branches/ticket-132/cherrypy/lib/session/GenericSqlSession.py (modified) (1 diff)
- branches/ticket-132/cherrypy/lib/session/basesession.py (modified) (1 diff)
- branches/ticket-132/cherrypy/lib/session/ramsession.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/ticket-132/cherrypy/_cpdefaults.py
r182 r201 64 64 cpg.response.headerMap['Content-Type'] = 'text/plain' 65 65 66 from lib.session.ramsession import RamSession 67 from lib.session.GenericSqlSession import GenericSqlSession 68 _sessionTypes = { 69 'ram' : RamSession, 70 'file' : None, 71 'sql' : GenericSqlSession 72 } 66 73 # robinson, this crap will be deleted soon, yay! 67 74 ''' branches/ticket-132/cherrypy/_cphttptools.py
r194 r201 27 27 """ 28 28 29 import cpg, _cpsession,urllib, sys, time, traceback, types, StringIO, cgi, os29 import cpg, urllib, sys, time, traceback, types, StringIO, cgi, os 30 30 import mimetypes, sha, random, string, _cputil, cperror, Cookie 31 31 from lib.filter import basefilter … … 227 227 # Still save session data 228 228 if cpg.getConfig('session', 'storageType') and not cpg.request.isStatic: 229 sessionId = cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')].value 230 cpg._sessionData[sessionId]=cpg.request.sessionMap 229 cpg._sessionData.saveSessionMap() 231 230 232 231 wfile.write('%s %s\r\n' % (cpg.response.headerMap['protocolVersion'], cpg.response.headerMap['Status'])) … … 269 268 # Save session data 270 269 if cpg.getConfig('session', 'storageType') and not cpg.request.isStatic: 271 sessionId = cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')].value272 cpg._sessionData[sessionId]=cpg.request.sessionMap270 cpg._sessionData.saveSessionMap() 271 273 272 274 273 # Set the content-length … … 383 382 # Get session data 384 383 if cpg.getConfig('session', 'storageType') and not cpg.request.isStatic: 385 now = time.time() 386 # First, get sessionId from cookie 387 try: sessionId = cpg.request.simpleCookie[cpg.getConfig('session', 'cookieName')].value 388 except: sessionId=None 389 if sessionId: 390 # Load session data from wherever it was stored 391 cpg.request.sessionMap = cpg._sessionData.get(sessionId, None) 392 if cpg.request.sessionMap == None: 393 sessionId = None 394 395 # Create a new sessionId if needed 396 if not sessionId or not cpg.request.sessionMap: 397 cpg.request.sessionMap = cpg._sessionData.newSession() 398 399 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')] = sessionId 400 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')]['path'] = '/' 401 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')]['version'] = 1 384 cpg._sessionData.loadSessionMap() 402 385 403 386 # Remove "root" from objectPathList and join it to get objectPath branches/ticket-132/cherrypy/_cpserver.py
r182 r201 34 34 35 35 import cpg, thread, _cputil, _cphttpserver, time 36 import _cpsession 36 from _cpdefaults import _sessionTypes 37 38 # moved here from end of file so the session system can create 39 # thread specific data on initilization 40 # Set some special attributes for adding hooks 41 onStartServerList = [] 42 onStartThreadList = [] 43 onStopServerList = [] 44 onStopThreadList = [] 37 45 38 46 def start(initOnly = False): … … 69 77 sessionType = cpg.getConfig('session', 'storageType') 70 78 71 cpg._sessionData = cpg.session = _cpsession._sessionHelper 72 73 # right now this only looks for a built in session type 74 cpg._sessionData = cpg.session.initSessionType(sessionType) 79 cpg._sessionData = _sessionTypes[sessionType]() 80 81 try: 82 onStartThreadList.append(cpg._sessionData.onStartThread) 83 except AttributeError: 84 pass 75 85 76 86 if not initOnly: … … 80 90 _cphttpserver.stop() 81 91 82 # Set some special attributes for adding hooks83 onStartServerList = []84 onStartThreadList = []85 onStopServerList = []86 onStopThreadList = []branches/ticket-132/cherrypy/lib/session/GenericSqlSession.py
r194 r201 32 32 import cherrypy.cpg 33 33 from errors import * 34 34 try: 35 import sqlite 36 except: 37 pass 38 import os 35 39 class GenericSqlSession(BaseSession): 36 40 41 defaultKeys = {} 42 37 43 def __init__(self): 38 44 try: 39 self.tableName = cherrypy.cpg.getConfig('session', 'table') 40 #this stupid dbObjecName will get replaced (hopefully) 41 self.dbObjectName = cherrypy.cpg.getConfig('session', 'dbObjectName') 45 self.tableName=cherrypy.cpg.getConfig('session', 'table') 42 46 except: 43 47 raise SessionConfigError 44 48 45 cursor = tmpDB.cursor() 46 cursor.execute("INSERT INTO %s (sessionKey) VALUES('junk_key')" % self.tableName) 47 cursor.execute("SELECT * FROM %s WHERE sessionKey = 'junk_key'" % self.tableName) 48 49 self.__db = sqlite.connect('session.db') 50 cursor = self.__db.cursor() 51 cursor.execute("INSERT INTO %s (__sessionKey) VALUES('junk_key')" % self.tableName) 52 cursor.execute("SELECT * FROM %s WHERE __sessionKey = 'junk_key'" % self.tableName) 53 49 54 dummyResult = cursor.fetchone() 50 self.d ataKeys = {}55 self.defaultKeys = {} 51 56 for col in xrange(len(cursor.description)): 52 self.dataKeys[cursor.description[col][0]] = dummyResult[col] 53 57 self.defaultKeys[cursor.description[col][0]] = dummyResult[col] 54 58 59 cursor.execute("DELETE FROM %s WHERE __sessionKey = 'junk_key'" % self.tableName) 60 self.__db.commit() 61 62 def onStartThread(self, threadIndex): 63 cherrypy.cpg.threadData.sessionDB = sqlite.connect('session.db') 64 55 65 def newSession(self): 56 newSessionData = self.d ataKeys.copy()66 newSessionData = self.defaultKeys.copy() 57 67 newSessionData.update({ 58 ' createdAt' : time.time(),59 ' timeout' : cherrypy.cpg.getConfig('session', 'timeout') * 60,60 ' maxAge' : None,61 ' lastAccess' : time.time(),62 ' sessionKey' : self.generateSessionId()68 '__createdAt' : time.time(), 69 '__timeout' : cherrypy.cpg.getConfig('session', 'timeout') * 60, 70 '__maxAge' : None, 71 '__lastAccess' : time.time(), 72 '__sessionKey' : self.generateSessionId() 63 73 }) 64 return SessionMapClass(newSessionData)74 return newSessionData 65 75 66 76 def __getDB(self): 67 return getattr(cherrypy.cpg.thread, self.dbObjectName) 77 try: 78 return cherrypy.cpg.threadData.sessionDB 79 except: 80 return self.__db 68 81 69 82 def __getitem__(self, sessionKey): 70 83 db = self.__getDB() 71 84 cursor = db.cursor() 72 q = "SELECT * FROM %s WHERE sessionKey = '%s'" % (self.tableName, sessionKey)85 q = "SELECT * FROM %s WHERE __sessionKey = '%s'" % (self.tableName, sessionKey) 73 86 cursor.execute(q) 87 print cursor.fetchone() 74 88 db.commit() 75 89 76 90 def __setitem__(self, sessionKey, sessionData): 77 """ lighting = time to commit unfinished work """ 91 db = self.__getDB() 92 cursor = db.cursor() 93 cursor.execute("SELECT * FROM %s WHERE __sessionKey = '%s'" % (self.tableName, sessionKey)) 94 if not cursor.fetchone(): 95 columns = ', '.join(sessionData.keys()) 96 values = ', '.join(["'%s'" % str(value) for value in sessionData.values()]) 97 q = 'INSERT INTO %s (%s) VALUES(%s)' % (self.tableName, columns, values) 98 cursor.execute(q) 99 print 'insert' 100 else: 101 del sessionData['__sessionKey'] 102 kv = ', '.join(["%s='%s'" % (key, sessionData[key]) for key in sessionData]) 103 q = "UPDATE %s SET %s WHERE __sessionKey='%s'" % (self.tableName, kv, sessionKey) 104 cursor.execute(q) 105 db.commit() 106 78 107 79 108 def __delete__(self, sessionKey): 80 109 db = self.__getDB() 81 110 cursor = db.cursor() 82 q = "DELETE FROM %s WHERE sessionKey = %s"111 q = "DELETE FROM %s WHERE __sessionKey = %s" 83 112 cursor.execute(q) 84 113 db.commit() branches/ticket-132/cherrypy/lib/session/basesession.py
r190 r201 79 79 def newSession(self): 80 80 """ Return a new sessionMap instance """ 81 return SessionMapClass(dataKeys = {}) 81 return SessionMapClass(dataKeys = { '__sessionKey': self.generateSessionId() }) 82 83 def loadSessionMap(self, autoCreate = True): 84 """ loads the curent session map or create a new one, unless createNew is false (then sessionMap = None) """ 85 cpg = cherrypy.cpg 86 87 # First, get sessionKey from cookie 88 try: sessionKey = cpg.request.simpleCookie[cpg.getConfig('session', 'cookieName')].value 89 except: sessionKey=None 90 if sessionKey: 91 # Load session data from wherever it was stored 92 sessionMap = self.get(sessionKey, None) 93 if sessionMap == None: 94 sessionKey = None 95 96 # Create a new session if needed 97 if not sessionKey or not sessionMap: 98 if autoCreate: 99 sessionMap = cpg._sessionData.newSession() 100 else: 101 sessionMap = None 102 103 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')] = sessionMap['__sessionKey'] 104 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')]['path'] = '/' 105 cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')]['version'] = 1 106 107 cpg.request.sessionMap = sessionMap 108 109 def saveSessionMap(self): 110 """ saves the sessionMap """ 111 cpg = cherrypy.cpg 112 self.__setitem__(cpg.request.sessionMap['__sessionKey'], cpg.request.sessionMap) 82 113 83 114 def generateSessionId(self): branches/ticket-132/cherrypy/lib/session/ramsession.py
r200 r201 83 83 ns = self.dataKeys.copy() 84 84 ns.update({ 85 ' createdAt' : time.time(),86 ' timeout' : cherrypy.cpg.getConfig('session', 'timeout') * 60,87 ' maxAge' : None,88 ' lastAccess' : time.time(),89 ' sessionKey' : self.generateSessionId()85 '__createdAt' : time.time(), 86 '__timeout' : cherrypy.cpg.getConfig('session', 'timeout') * 60, 87 '__maxAge' : None, 88 '__lastAccess' : time.time(), 89 '__sessionKey' : self.generateSessionId() 90 90 }) 91 91 return ns.copy()

