Beispiel #1
0
class SessionStoreDatastore(SessionStore):
    """Session storage in datastore on google appengine

    """
    def __init__(self, storage_url=None, **kw):
        super(SessionStoreDatastore, self).__init__(storage_url=storage_url)
        try:
            self.engine = StorageEngineDatastore(self.storage_url).get_engine()
        except:
            raise SessionStoreError("Could not create connection "
                                      "for: %s " % self.storage_url)

    def __contains__(self, key):
        sessions = self.engine.GqlQuery("SELECT * FROM WhirlySession WHERE session_id = :1", key)
        s = sessions.get()
        if s:
            return True
        else:
            return False

    def __getitem__(self, key):
        now = datetime.datetime.utcnow()
        try:
            q = self.engine.GqlQuery("SELECT * FROM WhirlySession WHERE "
                                     "session_id = :1", key)
            s = q.fetch(limit=1)[0]
            s.atime = now
            self.engine.put(s)
        except IndexError:
            raise KeyError
        else:
            return self.decode(s.data)

    def __setitem__(self, key, value):
        pickled = self.encode(value)
        now = datetime.datetime.utcnow()

        if key in self:
            s = self.engine.GqlQuery("SELECT * from WhirlySession WHERE "
                                     "session_id = :1", key)[0]
            s.atime = now
            s.data = pickled
        else:
            s = WhirlySession(session_id=key)
            s.data = pickled
        self.engine.put(s)

    def __delitem__(self, key):
        q = self.engine.GqlQuery("SELECT * from WhirlySession WHERE "
                                 "session_id = :1", key)
        for s in q:
            s.delete()

    def cleanup(self, timeout):
        timeout = datetime.timedelta(timeout/(24.0*60*60))
        last_allowed_time = datetime.datetime.utcnow() - timeout
        q = self.engine.GqlQuery("SELECT * FROM WhirlySession WHERE "
                                 "atime < :1", last_allowed_time)
        for s in q:
            s.delete()
Beispiel #2
0
 def __init__(self, storage_url=None, **kw):
     super(SessionStoreDatastore, self).__init__(storage_url=storage_url)
     try:
         self.engine = StorageEngineDatastore(self.storage_url).get_engine()
     except:
         raise SessionStoreError("Could not create connection "
                                   "for: %s " % self.storage_url)