Changeset 444
- Timestamp:
- 07/10/05 22:11:57
- Files:
-
- trunk/cherrypy/__init__.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/__init__.py (modified) (3 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/baseadaptor.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/basesessiondict.py (modified) (3 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/simplesessiondict.py (modified) (2 diffs)
- trunk/cherrypy/test/test_session_filter.py (modified) (5 diffs)
- trunk/cherrypy/tutorial/tut07_sessions.py (modified) (1 diff)
- trunk/cherrypy/tutorial/tut08_advanced_sessions.py (modified) (3 diffs)
- trunk/docs/book/build.sh (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/__init__.py
r418 r444 57 57 response = local() 58 58 59 from cherrypy.lib.filter.sessionfilter.localdict import LocalDict 60 # create session object 61 session = LocalDict() 62 59 63 # Create threadData object as a thread-specific all-purpose storage 60 64 threadData = local() trunk/cherrypy/lib/filter/sessionfilter/__init__.py
r426 r444 7 7 'sessionFilter.sessionList' : ['default'], 8 8 'sessionFilter.storageAdaptors' : {}, 9 'sessionFilter.default.on': True,10 11 9 'sessionFilter.timeout': 60, 12 10 'sessionFilter.cleanUpDelay': 60, … … 51 49 """ Initilizes the session filter and creates cherrypy.sessions """ 52 50 53 # Create as sessions object for accessing session data54 cherrypy.sessions = local()55 56 51 self.__localData= local() 57 52 … … 247 242 sessionName = sessionManager.name 248 243 249 sessionData = getattr(cherrypy.session s, sessionName)244 sessionData = getattr(cherrypy.session, sessionName) 250 245 sessionManager.commitCache(sessionData.key) 251 246 sessionManager.cleanUpCache() trunk/cherrypy/lib/filter/sessionfilter/baseadaptor.py
r423 r444 144 144 145 145 session.cookieName = self.cookieName 146 setattr(cherrypy.session s, self.name, session)146 setattr(cherrypy.session, self.name, session) 147 147 148 148 def createSession(self): trunk/cherrypy/lib/filter/sessionfilter/basesessiondict.py
r382 r444 31 31 32 32 33 def locker(function):34 def _inner(self, *args, **kwds):35 self._lock.acquire()36 result = function(self, *args, **kwds)37 self._lock.release()38 return result39 return _inner40 41 33 # this is a dictionary like class that will be exposed to the application 42 34 # this class is used by … … 66 58 67 59 def get(self, key, default = None): 68 try: 69 return self.__getitem__(key) 70 except KeyError: 71 return default 60 pass 72 61 73 62 def __getitem__(self, key): … … 81 70 82 71 def __setattr__(self, attr, value): 83 pass 72 pass 73 74 def setdefault(self, key, default): 75 pass 76 77 # needed for conversion to a dict 78 def __iter__(self): 79 pass 84 80 85 81 def expired(self): 86 82 now = time.time() 87 return (now - self.lastAccess) < self.timeout 83 84 return (now - self.lastAccess) > self.timeout 88 85 89 86 # additional functions trunk/cherrypy/lib/filter/sessionfilter/simplesessiondict.py
r283 r444 67 67 self.__sessionData[key] = value 68 68 __setitem__=locker(__setitem__) 69 69 70 def setdefault(self, key, default): 71 try: 72 return self.__sessionData[key] 73 except KeyError: 74 self.__sessionData[key] = default 75 return default 76 setdefault=locker(setdefault) 77 70 78 def __getattr__(self, attr): 71 79 try: … … 91 99 self._lock.release() 92 100 101 def __iter__(self): 102 return iter(self.__sessionData.copy()) 103 93 104 def __getstate__(self): 94 105 """ remove the lock so we can pickle """ trunk/cherrypy/test/test_session_filter.py
r443 r444 48 48 'sessionFilter.on' : True, 49 49 'sessionFilter.cacheTimeout' : 60, 50 'sessionFilter.storagePath' : tmpFolder 50 'sessionFilter.storagePath' : tmpFolder, 51 'sessionFilter.default.on' : True 51 52 }, 52 53 '/ram' : { 'sessionFilter.ram.on' : True, 'sessionFilter.ram.storageType' : 'ram' }, … … 60 61 61 62 def __go(self, storageType): 62 session = getattr(cherrypy.session s, storageType)63 count = session. get('count', 0) + 164 session['count'] = count 63 session = getattr(cherrypy.session, storageType) 64 count = session.setdefault('count', 1) 65 session['count'] = count + 1 65 66 return str(count) 66 67 68 def index(self): 69 count = cherrypy.session.setdefault('count', 1) 70 cherrypy.session['count'] = count + 1 71 return str(count) 72 index.exposed = True 67 73 68 74 def ram(self): … … 73 79 return self.__go('file') 74 80 file.exposed = True 75 81 76 82 def anydb(self): 77 83 return self.__go('anydb') 78 84 anydb.exposed = True 79 80 85 81 86 import threading … … 84 89 cherrypy.config.update(server_conf.copy()) 85 90 86 def reloadCP():87 reload(cherrypy)88 cherrypy.config.update(server_conf.copy())89 cherrypy.server.start(initOnly = True)90 91 91 class SessionFilterTest(unittest.TestCase): 92 92 93 def __testS torageType(self, storageType, startCount = 1, iterations = 5, persistant=False):93 def __testSession(self, requestPath, iterations = 5, persistant=False): 94 94 #cherrypy.config.update({"sessionFilter.storageType": storageType}) 95 95 96 helper.request( '/' + storageType)97 self.assertEqual(cherrypy.response.body, str(startCount))96 helper.request(requestPath) 97 self.assertEqual(cherrypy.response.body, '1') 98 98 99 99 cookie = dict(cherrypy.response.headers)['Set-Cookie'] 100 100 101 101 # this loop will be used to test thread safety 102 for n in xrange( startCount+1, startCount + iterations + 1):102 for n in xrange(2, 3 + iterations): 103 103 if persistant: 104 104 cherrypy.server.stop() 105 105 cherrypy.server.start(initOnly = True) 106 helper.request( '/' + storageType, [('Cookie', cookie)])106 helper.request(requestPath, [('Cookie', cookie)]) 107 107 self.assertEqual(cherrypy.response.body, str(n)) 108 108 … … 113 113 pass 114 114 115 def testDefaultSession(self): 116 self.__testSession('/', persistant=False) 117 115 118 def testRamSessions(self): 116 self.__testS torageType('ram', persistant=False)119 self.__testSession('/ram', persistant=False) 117 120 118 121 def testFileSessions(self): 119 self.__testS torageType('file', persistant=True)122 self.__testSession('/file', persistant=True) 120 123 121 124 def testAnydbSessions(self): 122 self.__testS torageType('anydb', persistant=True)125 self.__testSession('/anydb', persistant=True) 123 126 124 def __testThreadSafety(self , storageType = 'ram'):127 def __testThreadSafety(self): 125 128 for z in range(30): 126 threading.Thread(target = self.__testS torageType, args = ('ram', 1, 4)).start()129 threading.Thread(target = self.__testSession, args = ('/ram')).start() 127 130 128 131 ''' 129 132 def testSqlObjectSession(self): 130 self.__testS torageType('sqlobject')133 self.__testSession('sqlobject') 131 134 ''' 132 135 trunk/cherrypy/tutorial/tut07_sessions.py
r382 r444 15 15 def index(self): 16 16 # Increase the silly hit counter 17 count = cherrypy.session s.default.get('count', 0) + 117 count = cherrypy.session.get('count', 0) + 1 18 18 19 19 # Store the new value in the session dictionary 20 cherrypy.session s.default['count'] = count20 cherrypy.session['count'] = count 21 21 22 22 # And display a silly hit count message! trunk/cherrypy/tutorial/tut08_advanced_sessions.py
r431 r444 40 40 41 41 # Increase the silly hit counter 42 count = cherrypy.session s.default.get('count', 0) + 142 count = cherrypy.session.get('count', 0) + 1 43 43 44 44 # Store the new value in the session dictionary 45 # cherrypy.session s.defaultis available by default46 cherrypy.session s.default['count'] = count45 # cherrypy.session is available by default 46 cherrypy.session['count'] = count 47 47 48 48 # And display a silly hit count message! 49 key = cherrypy.sessions.default.key 50 cookieName = cherrypy.sessions.default.cookieName 49 # cherrypy.session is an alias to cherrypy.session.default 50 # it allows dictionary functionality but the attributes 51 # must be accessed through cherrypy.session.default 52 key = cherrypy.session.default.key 53 cookieName = cherrypy.session.default.cookieName 51 54 return self.__examplePage('ram', count, self.samplePages, key, cookieName) 52 55 … … 58 61 # it mirrors the session function 59 62 60 adminCount = cherrypy.session s.admin.get('adminCount', 0) + 161 cherrypy.session s.admin['adminCount'] = adminCount63 adminCount = cherrypy.session.admin.get('adminCount', 0) + 1 64 cherrypy.session.admin['adminCount'] = adminCount 62 65 63 key = cherrypy.session s.admin.key64 cookieName = cherrypy.session s.admin.cookieName66 key = cherrypy.session.admin.key 67 cookieName = cherrypy.session.admin.cookieName 65 68 return self.__examplePage('ram', adminCount, self.samplePages, key, cookieName) 66 69 … … 73 76 # it mirrors the session function 74 77 75 forumCount = cherrypy.session s.forum.get('forumCount', 0) + 176 cherrypy.session s.forum['forumCount'] = forumCount78 forumCount = cherrypy.session.forum.get('forumCount', 0) + 1 79 cherrypy.session.forum['forumCount'] = forumCount 77 80 78 key = cherrypy.session s.forum.key81 key = cherrypy.session.forum.key 79 82 80 cookieName = cherrypy.session s.forum.cookieName83 cookieName = cherrypy.session.forum.cookieName 81 84 return self.__examplePage('ram', forumCount, self.samplePages, key, cookieName) 82 85 trunk/docs/book/build.sh
r370 r444 53 53 tar zxf docbook-xsl-1.68.1.tar.gz 54 54 fi 55 cd $current55 cd "$current" 56 56 } 57 57

