Changeset 412
- Timestamp:
- 07/05/05 23:08:14
- Files:
-
- trunk/cherrypy/config.py (modified) (4 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/__init__.py (modified) (5 diffs)
- trunk/cherrypy/lib/filter/sessionfilter/basesession.py (modified) (1 diff)
- trunk/cherrypy/lib/filter/sessionfilter/sessionconfig.py (modified) (1 diff)
- trunk/cherrypy/tutorial/tut09_sessionfilter.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/config.py
r408 r412 63 63 reset() 64 64 65 def update(updateMap=None, file=None): 65 def update(updateMap=None, file=None, setDefault = False): 66 """ Update the configMap from a dictionary or a config file. 67 If setDefault is True then the update will not modify 68 values already defined in the configMap. 69 """ 66 70 if updateMap: 67 for section, valueMap in updateMap.ite ms():71 for section, valueMap in updateMap.iteritems(): 68 72 if not isinstance(valueMap, dict): 69 73 # Shortcut syntax … … 71 75 valueMap = {section: valueMap} 72 76 section = 'global' 73 s = configMap.get(section)74 if not s :75 configMap[section] = valueMap77 sectionMap = configMap.setdefault(section, {}) 78 if not setDefault: 79 sectionMap.update(valueMap) 76 80 else: 77 s.update(valueMap) 81 for key, value in valueMap.iteritems(): 82 sectionMap.setdefault(key, value) 78 83 if file: 79 84 if file not in autoreload.reloadFiles: 80 85 autoreload.reloadFiles.append(file) 81 _load(file )86 _load(file, setDefault) 82 87 83 88 def get(key, defaultValue=None, returnSection=False): … … 168 173 fp.close() 169 174 170 def _load(configFile = None): 171 """ Convert an INI file to a dictionary """ 175 def _load(configFile = None, setDefault = False): 176 """ Convert an INI file to a dictionary. If set default is True 177 Values allready in the configMap will not be changed. 178 """ 172 179 173 180 # Parse config file … … 192 199 (repr(section), repr(option), repr(value))) 193 200 raise _cperror.WrongConfigValue, msg 194 configMap[section][option] = value 201 if not setDefault: 202 configMap[section][option] = value 203 else: 204 configMap[section].setdefault(option, value) 195 205 196 206 def outputConfigMap(): trunk/cherrypy/lib/filter/sessionfilter/__init__.py
r410 r412 39 39 # Create as sessions object for accessing session data 40 40 cherrypy.sessions = local() 41 42 self.__configData = local() 43 self.__currentSessions = local() 44 41 45 self.sessionManagers = {} 42 sessionconfig._loadDefaults() 43 #cherrypy.config.update({'global' : sessionconfig._sessionDefaults}) 46 cherrypy.config.update(sessionconfig._sessionDefaults, setDefault = True) 44 47 45 48 … … 70 73 return storageAdaptor(sessionName, sessionPath) 71 74 72 # this function gets all active sessions based on the path 73 def __getSessions(self, names = False): 74 """ 75 Returns a list containing instances of all active sessions for the current request path. 76 """ 77 sessions = [] 78 79 sessionLists = cherrypy.config.getAll('sessionFilter.sessionList') 80 81 # loop across all paths with session listts 82 for sessionPath, sessionList in sessionLists: 83 84 # if it isn't a list make it one 85 if not isinstance(sessionList,list): 86 sessionList=[sessionList] 87 88 for sessionName in sessionList: 89 # if the session is off skip to the next session in the list 90 if not cherrypy.config.get('sessionFilter.%s.on' % sessionName, True): 75 def __loadConfigData(self): 76 try: 77 path = cherrypy.request.path 78 except AttributeError: 79 path = "/" 80 81 configMap = cherrypy.config.configMap 82 83 self.__configData = {} 84 for section, settings in configMap.iteritems(): 85 if section == 'global': 86 section = '/' 87 if path.startswith(section): 88 for key, value in settings.iteritems(): 89 if key.startswith('sessionFilter.'): 90 sectionData = self.__configData.setdefault(section, {}) 91 keySplit = key.split('.') 92 if len(keySplit) == 2: 93 defaults = sectionData.setdefault(None, {}) 94 defaults[keySplit[1]] = value 95 elif len(keySplit) == 3: 96 currentSession = sectionData.setdefault(keySplit[1], {}) 97 currentSession[keySplit[2]] = value 98 99 self.__activeSessions = [] 100 for path, sessions in self.__configData.iteritems(): 101 102 for session, sessionSettings in sessions.iteritems(): 103 if session == None: 104 # because i couldn't stand more tabs 91 105 continue 92 93 # check that the new sessionName is unique94 106 try: 95 sessionManager = self.sessionManagers[sessionName] 96 if sessionManager.path != sessionPath: 97 raise SessionConfigError() 107 sessionManager = self.sessionManagers[session] 98 108 except KeyError: 99 sessionManager = self.__newSessionManager(session Name, sessionPath)100 self.sessionManagers[session Name] = sessionManager101 102 session s.append(sessionManager)103 104 return sessions109 sessionManager = self.__newSessionManager(session, path) 110 self.sessionManagers[session] = sessionManager 111 112 sessionManager.settings = sessionSettings.copy() 113 114 self.__activeSessions.append(sessionManager) 105 115 106 116 def __initSessions(self): 107 117 108 118 # look up all of the session keys by cookie 119 self.__loadConfigData() 120 109 121 sessionKeys = self.getSessionKeys() 110 111 for sessionManager in self.__ getSessions():122 123 for sessionManager in self.__activeSessions: 112 124 sessionKey = sessionKeys.get(sessionManager.name, None) 113 125 … … 127 139 sessionKeys = {} 128 140 129 for sessionManager in self.__ getSessions():141 for sessionManager in self.__activeSessions: 130 142 sessionName = sessionManager.name 131 143 cookieName = sessionManager.cookieName … … 157 169 def __saveSessions(self): 158 170 159 for sessionManager in self.__ getSessions():171 for sessionManager in self.__activeSessions: 160 172 sessionName = sessionManager.name 161 173 … … 170 182 cleanUpDelay = sessionconfig.retrieve('cleanUpDelay', sessionManager.name) 171 183 sessionManager.nextCleanUp=now + cleanUpDelay * 60 184 185 # this isn't needed but may be helpfull for debugging 186 # self.configData = None 172 187 173 188 def beforeMain(self): trunk/cherrypy/lib/filter/sessionfilter/basesession.py
r400 r412 95 95 cookiePrefix = sessionconfig.retrieve('cookiePrefix', sessionName, None) 96 96 self.cookieName = '%s_%s' % (cookiePrefix, sessionName) 97 98 try: 99 from threading import local 100 except ImportError: 101 from cherrypy._cpthreadinglocal import local 102 103 # settings dict 104 self.settings = local() 97 105 98 106 trunk/cherrypy/lib/filter/sessionfilter/sessionconfig.py
r410 r412 44 44 } 45 45 46 def _loadDefaults():47 for key, value in _sessionDefaults.iteritems():48 cherrypy.config.configMap['global'].setdefault(key, value)49 50 46 def retrieve(keyName, sessionName, default = None): 51 47 missing = object() trunk/cherrypy/tutorial/tut09_sessionfilter.py
r396 r412 12 12 cherrypy.config.update( 13 13 { 14 'global' : { 'sessionFilter.on': True},15 '/admin' : { 'sessionFilter.sessionList' : ['admin']},16 '/forum' : { 'sessionFilter.sessionList' : ['forum']}14 'global' : { 'sessionFilter.on': True}, 15 '/admin' : { 'sessionFilter.admin.on' : True }, 16 '/forum' : { 'sessionFilter.forum.on' : True } 17 17 }) 18 18

