Esempio n. 1
0
  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
Esempio n. 2
0
    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
Esempio n. 3
0
 def get_key_generator(cls, **kwargs):
   while 1:
     yield crypto.new_iid()
Esempio n. 4
0
 def get_key_generator(cls, **kwargs):
     while 1:
         yield crypto.new_iid()