예제 #1
0
 def test_no_autosave_saves_atime_without_save(self):
     so = SessionObject({}, auto=False)
     so['foo'] = 'bar'
     so.persist()
     session = get_session(id=so.id)
     assert '_accessed_time' in session
     assert 'foo' not in session  # because we didn't save()
예제 #2
0
 def test_auto_save_saves_without_save(self):
     so = SessionObject({}, auto=True)
     so['foo'] = 'bar'
     # look ma, no save()!
     so.persist()
     session = get_session(id=so.id)
     assert 'foo' in session
예제 #3
0
 def test_auto_save_saves_without_save(self):
     so = SessionObject({}, auto=True)
     so['foo'] = 'bar'
     # look ma, no save()!
     so.persist()
     session = get_session(id=so.id)
     assert 'foo' in session
예제 #4
0
 def test_no_autosave_saves_atime_without_save(self):
     so = SessionObject({}, auto=False)
     so['foo'] = 'bar'
     so.persist()
     session = get_session(id=so.id)
     assert '_accessed_time' in session
     assert 'foo' not in session  # because we didn't save()
예제 #5
0
def completed(request):
    dbsession = DBSession
    with transaction.manager:
        experiment = dbsession.query(Experiment).filter(Experiment.external_id == request.matchdict['ueid']).first()
        if experiment is None:
            raise HTTPNotFound()
        if experiment.status in ['paused', 'completed']:
            raise HTTPFound(request.route_url('experiment.unavailable', ueid=experiment.external_id))
        participant = current_participant(request, dbsession, experiment, allow_create=False)
        if participant is None:
            if experiment.status == 'develop':
                raise HTTPFound(request.route_url('experiment.test', ueid=experiment.external_id))
            else:
                raise HTTPFound(request.route_url('experiment.run', ueid=experiment.external_id))
        participant.completed = True
    dbsession.add(experiment)
    dbsession.add(participant)
    if experiment.status == 'develop':
        session = SessionObject(request.environ,
                                **coerce_session_params({'type': 'cookie',
                                                         'cookie_expires': 7776000,
                                                         'key': 'experiment.%s' % (experiment.external_id),
                                                         'encrypt_key':
                                                         get_config_setting(request, 'beaker.session.encrypt_key'),
                                                         'validate_key':
                                                         get_config_setting(request, 'beaker.session.validate_key'),
                                                         'auto': True}))
        session['pid'] = -1
        session.persist()
        request.response.headerlist.append(('Set-Cookie', session.__dict__['_headers']['cookie_out']))
    return {'experiment': experiment,
            'participant': participant}
예제 #6
0
 def test_no_autosave_saves_atime_without_save(self):
     so = SessionObject({}, auto=False)
     so["foo"] = "bar"
     so.persist()
     session = get_session(id=so.id)
     assert "_accessed_time" in session
     assert "foo" not in session  # because we didn't save()
예제 #7
0
 def test_auto_save_saves_without_save(self):
     so = SessionObject({}, auto=True)
     so["foo"] = "bar"
     # look ma, no save()!
     so.persist()
     session = get_session(id=so.id)
     assert "foo" in session
예제 #8
0
def current_participant(request, dbsession, experiment, allow_create=True):
    """Get the current Participant or create a new one."""
    session = SessionObject(request.environ,
                            **coerce_session_params({'type': 'cookie',
                                                     'cookie_expires': 7776000,
                                                     'key': 'experiment.%s' % (experiment.external_id),
                                                     'encrypt_key':
                                                     get_config_setting(request, 'beaker.session.encrypt_key'),
                                                     'validate_key':
                                                     get_config_setting(request, 'beaker.session.validate_key'),
                                                     'auto': True}))
    if 'pid' in session:
        participant = dbsession.query(Participant).filter(and_(Participant.id == session['pid'],
                                                               Participant.experiment_id == experiment.id)).first()
    else:
        participant = None
    if participant is None:
        if allow_create:
            participant = Participant(experiment_id=experiment.id,
                                      completed=False)
            participant['current'] = experiment.start.id
            participant['answered'] = []
            dbsession.add(participant)
            dbsession.flush()
        else:
            return None
    session['pid'] = participant.id
    session.persist()
    request.response.headerlist.append(('Set-Cookie', session.__dict__['_headers']['cookie_out']))
    return participant
예제 #9
0
 def test_no_autosave_saves_with_save(self):
     so = SessionObject({}, auto=False)
     so["foo"] = "bar"
     so.save()
     so.persist()
     session = get_session(id=so.id)
     assert "_accessed_time" in session
     assert "foo" in session
예제 #10
0
 def test_no_autosave_saves_with_save(self):
     so = SessionObject({}, auto=False)
     so['foo'] = 'bar'
     so.save()
     so.persist()
     session = get_session(id=so.id)
     assert '_accessed_time' in session
     assert 'foo' in session
예제 #11
0
 def test_no_autosave_saves_with_save(self):
     so = SessionObject({}, auto=False)
     so['foo'] = 'bar'
     so.save()
     so.persist()
     session = get_session(id=so.id)
     assert '_accessed_time' in session
     assert 'foo' in session
예제 #12
0
 def test_accessed_time_off_saves_atime_when_saving(self):
     so = SessionObject({}, save_accessed_time=False)
     atime = so['_accessed_time']
     so['foo'] = 'bar'
     so.save()
     so.persist()
     session = get_session(id=so.id, save_accessed_time=False)
     assert 'foo' in session
     assert '_accessed_time' in session
     self.assertEqual(session.last_accessed, atime)
예제 #13
0
 def test_accessed_time_off_saves_atime_when_saving(self):
     so = SessionObject({}, save_accessed_time=False)
     atime = so["_accessed_time"]
     so["foo"] = "bar"
     so.save()
     so.persist()
     session = get_session(id=so.id, save_accessed_time=False)
     assert "foo" in session
     assert "_accessed_time" in session
     self.assertEqual(session.last_accessed, atime)
예제 #14
0
 def test_accessed_time_off_saves_atime_when_saving(self):
     so = SessionObject({}, save_accessed_time=False)
     atime = so['_accessed_time']
     so['foo'] = 'bar'
     so.save()
     so.persist()
     session = get_session(id=so.id, save_accessed_time=False)
     assert 'foo' in session
     assert '_accessed_time' in session
     self.assertEqual(session.last_accessed, atime)
예제 #15
0
    def test_accessed_time_off_doesnt_save_without_save(self):
        req = {'cookie': {'beaker.session.id': 123}}
        so = SessionObject(req, save_accessed_time=False)
        so.persist()  # so we can do a set on a non-new session

        so2 = SessionObject(req, save_accessed_time=False)
        so2['foo'] = 'bar'
        # no save()
        so2.persist()

        session = get_session(id=so.id, save_accessed_time=False)
        assert 'foo' not in session
예제 #16
0
    def test_accessed_time_off_doesnt_save_without_save(self):
        req = {"cookie": {"beaker.session.id": 123}}
        so = SessionObject(req, save_accessed_time=False)
        so.persist()  # so we can do a set on a non-new session

        so2 = SessionObject(req, save_accessed_time=False)
        so2["foo"] = "bar"
        # no save()
        so2.persist()

        session = get_session(id=so.id, save_accessed_time=False)
        assert "foo" not in session
예제 #17
0
    def test_accessed_time_off_doesnt_save_without_save(self):
        req = {'cookie': {'beaker.session.id': 123}}
        so = SessionObject(req, save_accessed_time=False)
        so.persist()  # so we can do a set on a non-new session

        so2 = SessionObject(req, save_accessed_time=False)
        so2['foo'] = 'bar'
        # no save()
        so2.persist()

        session = get_session(id=so.id, save_accessed_time=False)
        assert 'foo' not in session
예제 #18
0
    def _respond(cls, request):
        try:
            path_response = cls.__routes.match(request.path_info)
            if path_response[0] is None:
                raise exc.HTTPNotFound()

            endpoint = path_response[0]
            session = SessionObject(
                request.environ, **cls.__get_session_config())

            try:
                method = endpoint(request.method)
                result = method(
                    _Request(
                        session=session,
                        route_params=path_response[1],
                        path_for=cls.__routes.path_for,
                        raw=request
                    )
                )

            except Exception as e:
                raise exc.HTTPServerError()

            response = webob.Response()

            if session.accessed():
                if not session.dirty():
                    session.save()
                session.persist()
                cookie = session.__dict__['_headers']['cookie_out'] if \
                    session.__dict__['_headers']['set_cookie'] else None
                if cookie:
                    response.headers.add('Set-Cookie', cookie)

            if cls.__config['show_x_powered_by']:
                response.headers.add(
                    'X-Powered-By', 'Lulu version %s' % _VERSION)

            if isinstance(result, basestring):
                response.text = result
                response.charset = 'utf8'
            elif type(result) is dict:
                response.content_type = result['content_type'] if \
                    'content_type' in result.keys() else 'text/html'
                response.body = result['body']

            return response
        except exc.HTTPError as e:
            return e
예제 #19
0
    def test_no_autosave_saves_with_delete(self):
        req = {'cookie': {'beaker.session.id': 123}}

        so = SessionObject(req, auto=False)
        so['foo'] = 'bar'
        so.save()
        so.persist()
        session = get_session(id=so.id)
        assert 'foo' in session

        so2 = SessionObject(req, auto=False)
        so2.delete()
        so2.persist()
        session = get_session(id=so2.id)
        assert 'foo' not in session
예제 #20
0
    def test_no_autosave_saves_with_delete(self):
        req = {"cookie": {"beaker.session.id": 123}}

        so = SessionObject(req, auto=False)
        so["foo"] = "bar"
        so.save()
        so.persist()
        session = get_session(id=so.id)
        assert "foo" in session

        so2 = SessionObject(req, auto=False)
        so2.delete()
        so2.persist()
        session = get_session(id=so2.id)
        assert "foo" not in session
예제 #21
0
    def test_no_autosave_saves_with_delete(self):
        req = {'cookie': {'beaker.session.id': 123}}

        so = SessionObject(req, auto=False)
        so['foo'] = 'bar'
        so.save()
        so.persist()
        session = get_session(id=so.id)
        assert 'foo' in session

        so2 = SessionObject(req, auto=False)
        so2.delete()
        so2.persist()
        session = get_session(id=so2.id)
        assert 'foo' not in session