[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