def __get__(self, session, type=None): """Retrieve the current session, or create one within our stores if missing.""" if session is None: return self now = datetime.utcnow() sid = str(session._id) if sid not in self._sessions: if __debug__: log.debug("Constructing new in-memory session.") self._sessions[sid] = Context() elif self._expire and '_expires' in self._sessions[ sid] and self._sessions[sid]._expires <= now: if __debug__: log.debug("Recreating expired in-memory session.") self._sessions[sid] = Context() elif __debug__: log.debug("Loading existing in-memory session.") session[self.name] = self._sessions[sid] return self._sessions[sid]
def test_inline_console_disallowed(): ctx = Context() ctx.request = Request.blank('/') con = Console(ctx) with pytest.raises(HTTPNotFound): con()
def setUp(self): self._ctx = Context( request = Request.blank('/foo/bar'), extension = Context(signal=Context(dispatch=[])), dispatched = False, callback = False, events = [], ) self.view = self._ctx.view = WebViews(self._ctx) self._ctx.environ = self._ctx.request.environ
def test_inline_console(): ctx = Context() ctx.request = Request.blank('/') ext = DebugExtension() ext(ctx, mock_app) con = Console(ctx) result = con() assert 'CONSOLE_MODE = true' in result.text
def test_analytics_extension(): ctx = Context(response=Context(headers=dict())) ext = AnalyticsExtension() assert not hasattr(ctx, '_start_time') ext.prepare(ctx) assert hasattr(ctx, '_start_time') ext.before(ctx) time.sleep(0.1) ext.after(ctx) assert 0.1 <= float(ctx.response.headers['X-Generation-Time']) <= 0.2
def test_annotation_transformation(): ext = AnnotationExtension() ctx = Context() result = ext.transform(ctx, endpoint, 1134) assert result == ('int', 1134)
def test_existing_thread_local_extension(): ctx = Context() ext = ThreadLocalExtension() assert not hasattr(local, 'context') ext.start(ctx) assert local.context is ctx rctx = ctx._promote('RequestContext') ext.prepare(rctx) assert local.context is rctx ext.done(rctx) assert not hasattr(local, 'context') ext.stop(ctx)
def test_debug_extension_console(): ext = DebugExtension() req = Request.blank('/__console__') ctx = Context() app = ext(ctx, mock_app) response = req.get_response(app) assert 'debugger.js' in response.text
def test_annotation_method(): ext = AnnotationExtension() ctx = Context() args = [] kwargs = {'a': '27', 'b': '42'} ext.mutate(ctx, Endpoint().endpoint, args, kwargs) assert kwargs == {'a': 27, 'b': 42}
def test_annotation_positional(): ext = AnnotationExtension() ctx = Context() args = ['27', '42'] kwargs = {} ext.mutate(ctx, endpoint, args, kwargs) assert args == [27, 42] assert kwargs == {}
def test_debug_extension_catches(): ext = DebugExtension() req = Request.blank('/') ctx = Context() app = ext(ctx, mock_app) response = req.get_response(app) assert 'CONSOLE_MODE = false' in response.text assert 'by zero' in response.text
def test_annotation_bare(): ext = AnnotationExtension() ctx = Context() args = [] kwargs = {'a': '27', 'b': '42'} ext.mutate(ctx, bare_endpoint, args, kwargs) assert kwargs == {'a': '27', 'b': '42'} assert ext.transform(ctx, bare_endpoint, None) is None
def test_lazy_context_value(): Ctx = Context(sample=lazy(mock_lazy_value, 'sample'))._promote( 'MockContext', False) ctx = Ctx(count=0, ran=False) assert isinstance(Ctx.sample, lazy) assert 'sample' not in ctx.__dict__ assert not ctx.ran assert ctx.count == 0 assert ctx.sample == 42 assert 'sample' in ctx.__dict__ assert ctx.sample == 42 assert ctx.count == 1
def test_new_thread_local_extension(): ctx = Context() ext = ThreadLocalExtension('web:local') assert not hasattr(web, 'local') ext.start(ctx) local = web.local assert local.context is ctx rctx = ctx._promote('RequestContext') ext.prepare(rctx) assert local.context is rctx ext.done(rctx) assert not hasattr(local, 'context') ext.stop(ctx) assert not hasattr(web, 'local')
def test_basic_context_operations(): sample = Context(foo=1, bar=2, _baz=3) assert sorted(sample) == ['bar', 'foo'] assert len(sample) == 2 assert sample['foo'] == 1 del sample['bar'] with pytest.raises(KeyError): sample['bar'] with pytest.raises(KeyError): del sample['bar']
def context(): """Sometimes, you just need an empty context.""" yield Context()
def test_reviewer_example_with_role(self, reviewer, context): context.user = Context(role={'reviewer'}) assert reviewer(context) is True
def test_reviewer_example_without_role(self, reviewer, context): context.user = Context(role={'peasant'}) assert reviewer(context) is None
def test_reviewer_example_with_no_role_field(self, reviewer, context): context.user = Context() assert reviewer(context) is None
def test_admin_example_user_who_is_admin(self, admin, context): context.user = Context(admin=True) assert admin(context) is True
def test_admin_example_user_who_is_not_admin(self, admin, context): context.user = Context(admin=False) assert admin(context) is None
def test_admin_example_user_with_no_admin_field(self, admin, context): context.user = Context() assert admin(context) is None
def test_far_future_expires(): context = Context(response=Context()) sample.far(context, 'foo.txt') assert context.response.cache_expires == 60 * 60 * 24 * 365