Files
yadyn/server/session.py
2007-11-12 13:35:58 +01:00

111 lines
3.8 KiB
Python

import time
import threading
from logger import Logger
class SessionContainer(threading.Thread):
def __init__(self, checkPeriod, expiryTime):
threading.Thread.__init__(self)
self.checkPeriod = checkPeriod
self.expiryTime = expiryTime
self.sessions = {}
self.sessionsLock = threading.Lock()
def get(self, sid):
if not sid:
return None
try:
self.sessionsLock.acquire()
session = self.sessions[sid]
session.updateTimestamp()
return session
except KeyError:
return None
finally:
self.sessionsLock.release()
def delete(self, sid):
if sid:
try:
self.sessionsLock.acquire()
del self.sessions[sid]
except KeyError:
pass
finally:
self.sessionsLock.release()
def add(self, session):
try:
self.sessionsLock.acquire()
self.sessions[session.getId()] = session
finally:
self.sessionsLock.release()
def run(self):
while True:
try:
self.sessionsLock.acquire()
currentTime = int(time.time())
for session in self.sessions.values():
Logger.log("SessionContainer: checking session %s, expires in %d s" % (session.getId(),
(session.getTimestamp() + self.expiryTime) - currentTime))
if (session.getTimestamp() + self.expiryTime) < currentTime:
Logger.log("SessionContainer: about to drop session %s" % session.getId())
del self.sessions[session.getId()]
finally:
self.sessionsLock.release()
time.sleep(self.checkPeriod)
class Session(object):
def __init__(self, id, params):
self.timestamp = int(time.time())
self.id = id
self.params = params
self.badmsg = ''
self.goodmsg = ''
self.role = ''
def updateTimestamp(self):
self.timestamp = int(time.time())
def getTimestamp(self):
return self.timestamp
def getId(self):
return self.id
def setParams(self, params):
self.params = params
def getParams(self):
return self.params
def setGoodMsg(self, msg):
self.goodmsg = msg
def setBadMsg(self, msg):
self.badmsg = msg
def setRedirectTarget(self, target):
self.redirectTarget = target
def setShownPage(self, page):
self.page = page
def getShownPage(self):
return self.page
def setAuthTuple(self, authTuple):
self.authTuple = authTuple
self.username = authTuple['username']
self.password = authTuple['password']
self.role = authTuple['role']
def clearMsgs(self):
self.badmsg = ''
self.goodmsg = ''