diff options
author | Marcel Hellkamp <marc@gsites.de> | 2012-04-04 20:20:53 +0200 |
---|---|---|
committer | Marcel Hellkamp <marc@gsites.de> | 2012-04-04 20:26:57 +0200 |
commit | a21d71694fdea222844dba5076efad3726ccdb68 (patch) | |
tree | 3c1986795ef5ac4f08c076315575102fa8e6d026 /test/test_environ.py | |
parent | 8cbd14cb858546385bdca74ed4dae79643ba9c0c (diff) | |
download | bottle-a21d71694fdea222844dba5076efad3726ccdb68.tar.gz |
Changed the __setattr__ and __getattr__ behavior of Request instances.
New attributes are now added to the environ dictionary as 'bottle.request.env.<name>' values.
This has several advantages over __dict__:
- Instances can be reused without leaking request context (needed for LocalRequest).
- It is now impossible to overwrite existing attributes.
- Middleware and plugins can set and access these attributes.
- We can use __slots__.
Diffstat (limited to 'test/test_environ.py')
-rwxr-xr-x | test/test_environ.py | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/test/test_environ.py b/test/test_environ.py index 329c8fd..6e441e9 100755 --- a/test/test_environ.py +++ b/test/test_environ.py @@ -10,14 +10,14 @@ import wsgiref.util import threading import base64 -from bottle import BaseRequest, BaseResponse +from bottle import BaseRequest, BaseResponse, LocalRequest class TestRequest(unittest.TestCase): def test_app(self): e = {} r = BaseRequest(e) - self.assertRaises(AttributeError, lambda: r.app) + self.assertRaises(RuntimeError, lambda: r.app) e.update({'bottle.app': 5}) self.assertEqual(r.app, 5) @@ -395,14 +395,18 @@ class TestRequest(unittest.TestCase): finally: BaseRequest.MAX_PARAMS = old_value - def test_no_additional_attributes(self): - r = BaseRequest({}) - r.environ = {} - self.assertRaises(AttributeError, lambda: setattr(r, 'foo', 5)) - r.environ['bottle.request.ext.foo'] = 5 - self.assertEquals(r.foo, 5) - r.environ['bottle.request.ext.e'] = property(lambda self: self.environ) - self.assertEquals(r.e, r.environ) + def test_user_defined_attributes(self): + for cls in (BaseRequest, LocalRequest): + r = cls() + + # New attributes go to the environ dict. + r.foo = 'somevalue' + self.assertEqual(r.foo, 'somevalue') + self.assertTrue('somevalue' in r.environ.values()) + + # Unknown attributes raise AttributeError. + self.assertRaises(AttributeError, getattr, r, 'somevalue') + class TestResponse(unittest.TestCase): |