def get_new_session(cls, user, data=None, auto_delete=True, countdown=settings.TEMPORARY_SESSION_LIFETIME, additional_tq_url=None, tq_kwargs={}): from kay.utils import crypto from google.appengine.api.labs import taskqueue def txn(id): key_name = cls.get_key_name(id) if additional_tq_url is not None: tq_kwargs.update({'session_key': db.Key.from_path(cls.kind(), key_name)}) taskqueue.add(url=url_for(additional_tq_url, **tq_kwargs), transactional=True) taskqueue.add(url=url_for("_internal/expire_temporary_session", session_key=db.Key.from_path(cls.kind(), key_name)), countdown=countdown, transactional=True) session = cls.get_by_key_name(key_name) if session is None: if data: session = cls(key_name=key_name, user=user, data=data) else: session = cls(key_name=key_name, user=user) session.put() return session else: raise db.Rollback("The specified id already exists.") id = crypto.new_iid() session = db.run_in_transaction(txn, id) while session is None: id = crypto.new_iid() session = db.run_in_transaction(txn, id) return session
def get_new_session(cls, user, data=None, auto_delete=True, countdown=settings.TEMPORARY_SESSION_LIFETIME, additional_tq_url=None, tq_kwargs={}): from kay.utils import crypto from google.appengine.api.labs import taskqueue def txn(id): key_name = cls.get_key_name(id) if additional_tq_url is not None: tq_kwargs.update( {'session_key': db.Key.from_path(cls.kind(), key_name)}) taskqueue.add(url=url_for(additional_tq_url, **tq_kwargs), transactional=True) taskqueue.add(url=url_for("_internal/expire_temporary_session", session_key=db.Key.from_path( cls.kind(), key_name)), countdown=countdown, transactional=True) session = cls.get_by_key_name(key_name) if session is None: if data: session = cls(key_name=key_name, user=user, data=data) else: session = cls(key_name=key_name, user=user) session.put() return session else: raise db.Rollback("The specified id already exists.") id = crypto.new_iid() session = db.run_in_transaction(txn, id) while session is None: id = crypto.new_iid() session = db.run_in_transaction(txn, id) return session
def get_key_generator(cls, **kwargs): while 1: yield crypto.new_iid()