[z3-checkins] r41932 - in z3/deliverance/DeliveranceVHoster/trunk: dvhoster tests
ianb at codespeak.net
ianb at codespeak.net
Fri Apr 6 05:45:30 CEST 2007
Author: ianb
Date: Fri Apr 6 05:45:30 2007
New Revision: 41932
Modified:
z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py
z3/deliverance/DeliveranceVHoster/trunk/dvhoster/model.py
z3/deliverance/DeliveranceVHoster/trunk/tests/test_functional_api.py
Log:
Added test for remote_uris header setting (plus implementation)
Modified: z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py Fri Apr 6 05:45:30 2007
@@ -255,6 +255,12 @@
environ['PATH_INFO'] = path_info[len(path)-1:]
if self.find_remote_uri:
remote_uri = self.find_remote_uri(remote_uri, remote_uri_info, environ, self.app_conf)
+ if remote_uri_info.get('headers'):
+ for header_name, header_value in remote_uri_info['headers'].items():
+ header_name = header_name.upper().replace('-', '_')
+ if not header_name.startswith('HTTP_'):
+ header_name = 'HTTP_' + header_name
+ environ[str(header_name)] = str(header_value)
return remote_uri
if self.find_remote_uri:
# Last change for find_remote_uri to do something
Modified: z3/deliverance/DeliveranceVHoster/trunk/dvhoster/model.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/dvhoster/model.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/dvhoster/model.py Fri Apr 6 05:45:30 2007
@@ -255,6 +255,7 @@
required_keys = ()
optional_keys = ()
trail_slash_keys = ()
+ validate_keys = {}
sort_key = None
def validate_python(self, value, state=None):
@@ -266,14 +267,12 @@
keys = d.keys()
for key in self.required_keys:
assert key in d, "Must have key %r in %r" % d
- assert isinstance(d[key], basestring), (
- '%s must be string (not %r)' % (key, d[key]))
+ self.validate_key(key, d[key], state)
keys.remove(key)
for key in self.optional_keys:
if key not in d:
continue
- assert isinstance(d[key], basestring), (
- '%s must be string (not %r)' % (key, d[key]))
+ self.validate_key(key, d[key], state)
keys.remove(key)
assert not keys, (
"Key(s) not allowed: %s in %r"
@@ -281,6 +280,14 @@
except AssertionError, e:
raise validators.Invalid(str(e), value, state)
+ def validate_key(self, key, value, state):
+ if key in self.validate_keys:
+ if self.validate_keys[key]:
+ self.validate_keys[key].validate_python(value, state)
+ else:
+ assert isinstance(value, basestring), (
+ '%s must be string (not %r)' % (key, value))
+
def _to_python(self, value, state=None):
for d in value:
for key in self.trail_slash_keys:
@@ -296,6 +303,8 @@
required_keys = ('path', )
optional_keys = ('comment', 'headers', 'remote_uri')
trail_slash_keys = ('path', 'remote_uri')
+ validate_keys = dict(
+ headers=None)
def sort_key(self, item):
return -len(item['path'])
Modified: z3/deliverance/DeliveranceVHoster/trunk/tests/test_functional_api.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/tests/test_functional_api.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/tests/test_functional_api.py Fri Apr 6 05:45:30 2007
@@ -68,13 +68,13 @@
data = '''
[{"path": "/bar", "remote_uri": "http://wsgify.org/blah", "comment": "x"},
- {"path": "/", "remote_uri": "http://wsgify.org/"}
+ {"path": "/", "remote_uri": "http://wsgify.org/"},
+ {"path": "/testme", "headers": {"X-Test-Me": "testme"}, "remote_uri": "http://wsgify.org:9999"}
]
'''
- #{"path": "/testme", "headers": {"X-Test-Me": "testme"}
put('/.deliverance/remote_uris', data)
- # It gets normalized, so it doesn't actually stay the same:
+ # It gets normalized, so it doesn't actually stay quite the same:
#assert app.get('/.deliverance/remote_uris').body == data
res = app.get('/bar', status=301)
@@ -87,6 +87,9 @@
## So instead we just get a page we know works:
res = app.get('/bar/index.html', status=200)
+ res = app.get('/testme/', status=200)
+ res.mustcontain("HTTP_X_TEST_ME: 'testme'")
+
data = '''
[{"path": "/test1.html", "rewrite": "/test1"},
{"prefix": "/test2", "rewrite": "/test3", "comment": "rename"},
@@ -147,10 +150,12 @@
def setup_module(module):
+ from paste.script import testapp
static_app = StaticURLParser(os.path.join(os.path.dirname(__file__),
'test-static'))
wsgi_intercept.add_wsgi_intercept('wsgify.org', 80, lambda : static_app)
+ wsgi_intercept.add_wsgi_intercept('wsgify.org', 9999, lambda : testapp.TestApplication(text=True))
def teardown_module(module):
wsgi_intercept.remove_wsgi_intercept('wsgify.org', 80)
More information about the z3-checkins
mailing list