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 = ''