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
        )
Example #3
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)
 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 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
Example #7
0
 def __init__(self, sessionDriver=None):
     if sessionDriver:
         self.sessionDriver = sessionDriver
     else:
         self.sessionDriver = RedisDriver()
 def __init__(self, sessionDriver=None):
     if sessionDriver:
         self.sessionDriver = sessionDriver
     else:
         self.sessionDriver = RedisDriver()