summaryrefslogtreecommitdiff
path: root/test/test_environ.py
diff options
context:
space:
mode:
authorMarcel Hellkamp <marc@gsites.de>2012-04-04 20:20:53 +0200
committerMarcel Hellkamp <marc@gsites.de>2012-04-04 20:26:57 +0200
commita21d71694fdea222844dba5076efad3726ccdb68 (patch)
tree3c1986795ef5ac4f08c076315575102fa8e6d026 /test/test_environ.py
parent8cbd14cb858546385bdca74ed4dae79643ba9c0c (diff)
downloadbottle-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-xtest/test_environ.py24
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):