diff options
| author | Chris McDonough <chrism@plope.com> | 2011-12-16 00:55:56 -0500 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-12-16 00:55:56 -0500 |
| commit | 61d45f9f3d02f0bdf615a2c266e7f4060c833a3e (patch) | |
| tree | 1acff1efe6c5c3515e8abdc799b594eab8865057 | |
| parent | 04cd4bea0457d7beeab2d2b3a1873f1e619650e8 (diff) | |
| download | pyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.tar.gz pyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.tar.bz2 pyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.zip | |
- Allow prequest path to have query string variables.
| -rw-r--r-- | TODO.txt | 2 | ||||
| -rw-r--r-- | pyramid/scripts/prequest.py | 30 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_prequest.py | 8 |
3 files changed, 16 insertions, 24 deletions
@@ -22,8 +22,6 @@ Must-Have - Fix deployment recipes in cookbook (discourage proxying without changing server). -- Allow prequest path to have query string variables. - Nice-to-Have ------------ diff --git a/pyramid/scripts/prequest.py b/pyramid/scripts/prequest.py index 073323cd6..a102dda7e 100644 --- a/pyramid/scripts/prequest.py +++ b/pyramid/scripts/prequest.py @@ -2,7 +2,7 @@ import optparse import sys import textwrap -from pyramid.compat import url_quote +from pyramid.compat import url_unquote from pyramid.request import Request from pyramid.paster import get_app @@ -22,15 +22,12 @@ class PRequestCommand(object): request body. If the path is relative (doesn't begin with "/") it is interpreted as - relative to "/". + relative to "/". The path passed to this script should be URL-quoted. + The path can be succeeded with a query string (e.g. `/path?a=1&=b2'). The variable "environ['paste.command_request']" will be set to "True" in the request's WSGI environment, so your application can distinguish these calls from normal requests. - - Note that you can pass arguments besides the options listed here; any - unknown arguments will be passed to the application in - "environ['QUERY_STRING']" """ usage = "usage: %prog config_uri path_info [args/options]" parser = optparse.OptionParser( @@ -84,7 +81,14 @@ class PRequestCommand(object): app_spec = self.args[0] path = self.args[1] if not path.startswith('/'): - path = '/' + path + path = '/' + path + + try: + path, qs = path.split('?', 1) + except ValueError: + qs = '' + + path = url_unquote(path) headers = {} if self.options.headers: @@ -100,20 +104,10 @@ class PRequestCommand(object): app = self.get_app(app_spec, self.options.app_name) request_method = (self.options.method or 'GET').upper() - qs = [] - for item in self.args[2:]: - if '=' in item: - k, v = item.split('=', 1) - item = url_quote(k) + '=' + url_quote(v) - else: - item = url_quote(item) - qs.append(item) - qs = '&'.join(qs) - environ = { 'REQUEST_METHOD': request_method, 'SCRIPT_NAME': '', # may be empty if app is at the root - 'PATH_INFO': path, # may be empty if at root of app + 'PATH_INFO': path, 'SERVER_NAME': 'localhost', # always mandatory 'SERVER_PORT': '80', # always mandatory 'SERVER_PROTOCOL': 'HTTP/1.0', diff --git a/pyramid/tests/test_scripts/test_prequest.py b/pyramid/tests/test_scripts/test_prequest.py index 34c4b3591..7f24174ef 100644 --- a/pyramid/tests/test_scripts/test_prequest.py +++ b/pyramid/tests/test_scripts/test_prequest.py @@ -111,11 +111,11 @@ class TestPRequestCommand(unittest.TestCase): self.assertEqual(self._app_name, None) self.assertEqual(self._out, ['abc']) - def test_command_extra_args_used_in_query_string(self): - command = self._makeOne(['', 'development.ini', '/', 'a=1%','b=2','c']) + def test_command_with_query_string(self): + command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c']) command.run() - self.assertEqual(self._environ['QUERY_STRING'], 'a=1%25&b=2&c') - self.assertEqual(self._path_info, '/') + self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c') + self.assertEqual(self._path_info, '/abc') self.assertEqual(self._spec, 'development.ini') self.assertEqual(self._app_name, None) self.assertEqual(self._out, ['abc']) |
