def _clean_old_sessions(self): """ Delete expired sessions from the datastore. This is only called for CLEAN_CHECK_PERCENT percent of requests because it could be rather intensive. """ duration = datetime.timedelta(seconds=self.session_expire_time) session_age = datetime.datetime.now() - duration query = UserSession.all() query.filter("last_activity <", session_age) results = query.fetch(1000) for result in results: data_query = UserSessionData.all() query.filter("session", result) data_results = data_query.fetch(1000) for data_result in data_results: data_result.delete() memcache.delete("sid-" + str(result.key())) result.delete()
def _get(self, keyname=None): """ Return all of the SessionData object unless keyname is specified, in which case only that instance of SessionData is returned. Important: This does not interact with memcache and pulls directly from the datastore. Args: keyname: The keyname of the value you are trying to retrieve. """ query = UserSessionData.all() query.filter("session", self.session) if keyname != None: query.filter("keyname =", keyname) results = query.fetch(1000) if len(results) is 0: return None if keyname != None: return results[0] return results
def delete_all_sessions(self): """ Deletes all sessions and session data from the data store and memcache. """ all_sessions_deleted = False all_data_deleted = False while not all_sessions_deleted: query = UserSession.all() results = query.fetch(1000) if len(results) is 0: all_sessions_deleted = True else: for result in results: result.delete() while not all_data_deleted: query = UserSessionData.all() results = query.fetch(1000) if len(results) is 0: all_data_deleted = True else: for result in results: result.delete()
def _put(self, keyname, value): """ Insert a keyname/value pair into the datastore for the session. Args: keyname: The keyname of the mapping. value: The value of the mapping. """ keyname = self._validate_key(keyname) if value is None: raise ValueError("You must pass a value to put.") sessdata = self._get(keyname=keyname) if sessdata is None: sessdata = UserSessionData() sessdata.session = self.session sessdata.keyname = keyname sessdata.content = pickle.dumps(value) self.cache[keyname] = pickle.dumps(value) sessdata.put() self._set_memcache()