Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 201

Show
Ignore:
Timestamp:
05/22/05 12:55:07
Author:
mikerobi
Message:

major refactoring

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/ticket-132/cherrypy/_cpdefaults.py

    r182 r201  
    6464    cpg.response.headerMap['Content-Type'] = 'text/plain' 
    6565 
     66from lib.session.ramsession import RamSession  
     67from lib.session.GenericSqlSession import GenericSqlSession 
     68_sessionTypes = { 
     69                  'ram'  : RamSession, 
     70                  'file' : None, 
     71                  'sql'  : GenericSqlSession 
     72                } 
    6673# robinson,  this crap will be deleted soon, yay! 
    6774''' 
  • branches/ticket-132/cherrypy/_cphttptools.py

    r194 r201  
    2727""" 
    2828 
    29 import cpg, _cpsession, urllib, sys, time, traceback, types, StringIO, cgi, os 
     29import cpg, urllib, sys, time, traceback, types, StringIO, cgi, os 
    3030import mimetypes, sha, random, string, _cputil, cperror, Cookie 
    3131from lib.filter import basefilter 
     
    227227            # Still save session data 
    228228            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() 
    231230 
    232231            wfile.write('%s %s\r\n' % (cpg.response.headerMap['protocolVersion'], cpg.response.headerMap['Status'])) 
     
    269268    # Save session data 
    270269    if cpg.getConfig('session', 'storageType') and not cpg.request.isStatic: 
    271         sessionId = cpg.response.simpleCookie[cpg.getConfig('session', 'cookieName')].value 
    272         cpg._sessionData[sessionId]=cpg.request.sessionMap 
     270        cpg._sessionData.saveSessionMap() 
     271         
    273272 
    274273    # Set the content-length 
     
    383382    # Get session data 
    384383    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() 
    402385 
    403386    # Remove "root" from objectPathList and join it to get objectPath 
  • branches/ticket-132/cherrypy/_cpserver.py

    r182 r201  
    3434 
    3535import cpg, thread, _cputil, _cphttpserver, time 
    36 import _cpsession 
     36from _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 
     41onStartServerList = [] 
     42onStartThreadList = [] 
     43onStopServerList = [] 
     44onStopThreadList = [] 
    3745 
    3846def start(initOnly = False): 
     
    6977    sessionType = cpg.getConfig('session', 'storageType') 
    7078     
    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 
    7585     
    7686    if not initOnly: 
     
    8090    _cphttpserver.stop() 
    8191 
    82 # Set some special attributes for adding hooks 
    83 onStartServerList = [] 
    84 onStartThreadList = [] 
    85 onStopServerList = [] 
    86 onStopThreadList = [] 
  • branches/ticket-132/cherrypy/lib/session/GenericSqlSession.py

    r194 r201  
    3232import cherrypy.cpg 
    3333from errors import * 
    34  
     34try: 
     35  import sqlite 
     36except: 
     37  pass 
     38import os 
    3539class GenericSqlSession(BaseSession): 
    3640     
     41    defaultKeys = {} 
     42 
    3743    def __init__(self): 
    3844        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') 
    4246        except: 
    4347            raise SessionConfigError 
    4448 
    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     
    4954        dummyResult = cursor.fetchone() 
    50         self.dataKeys = {} 
     55        self.defaultKeys = {} 
    5156        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] 
    5458 
     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  
    5565    def newSession(self): 
    56         newSessionData = self.dataKeys.copy() 
     66        newSessionData = self.defaultKeys.copy() 
    5767        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() 
    6373                              }) 
    64         return SessionMapClass(newSessionData) 
     74        return newSessionData 
    6575 
    6676    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 
    6881 
    6982    def __getitem__(self, sessionKey): 
    7083        db = self.__getDB() 
    7184        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) 
    7386        cursor.execute(q) 
     87        print cursor.fetchone() 
    7488        db.commit() 
    7589 
    7690    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 
    78107 
    79108    def __delete__(self, sessionKey): 
    80109        db = self.__getDB() 
    81110        cursor = db.cursor() 
    82         q = "DELETE FROM %s WHERE sessionKey = %s" 
     111        q = "DELETE FROM %s WHERE __sessionKey = %s" 
    83112        cursor.execute(q) 
    84113        db.commit() 
  • branches/ticket-132/cherrypy/lib/session/basesession.py

    r190 r201  
    7979    def newSession(self): 
    8080        """ 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) 
    82113 
    83114    def generateSessionId(self): 
  • branches/ticket-132/cherrypy/lib/session/ramsession.py

    r200 r201  
    8383        ns = self.dataKeys.copy() 
    8484        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() 
    9090                  }) 
    9191        return ns.copy() 

Hosted by WebFaction

Log in as guest/cpguest to create tickets