Chris McDonough
2011-12-21 790fa66970764fb84dfb2fbbc0a71a5610406181
merge master to 1.3 branch
4 files modified
52 ■■■■ changed files
TODO.txt 6 ●●●●● patch | view | raw | blame | history
docs/narr/commandline.rst 8 ●●●● patch | view | raw | blame | history
pyramid/scripts/prequest.py 30 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_scripts/test_prequest.py 8 ●●●● patch | view | raw | blame | history
TODO.txt
@@ -28,6 +28,12 @@
  * 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
docs/narr/commandline.rst
@@ -793,10 +793,10 @@
         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 @@
         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
         """,
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 @@
    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 @@
        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 @@
        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',
pyramid/tests/test_scripts/test_prequest.py
@@ -111,11 +111,11 @@
        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'])