summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-12-16 00:55:56 -0500
committerChris McDonough <chrism@plope.com>2011-12-16 00:55:56 -0500
commit61d45f9f3d02f0bdf615a2c266e7f4060c833a3e (patch)
tree1acff1efe6c5c3515e8abdc799b594eab8865057
parent04cd4bea0457d7beeab2d2b3a1873f1e619650e8 (diff)
downloadpyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.tar.gz
pyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.tar.bz2
pyramid-61d45f9f3d02f0bdf615a2c266e7f4060c833a3e.zip
- Allow prequest path to have query string variables.
-rw-r--r--TODO.txt2
-rw-r--r--pyramid/scripts/prequest.py30
-rw-r--r--pyramid/tests/test_scripts/test_prequest.py8
3 files changed, 16 insertions, 24 deletions
diff --git a/TODO.txt b/TODO.txt
index a5ec323a3..bdb258f04 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -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'])