Changeset 568
- Timestamp:
- 08/28/05 12:57:01
- Files:
-
- trunk/cherrypy/lib/filter/sessionfilter/__init__.py (modified) (8 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/anydbadaptor.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/baseadaptor.py (modified) (3 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/fileadaptor.py (modified) (5 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/localdict.py (modified) (2 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/ramadaptor.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/lib/filter/sessionfilter/__init__.py
r567 r568 10 10 'sessionFilter.cleanUpDelay': 60, 11 11 'sessionFilter.storageType' : 'ram', 12 'sessionFilter.cookiePrefix': 'CherryPySession', 12 'sessionFilter.cookieName': 'CherryPySession', 13 'sessionFilter.cookiePath' : '/', 13 14 'sessionFilter.storagePath': '.sessiondata', 14 15 'sessionFilter.dbFile': 'sessionData.db', … … 47 48 """ 48 49 49 def __init__(self , sessionName = 'default', sessionPath = '/'):50 def __init__(self): 50 51 """ Initilizes the session filter and creates cherrypy.sessions """ 51 52 … … 53 54 54 55 cherrypy.config.update(_sessionDefaults, override = False) 55 self.sessionManager = self.__newSessionManager(sessionName, sessionPath)56 56 57 def __newSessionManager(self, sessionName, sessionPath):58 """59 Takes the name of a new session and its configuration path.60 Returns a storageAdaptor instance maching the configured storage type.61 If the storage type is not built in, it tries to use sessionFilter.storageAadaptors.62 If the storage type still can not be found, an exception is raised.63 """64 57 # look up the storage type or return the default 65 storageType = cherrypy.config.get('sessionFilter.%s.storageType' % sessionName, None) 66 if not storageType: 67 storageType = cherrypy.config.get('sessionFilter.storageType') 58 storageType = cherrypy.config.get('sessionFilter.storageType', None) 68 59 69 60 # try to initilize a built in session … … 81 72 raise SessionBadStorageTypeError(storageType) 82 73 83 return storageAdaptor(sessionName, sessionPath)74 self.sessionManager = storageAdaptor() 84 75 85 76 86 def __loadSessions(self): 77 def __loadSession(self): 78 """ loads the session or creates a new one """ 79 sessionManager = self.sessionManager 87 80 88 sessionManager = self.sessionManager 89 sessionName = sessionManager.name 90 91 if not cherrypy.config.get('sessionFilter.%s.on' % sessionName, False): 92 return 93 94 cookieName = sessionManager.cookieName 81 cookieName = cherrypy.config.get('sessionFilter.cookieName') 95 82 96 83 try: … … 98 85 except KeyError: 99 86 sessionKey = sessionManager.createSession() 100 self.saveSessionDictKey(sessionKey) 101 sessionManager.loadSession(sessionKey) 87 self.sessionManager.loadSession(sessionKey) 102 88 103 89 try: 104 se ssionManager.loadSession(sessionKey)90 self.sessionManager.loadSession(sessionKey) 105 91 except SessionNotFoundError: 106 92 sessionKey = sessionManager.createSession() 107 self.saveSessionDictKey(sessionKey) 108 sessionManager.loadSession(sessionKey) 93 self.sessionManager.loadSession(sessionKey) 94 95 # currently we have to keep setting the cookie to update the timeout value 96 self.setSessionCookie(sessionKey) 109 97 110 def s aveSessionDictKey(self, sessionKey):98 def setSessionCookie(self, sessionKey): 111 99 """ 112 100 Sets the session key in a cookie. … … 115 103 sessionManager = self.sessionManager 116 104 117 sessionName = sessionManager.name 118 cookieName = sessionManager.cookieName 119 120 121 # if we do not have a manually defined cookie path use path where the session 122 # manager was defined 105 cookieName = cherrypy.config.get('sessionFilter.cookieName') 123 106 124 107 cookiePath = cherrypy.config.get('sessionFilter.cookiePath') 125 if not cookiePath:126 cookiePath = sessionManager.path127 108 128 109 timeout = cherrypy.config.get('sessionFilter.timeout') … … 144 125 def __saveSessions(self): 145 126 try: 146 sessionData = getattr(cherrypy.session, self.sessionManager.name) 127 #sessionData = getattr(cherrypy.session, 'default') 128 sessionData = cherrypy.session._getDict() 147 129 148 130 self.sessionManager.commitCache(sessionData.key) … … 156 138 if (not cherrypy.config.get('staticFilter.on', False) 157 139 and cherrypy.config.get('sessionFilter.on')): 158 self.__loadSession s()140 self.__loadSession() 159 141 160 142 def beforeFinalize(self): trunk/cherrypy/lib/filter/sessionfilter/anydbadaptor.py
r567 r568 43 43 noCache = False 44 44 45 def __init__(self , sessionName, sessionPath):46 BaseAdaptor.__init__(self , sessionName, sessionPath)45 def __init__(self): 46 BaseAdaptor.__init__(self) 47 47 48 48 # we must make sure the db file is unique 49 dbFile = cherrypy.config.get('sessionFilter. %s.dbFile', None)50 if not dbFile:51 defaultFile = '%s.db' % sessionName49 dbFile = cherrypy.config.get('sessionFilter.dbFile') 50 51 storagePath = cherrypy.config.get('sessionFilter.storagePath') 52 52 53 storagePath = cherrypy.config.get('sessionFilter.storagePath') 54 55 dbFile = os.path.join(storagePath, defaultFile) 53 dbFile = os.path.join(storagePath, dbFile) 54 56 55 self.__data = shelve.open(dbFile, 'c') 57 56 trunk/cherrypy/lib/filter/sessionfilter/baseadaptor.py
r567 r568 71 71 # internally by the sessionFilter 72 72 73 def __init__(self , sessionName, sessionPath):73 def __init__(self): 74 74 """ 75 75 Create the session caceh and set the session name. Make if you write … … 79 79 80 80 self.__sessionCache = {} 81 self.name = sessionName82 81 83 82 #set the path 84 self.path = sessionPath85 86 83 cleanUpDelay = cherrypy.config.get('sessionFilter.cleanUpDelay') 87 84 timeMultiple = cherrypy.config.get('sessionFilter.timeMultiple') 88 85 89 86 self.nextCleanUp = time.time()+cleanUpDelay * timeMultiple 90 91 # find the cookie name92 cookiePrefix = cherrypy.config.get('sessionFilter.cookiePrefix')93 94 self.cookieName = '%s_%s' % (cookiePrefix, sessionName)95 87 96 88 try: … … 120 112 session = self.getSessionDict(sessionKey) 121 113 122 session.cookieName = self.cookieName123 114 session.lastAccess = time.time() 124 115 125 setattr(cherrypy.session, self.name, session) 116 #setattr(cherrypy.session, 'default', session) 117 cherrypy.session._setDict(session) 126 118 127 119 def createSession(self): trunk/cherrypy/lib/filter/sessionfilter/fileadaptor.py
r567 r568 42 42 noCache = False 43 43 44 def __init__(self , sessionName, sessionPath):45 BaseAdaptor.__init__(self , sessionName, sessionPath)44 def __init__(self): 45 BaseAdaptor.__init__(self) 46 46 self.__fileLock = mrow.MROWLock() 47 47 … … 53 53 storagePath = cherrypy.config.get('sessionFilter.storagePath') 54 54 55 fileName = ' %s-%s' % (self.name, sessionKey)55 fileName = 'sessionFile-' + sessionKey 56 56 filePath = os.path.join(storagePath, fileName) 57 57 … … 72 72 storagePath = cherrypy.config.get('sessionFilter.storagePath') 73 73 74 fileName = ' %s-%s' % (self.name, sessionData.key)74 fileName = 'sessionFile-' + sessionData.key 75 75 filePath = os.path.join(storagePath, fileName) 76 76 … … 92 92 try: 93 93 prefix, sessionKey = fileName.split('-') 94 if prefix == self.name:94 if prefix == 'sessionFile': 95 95 session = self._getSessionDict(sessionKey) 96 96 if session.expired(): … … 109 109 count = 0 110 110 for fileName in sessionFileList: 111 if fileName.startswith( self.name + '-'):111 if fileName.startswith('sessionFile-'): 112 112 count += 1 113 113 trunk/cherrypy/lib/filter/sessionfilter/localdict.py
r548 r568 27 27 """ 28 28 29 30 29 try: 31 30 from threading import local … … 33 32 from cherrypy._cpthreadinglocal import local 34 33 35 class LocalDict (local):36 def __ getitem__(self, key):37 return self.default[key]34 class LocalDict: 35 def __init__(self): 36 self.localObj = local() 38 37 39 def __setitem__(self, key, value): 40 self.default[key] = value 38 def __getattr__(self, attr): 39 return getattr(self.localObj.sessionDict, attr) 40 41 def _setDict(self, sessionDict): 42 self.localObj.sessionDict = sessionDict 41 43 42 def _ _delitem__(self, key):43 del self.default[key]44 def _getDict(self): 45 return self.localObj.sessionDict 44 46 45 def get(self, key, value = None):46 return self.default.get(key, value)47 48 def setdefault(self, key, default):49 return self.default.setdefault(key, default)50 51 def __iter__(self):52 return iter(self.default)53 54 def __setattr__(self, attr, value):55 local.__setattr__(self, attr, value)56 '''57 else:58 local.__setattr__(self, attr, value)59 return60 raise TypeError('%s is not a session dict.' % attr)61 '''62 63 def __getattribute__(self, attr):64 return local.__getattribute__(self, attr)trunk/cherrypy/lib/filter/sessionfilter/ramadaptor.py
r566 r568 35 35 class RamAdaptor(BaseAdaptor): 36 36 37 def __init__(self , sessionName, sessionPath):38 BaseAdaptor.__init__(self , sessionName, sessionPath)37 def __init__(self): 38 BaseAdaptor.__init__(self) 39 39 self.__data = {} 40 40

