Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

merge master to 1.3 branch

  • Loading branch information...
commit 790fa66970764fb84dfb2fbbc0a71a5610406181 2 parents ba2a3f8 + 61d45f9
@mcdonc mcdonc authored
View
6 TODO.txt
@@ -28,6 +28,12 @@ Nice-to-Have
* introspection hiding for directives?
+- Fix deployment recipes in cookbook (discourage proxying without changing
+ server).
+
+Nice-to-Have
+------------
+
- CherryPy server testing / exploded from CherryPy itself.
- Try "with transaction.manager" in an exception view with SQLA (preempt
View
8 docs/narr/commandline.rst
@@ -793,10 +793,10 @@ top-level directory your ``setup.py`` file will look something like this:
zip_safe=False,
install_requires=requires,
tests_require=requires,
- test_suite="wiggystatic",
+ test_suite="myproject",
entry_points = """\
[paste.app_factory]
- main = wiggystatic:main
+ main = myproject:main
""",
)
@@ -848,10 +848,10 @@ The result will be something like:
zip_safe=False,
install_requires=requires,
tests_require=requires,
- test_suite="wiggystatic",
+ test_suite="myproject",
entry_points = """\
[paste.app_factory]
- main = wiggystatic:main
+ main = myproject:main
[console_scripts]
show_settings = myproject.scripts:settings_show
""",
View
30 pyramid/scripts/prequest.py
@@ -2,7 +2,7 @@
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 @@ def run(self):
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 @@ def run(self):
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',
View
8 pyramid/tests/test_scripts/test_prequest.py
@@ -111,11 +111,11 @@ def test_command_method_post(self):
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'])
Please sign in to comment.
Something went wrong with that request. Please try again.