def __init__(self, driver=None, cache=None): if driver: self.driver = driver else: self.driver = PyMongoDriver('frustratio', 'broadcasts') if cache: self.cache = cache else: self.cache = RedisDriver()
class SessionsDataStore(): def __init__(self, sessionDriver=None): if sessionDriver: self.sessionDriver = sessionDriver else: self.sessionDriver = RedisDriver() #self.usersDataStore = UsersDataStore() def start_session(self, user, expireTime=3600): #import uuid #sessionID = str(uuid.uuid4()) # TODO: Figure out what the response is supposed to be! sessionID = user.id response = self.sessionDriver.create( sessionID, json.dumps(user.to_dictionary()), expireTime ) return sessionID def get_session_data(self, sessionID): response = self.sessionDriver.read(sessionID) if response: return json.loads(response) return response def renew_session(self, sessionID, expireTime=3600): return self.sessionDriver.renew(sessionID, expireTime) def get_remaining_session_time(self, sessionID): return self.sessionDriver.ttl(sessionID) def end_session(self, sessionID): '''Destroy session by deleting server storage. ''' return self.sessionDriver.delete(sessionID) def set_cookie(self, key, value, expireTime=3600): return bottle.response.set_cookie( key, value, path='/', expires=int(time.time()) + expireTime ) def get_cookie(self, key): return bottle.request.get_cookie(key) def delete_cookie(self, key): return bottle.response.set_cookie( key, '', path='/', expires=0 )
class SessionsDataStore(): def __init__(self, sessionDriver=None): if sessionDriver: self.sessionDriver = sessionDriver else: self.sessionDriver = RedisDriver() #self.usersDataStore = UsersDataStore() def start_session(self, user, expireTime=3600): #import uuid #sessionID = str(uuid.uuid4()) # TODO: Figure out what the response is supposed to be! sessionID = user.id response = self.sessionDriver.create(sessionID, json.dumps(user.to_dictionary()), expireTime) return sessionID def get_session_data(self, sessionID): response = self.sessionDriver.read(sessionID) if response: return json.loads(response) return response def renew_session(self, sessionID, expireTime=3600): return self.sessionDriver.renew(sessionID, expireTime) def get_remaining_session_time(self, sessionID): return self.sessionDriver.ttl(sessionID) def end_session(self, sessionID): '''Destroy session by deleting server storage. ''' return self.sessionDriver.delete(sessionID) def set_cookie(self, key, value, expireTime=3600): return bottle.response.set_cookie(key, value, path='/', expires=int(time.time()) + expireTime) def get_cookie(self, key): return bottle.request.get_cookie(key) def delete_cookie(self, key): return bottle.response.set_cookie(key, '', path='/', expires=0)
class BroadcastsDataStore(): def __init__(self, driver=None, cache=None): if driver: self.driver = driver else: self.driver = PyMongoDriver('frustratio', 'broadcasts') if cache: self.cache = cache else: self.cache = RedisDriver() def get_empty_broadcast(self): return Broadcast() def create(self, broadcast, appType=None): '''Store a newly created Broadcast instance. ''' if appType: namespace = appType + '_GLOBAL' else: namespace = 'GLOBAL' broadcast.createdTime = int(time.time()) head = self.read_head(namespace) if head: if namespace in broadcast.nextBroadcastIDs: broadcast.nextBroadcastIDs[namespace].append(head.globalID) else: broadcast.nextBroadcastIDs[namespace] = [head.globalID] response = self.driver.replace(namespace + '_HEAD', broadcast.to_dictionary()) else: response = self.driver.insert(namespace + '_HEAD', broadcast.to_dictionary()) response = self.driver.insert(broadcast.id, broadcast.to_dictionary()) # Push to cache. self.cache.create(broadcast.id, json.dumps(broadcast.to_dictionary())) self.cache.create(namespace + '_HEAD', json.dumps(broadcast.to_dictionary())) # TODO: Throw exception here instead. if response: return broadcast else: return None def read_head(self, namespace='GLOBAL'): '''Return the current head of the Broadcasts list. ''' return self.read(namespace + '_HEAD') def read(self, id=None): '''Return a Broadcast instance given an ID. ''' cacheResponse = self.cache.read(id) if cacheResponse: response = json.loads(cacheResponse) else: response = self.driver.get(id) if not response: return None broadcast = Broadcast() broadcast.from_dictionary(response) return broadcast def get_last(self, n, appType): output = [] count = 0 if appType: namespace = appType + '_GLOBAL' else: namespace = 'GLOBAL' node = self.read_head(namespace) #print(node.to_dictionary()) while node and count < n: output.append(node) #print(node.to_dictionary()) nextBroadcastIDs = node.nextBroadcastIDs.get(namespace) if nextBroadcastIDs and len(nextBroadcastIDs) >= 1: nextNodeID = node.nextBroadcastIDs.get(namespace)[0] else: nextNodeID = None node = self.read(nextNodeID) count += 1 return output # TODO: Implement caching for this. def read_multiple(self, ids=[]): '''Return a list/dict of Broadcast instances given a list of IDs. ''' if not ids: return {} response = self.driver.get_multiple(ids) output = {} for x in response: output[x] = Broadcast() output[x].from_dictionary(response[x]) return output
class BroadcastsDataStore(): def __init__(self, driver=None, cache=None): if driver: self.driver = driver else: self.driver = PyMongoDriver('frustratio', 'broadcasts') if cache: self.cache = cache else: self.cache = RedisDriver() def get_empty_broadcast(self): return Broadcast() def create(self, broadcast, appType=None): '''Store a newly created Broadcast instance. ''' if appType: namespace = appType + '_GLOBAL' else: namespace = 'GLOBAL' broadcast.createdTime = int(time.time()) head = self.read_head(namespace) if head: if namespace in broadcast.nextBroadcastIDs: broadcast.nextBroadcastIDs[namespace].append(head.globalID) else: broadcast.nextBroadcastIDs[namespace] = [head.globalID] response = self.driver.replace( namespace + '_HEAD', broadcast.to_dictionary() ) else: response = self.driver.insert( namespace + '_HEAD', broadcast.to_dictionary() ) response = self.driver.insert( broadcast.id, broadcast.to_dictionary() ) # Push to cache. self.cache.create( broadcast.id, json.dumps(broadcast.to_dictionary()) ) self.cache.create( namespace + '_HEAD', json.dumps(broadcast.to_dictionary()) ) # TODO: Throw exception here instead. if response: return broadcast else: return None def read_head(self, namespace='GLOBAL'): '''Return the current head of the Broadcasts list. ''' return self.read(namespace + '_HEAD') def read(self, id=None): '''Return a Broadcast instance given an ID. ''' cacheResponse = self.cache.read(id) if cacheResponse: response = json.loads(cacheResponse) else: response = self.driver.get(id) if not response: return None broadcast = Broadcast() broadcast.from_dictionary(response) return broadcast def get_last(self, n, appType): output = [] count = 0 if appType: namespace = appType + '_GLOBAL' else: namespace = 'GLOBAL' node = self.read_head(namespace) #print(node.to_dictionary()) while node and count < n: output.append(node) #print(node.to_dictionary()) nextBroadcastIDs = node.nextBroadcastIDs.get(namespace) if nextBroadcastIDs and len(nextBroadcastIDs) >= 1: nextNodeID = node.nextBroadcastIDs.get(namespace)[0] else: nextNodeID = None node = self.read(nextNodeID) count += 1 return output # TODO: Implement caching for this. def read_multiple(self, ids=[]): '''Return a list/dict of Broadcast instances given a list of IDs. ''' if not ids: return {} response = self.driver.get_multiple(ids) output = {} for x in response: output[x] = Broadcast() output[x].from_dictionary(response[x]) return output
def __init__(self, sessionDriver=None): if sessionDriver: self.sessionDriver = sessionDriver else: self.sessionDriver = RedisDriver()