From 7f04459230918373d8f599c76f1d86b6ce21a9f8 Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Sat, 28 Feb 2015 12:07:47 +0000 Subject: The base can be found at request.headers['Host'] if serving standalone. Useful for development at local.example.com --- cherrypy/lib/cptools.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cherrypy/lib/cptools.py b/cherrypy/lib/cptools.py index f376282c..e11f51b4 100644 --- a/cherrypy/lib/cptools.py +++ b/cherrypy/lib/cptools.py @@ -192,11 +192,9 @@ def proxy(base=None, local='X-Forwarded-Host', remote='X-Forwarded-For', if lbase is not None: base = lbase.split(',')[0] if not base: - port = request.local.port - if port == 80: - base = '127.0.0.1' - else: - base = '127.0.0.1:%s' % port + base = request.headers.get('Host', '127.0.0.1') + if request.local.port != 80: + base += ':%s' % port if base.find("://") == -1: # add http:// or https:// if needed -- cgit v1.2.1 From 0df27cdecb42c311b089a6e7ad98063abdeb68ca Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 4 Feb 2016 08:23:27 -0500 Subject: Update changelog --- CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 2bc95852..90d752a8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,8 @@ of SSL adapter on Python 2 WSGI servers. * Default SSL Adapter on Python 2 is the builtin SSL adapter, matching Python 3 behavior. +* Pull request #94: In proxy tool, defer to Host header for + resolving the base if no base is supplied. ----- 4.0.0 -- cgit v1.2.1 From 34bcda2676c01590786a2cb8290c2a6020238a0c Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 4 Feb 2016 08:38:51 -0500 Subject: Bumped to 5.0.0 in preparation for next release. --- cherrypy/__init__.py | 2 +- cherrypy/test/test_core.py | 11 +++-------- cherrypy/wsgiserver/wsgiserver2.py | 2 +- cherrypy/wsgiserver/wsgiserver3.py | 2 +- setup.py | 2 +- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/cherrypy/__init__.py b/cherrypy/__init__.py index ead51acf..34739b3e 100644 --- a/cherrypy/__init__.py +++ b/cherrypy/__init__.py @@ -56,7 +56,7 @@ with customized or extended components. The core API's are: These API's are described in the `CherryPy specification `_. """ -__version__ = "4.0.1" +__version__ = "5.0.0" from cherrypy._cpcompat import urljoin as _urljoin, urlencode as _urlencode from cherrypy._cpcompat import basestring, unicodestr diff --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py index ae4728de..6ca3226d 100644 --- a/cherrypy/test/test_core.py +++ b/cherrypy/test/test_core.py @@ -555,20 +555,15 @@ class CoreRequestHandlingTest(helper.CPWebCase): self.assertBody(data) def testCookies(self): - if sys.version_info >= (2, 5): - header_value = lambda x: x - else: - header_value = lambda x: x + ';' - self.getPage("/cookies/single?name=First", [('Cookie', 'First=Dinsdale;')]) - self.assertHeader('Set-Cookie', header_value('First=Dinsdale')) + self.assertHeader('Set-Cookie', 'First=Dinsdale') self.getPage("/cookies/multiple?names=First&names=Last", [('Cookie', 'First=Dinsdale; Last=Piranha;'), ]) - self.assertHeader('Set-Cookie', header_value('First=Dinsdale')) - self.assertHeader('Set-Cookie', header_value('Last=Piranha')) + self.assertHeader('Set-Cookie', 'First=Dinsdale') + self.assertHeader('Set-Cookie', 'Last=Piranha') self.getPage("/cookies/single?name=Something-With%2CComma", [('Cookie', 'Something-With,Comma=some-value')]) diff --git a/cherrypy/wsgiserver/wsgiserver2.py b/cherrypy/wsgiserver/wsgiserver2.py index a0c0173f..6d9a55f9 100644 --- a/cherrypy/wsgiserver/wsgiserver2.py +++ b/cherrypy/wsgiserver/wsgiserver2.py @@ -1756,7 +1756,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/4.0.1" + version = "CherryPy/5.0.0" """A version string for the HTTPServer.""" software = None diff --git a/cherrypy/wsgiserver/wsgiserver3.py b/cherrypy/wsgiserver/wsgiserver3.py index d410eda4..9c1ea090 100644 --- a/cherrypy/wsgiserver/wsgiserver3.py +++ b/cherrypy/wsgiserver/wsgiserver3.py @@ -1478,7 +1478,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/4.0.1" + version = "CherryPy/5.0.0" """A version string for the HTTPServer.""" software = None diff --git a/setup.py b/setup.py index d6259541..a418f326 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ class cherrypy_build_py(build_py): # arguments for the setup command ############################################################################### name = "CherryPy" -version = "4.0.1" +version = "5.0.0" desc = "Object-Oriented HTTP framework" long_desc = "CherryPy is a pythonic, object-oriented HTTP framework" classifiers = [ -- cgit v1.2.1 -- cgit v1.2.1 From 5bbddb4e7419e37e4ff543311c391bd25f225054 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 4 Feb 2016 08:40:55 -0500 Subject: Bumped to 5.0.1 in preparation for next release. --- cherrypy/__init__.py | 2 +- cherrypy/wsgiserver/wsgiserver2.py | 2 +- cherrypy/wsgiserver/wsgiserver3.py | 2 +- setup.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cherrypy/__init__.py b/cherrypy/__init__.py index 34739b3e..5da48329 100644 --- a/cherrypy/__init__.py +++ b/cherrypy/__init__.py @@ -56,7 +56,7 @@ with customized or extended components. The core API's are: These API's are described in the `CherryPy specification `_. """ -__version__ = "5.0.0" +__version__ = "5.0.1" from cherrypy._cpcompat import urljoin as _urljoin, urlencode as _urlencode from cherrypy._cpcompat import basestring, unicodestr diff --git a/cherrypy/wsgiserver/wsgiserver2.py b/cherrypy/wsgiserver/wsgiserver2.py index 6d9a55f9..b8f9ef4d 100644 --- a/cherrypy/wsgiserver/wsgiserver2.py +++ b/cherrypy/wsgiserver/wsgiserver2.py @@ -1756,7 +1756,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/5.0.0" + version = "CherryPy/5.0.1" """A version string for the HTTPServer.""" software = None diff --git a/cherrypy/wsgiserver/wsgiserver3.py b/cherrypy/wsgiserver/wsgiserver3.py index 9c1ea090..dbc24d22 100644 --- a/cherrypy/wsgiserver/wsgiserver3.py +++ b/cherrypy/wsgiserver/wsgiserver3.py @@ -1478,7 +1478,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/5.0.0" + version = "CherryPy/5.0.1" """A version string for the HTTPServer.""" software = None diff --git a/setup.py b/setup.py index a418f326..107fc0e5 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ class cherrypy_build_py(build_py): # arguments for the setup command ############################################################################### name = "CherryPy" -version = "5.0.0" +version = "5.0.1" desc = "Object-Oriented HTTP framework" long_desc = "CherryPy is a pythonic, object-oriented HTTP framework" classifiers = [ -- cgit v1.2.1 From cc68638c26bbd9315da7c5a5af2af3ef05688d17 Mon Sep 17 00:00:00 2001 From: Joel Rivera Date: Fri, 5 Feb 2016 18:05:07 -0600 Subject: Fix NameError on string formatting for the proxy tool --- cherrypy/lib/cptools.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cherrypy/lib/cptools.py b/cherrypy/lib/cptools.py index 277d726e..9be571ba 100644 --- a/cherrypy/lib/cptools.py +++ b/cherrypy/lib/cptools.py @@ -194,7 +194,8 @@ def proxy(base=None, local='X-Forwarded-Host', remote='X-Forwarded-For', base = lbase.split(',')[0] if not base: base = request.headers.get('Host', '127.0.0.1') - if request.local.port != 80: + port = request.local.port + if port != 80: base += ':%s' % port if base.find("://") == -1: -- cgit v1.2.1 From fe643d52e1e46e03674834f390388f9bfc43f062 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 5 Feb 2016 20:08:54 -0500 Subject: Update changelog --- CHANGES.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 90d752a8..ec5d0a36 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +----- +5.0.1 +----- + +* Bugfix for NameError following #94. + ----- 5.0.0 ----- -- cgit v1.2.1 -- cgit v1.2.1 From 7cc8a31dd3e21a89d0bbdfb76d065c79d6a7f39c Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 5 Feb 2016 20:10:51 -0500 Subject: Bumped to 5.0.2 in preparation for next release. --- cherrypy/__init__.py | 2 +- cherrypy/wsgiserver/wsgiserver2.py | 2 +- cherrypy/wsgiserver/wsgiserver3.py | 2 +- setup.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cherrypy/__init__.py b/cherrypy/__init__.py index 5da48329..7db50c4b 100644 --- a/cherrypy/__init__.py +++ b/cherrypy/__init__.py @@ -56,7 +56,7 @@ with customized or extended components. The core API's are: These API's are described in the `CherryPy specification `_. """ -__version__ = "5.0.1" +__version__ = "5.0.2" from cherrypy._cpcompat import urljoin as _urljoin, urlencode as _urlencode from cherrypy._cpcompat import basestring, unicodestr diff --git a/cherrypy/wsgiserver/wsgiserver2.py b/cherrypy/wsgiserver/wsgiserver2.py index b8f9ef4d..828b243f 100644 --- a/cherrypy/wsgiserver/wsgiserver2.py +++ b/cherrypy/wsgiserver/wsgiserver2.py @@ -1756,7 +1756,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/5.0.1" + version = "CherryPy/5.0.2" """A version string for the HTTPServer.""" software = None diff --git a/cherrypy/wsgiserver/wsgiserver3.py b/cherrypy/wsgiserver/wsgiserver3.py index dbc24d22..b3942c90 100644 --- a/cherrypy/wsgiserver/wsgiserver3.py +++ b/cherrypy/wsgiserver/wsgiserver3.py @@ -1478,7 +1478,7 @@ class HTTPServer(object): timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/5.0.1" + version = "CherryPy/5.0.2" """A version string for the HTTPServer.""" software = None diff --git a/setup.py b/setup.py index 107fc0e5..e7525eb8 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ class cherrypy_build_py(build_py): # arguments for the setup command ############################################################################### name = "CherryPy" -version = "5.0.1" +version = "5.0.2" desc = "Object-Oriented HTTP framework" long_desc = "CherryPy is a pythonic, object-oriented HTTP framework" classifiers = [ -- cgit v1.2.1 From b61337d8ecf03d4eeaeaf9f4391621dfdeb02a55 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 5 Feb 2016 23:26:02 -0500 Subject: Remove sys.version_info conditional --- cherrypy/test/test_core.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py index 6ca3226d..bbeba653 100644 --- a/cherrypy/test/test_core.py +++ b/cherrypy/test/test_core.py @@ -9,6 +9,7 @@ import cherrypy from cherrypy._cpcompat import IncompleteRead, itervalues, ntob from cherrypy import _cptools, tools from cherrypy.lib import httputil, static +from cherrypy.test._test_decorators import ExposeExamples favicon_path = os.path.join(os.getcwd(), localDir, "../favicon.ico") @@ -41,10 +42,7 @@ class CoreRequestHandlingTest(helper.CPWebCase): baseurl.exposed = True root = Root() - - if sys.version_info >= (2, 5): - from cherrypy.test._test_decorators import ExposeExamples - root.expose_dec = ExposeExamples() + root.expose_dec = ExposeExamples() class TestType(type): -- cgit v1.2.1 From 66465d75cfe3fa58f3efab79b53bd0c1a2ec8f50 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 5 Feb 2016 23:29:00 -0500 Subject: Replace copy pasta with an evaluated map. --- cherrypy/test/test_core.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py index bbeba653..7806d7b8 100644 --- a/cherrypy/test/test_core.py +++ b/cherrypy/test/test_core.py @@ -248,11 +248,7 @@ class CoreRequestHandlingTest(helper.CPWebCase): cherrypy.response.cookie[str(name)] = cookie.value def multiple(self, names): - for name in names: - cookie = cherrypy.request.cookie[name] - # Python2's SimpleCookie.__setitem__ won't take unicode - # keys. - cherrypy.response.cookie[str(name)] = cookie.value + list(map(self.single, names)) def append_headers(header_list, debug=False): if debug: -- cgit v1.2.1 From 767a3ace6d4629f43dbc4e4022ec76a3233699bf Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:27:03 -0500 Subject: remove skip, no longer relevant --- cherrypy/test/test_core.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py index 7806d7b8..31959cc3 100644 --- a/cherrypy/test/test_core.py +++ b/cherrypy/test/test_core.py @@ -649,9 +649,6 @@ class CoreRequestHandlingTest(helper.CPWebCase): self.assertBody('/page1') def test_expose_decorator(self): - if not sys.version_info >= (2, 5): - return self.skip("skipped (Python 2.5+ only) ") - # Test @expose self.getPage("/expose_dec/no_call") self.assertStatus(200) -- cgit v1.2.1 From 282f0cec025a1d17222e91913b62f4e17b62deb0 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:39:12 -0500 Subject: Skip testCookies when cookies module is broken. Fixes #1405. --- cherrypy/test/test_core.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py index 31959cc3..4ebc170a 100644 --- a/cherrypy/test/test_core.py +++ b/cherrypy/test/test_core.py @@ -548,7 +548,22 @@ class CoreRequestHandlingTest(helper.CPWebCase): self.getPage("/favicon.ico") self.assertBody(data) + def skip_if_bad_cookies(self): + """ + cookies module fails to reject invalid cookies + https://bitbucket.org/cherrypy/cherrypy/issues/1405 + """ + cookies = sys.modules.get('http.cookies') + _is_legal_key = getattr(cookies, '_is_legal_key', lambda x: False) + if not _is_legal_key(','): + return + issue = 'http://bugs.python.org/issue26302' + tmpl = "Broken cookies module ({issue})" + self.skip(tmpl.format(**locals())) + def testCookies(self): + self.skip_if_bad_cookies() + self.getPage("/cookies/single?name=First", [('Cookie', 'First=Dinsdale;')]) self.assertHeader('Set-Cookie', 'First=Dinsdale') -- cgit v1.2.1 From 798373e3983e903fc6cd40799891c5bb2af0e632 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:48:02 -0500 Subject: Resave without excess whitespace --- cherrypy/test/test_conn.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index ab830f3c..57aabb8a 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -759,12 +759,12 @@ for _ in ("ECONNRESET", "WSAECONNRESET"): socket_reset_errors.append(getattr(errno, _)) class LimitedRequestQueueTests(helper.CPWebCase): - setup_server = staticmethod(setup_upload_server) + setup_server = staticmethod(setup_upload_server) def test_queue_full(self): conns = [] overflow_conn = None - + try: # Make 15 initial requests and leave them open, which should use # all of wsgiserver's WorkerThreads and fill its Queue. @@ -777,7 +777,7 @@ class LimitedRequestQueueTests(helper.CPWebCase): conn.putheader("Content-Length", "4") conn.endheaders() conns.append(conn) - + # Now try a 16th conn, which should be closed by the server immediately. overflow_conn = self.HTTP_CONN(self.HOST, self.PORT) # Manually connect since httplib won't let us set a timeout @@ -788,7 +788,7 @@ class LimitedRequestQueueTests(helper.CPWebCase): overflow_conn.sock.settimeout(5) overflow_conn.sock.connect(sa) break - + overflow_conn.putrequest("GET", "/", skip_host=True) overflow_conn.putheader("Host", self.HOST) overflow_conn.endheaders() -- cgit v1.2.1 From 804d1f0cc8d9e3276674cf3169fbd4852aaba39a Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:50:15 -0500 Subject: Extract template as a variable and use new style string formatting. --- cherrypy/test/test_conn.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index 57aabb8a..3dc5fed8 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -799,8 +799,11 @@ class LimitedRequestQueueTests(helper.CPWebCase): if exc.args[0] in socket_reset_errors: pass # Expected. else: - raise AssertionError("Overflow conn did not get RST. " - "Got %s instead" % repr(exc.args)) + tmpl = ( + "Overflow conn did not get RST. " + "Got {exc.args!r} instead" + ) + raise AssertionError(tmpl.format(**locals())) except BadStatusLine: # This is a special case in OS X. Linux and Windows will # RST correctly. -- cgit v1.2.1 From 9c23b858deeba6f223bc1e927677b738e0ce4760 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:50:38 -0500 Subject: Remove unused import --- cherrypy/test/test_conn.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index 3dc5fed8..94a718a1 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -768,7 +768,6 @@ class LimitedRequestQueueTests(helper.CPWebCase): try: # Make 15 initial requests and leave them open, which should use # all of wsgiserver's WorkerThreads and fill its Queue. - import time for i in range(15): conn = self.HTTP_CONN(self.HOST, self.PORT) conn.putrequest("POST", "/upload", skip_host=True) -- cgit v1.2.1 From 47da87c4f9a29232b2a411f5f6d857e74de2bce0 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:51:06 -0500 Subject: Remove unused import --- cherrypy/test/test_conn.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index 94a718a1..bada977b 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -10,7 +10,6 @@ import cherrypy from cherrypy._cpcompat import HTTPConnection, HTTPSConnection, NotConnected from cherrypy._cpcompat import BadStatusLine, ntob, tonative, urlopen, unicodestr from cherrypy.test import webtest -from cherrypy import _cperror pov = 'pPeErRsSiIsStTeEnNcCeE oOfF vViIsSiIoOnN' -- cgit v1.2.1 From 4fd560ab4c979bf17a3592370162d107e6b3856d Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:51:34 -0500 Subject: Move initialization of variable after imports --- cherrypy/test/test_conn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index bada977b..bf7e9cb6 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -3,7 +3,6 @@ import socket import sys import time -timeout = 1 import cherrypy @@ -12,6 +11,7 @@ from cherrypy._cpcompat import BadStatusLine, ntob, tonative, urlopen, unicodest from cherrypy.test import webtest +timeout = 1 pov = 'pPeErRsSiIsStTeEnNcCeE oOfF vViIsSiIoOnN' -- cgit v1.2.1 From 703c2c5f4f8e995f2b956b749c7a01baa0ebe2fc Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 07:59:59 -0500 Subject: Fix test failure on Python 3.5 --- cherrypy/test/test_conn.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index bf7e9cb6..f602a77b 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -757,6 +757,13 @@ for _ in ("ECONNRESET", "WSAECONNRESET"): if _ in dir(errno): socket_reset_errors.append(getattr(errno, _)) +socket_reset_errors += [ + # Python 3.5 raises an http.client.RemoteDisconnected + # with this message + "Remote end closed connection without response", +] + + class LimitedRequestQueueTests(helper.CPWebCase): setup_server = staticmethod(setup_upload_server) -- cgit v1.2.1 From 2d62c9d513441cb7fd471a38ace6daedfa6885cd Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 08:00:20 -0500 Subject: Move import to top --- cherrypy/test/test_conn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index f602a77b..a2952943 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -3,6 +3,7 @@ import socket import sys import time +import errno import cherrypy @@ -750,7 +751,6 @@ def setup_upload_server(): 'server.accepted_queue_timeout': 0.1, }) -import errno socket_reset_errors = [] # Not all of these names will be defined for every platform. for _ in ("ECONNRESET", "WSAECONNRESET"): -- cgit v1.2.1 From 526d9c69557ee9034503e30a6a642cba88fa50cc Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 08:03:21 -0500 Subject: Rewrite init/append loop as list comprehension. --- cherrypy/test/test_conn.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cherrypy/test/test_conn.py b/cherrypy/test/test_conn.py index a2952943..703e6dfd 100644 --- a/cherrypy/test/test_conn.py +++ b/cherrypy/test/test_conn.py @@ -751,11 +751,13 @@ def setup_upload_server(): 'server.accepted_queue_timeout': 0.1, }) -socket_reset_errors = [] -# Not all of these names will be defined for every platform. -for _ in ("ECONNRESET", "WSAECONNRESET"): - if _ in dir(errno): - socket_reset_errors.append(getattr(errno, _)) +reset_names = 'ECONNRESET', 'WSAECONNRESET' +socket_reset_errors = [ + getattr(errno, name) + for name in reset_names + if hasattr(errno, name) +] +"reset error numbers available on this platform" socket_reset_errors += [ # Python 3.5 raises an http.client.RemoteDisconnected -- cgit v1.2.1 From cf8169f3426f444caadcf05302248de5639e065e Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 09:56:43 -0500 Subject: Remove compatibility code --- cherrypy/test/webtest.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/cherrypy/test/webtest.py b/cherrypy/test/webtest.py index 1fa3f969..b738d7f2 100644 --- a/cherrypy/test/webtest.py +++ b/cherrypy/test/webtest.py @@ -510,17 +510,7 @@ def openURL(url, headers=None, method="GET", body=None, conn._http_vsn_str = protocol conn._http_vsn = int("".join([x for x in protocol if x.isdigit()])) - # skip_accept_encoding argument added in python version 2.4 - if sys.version_info < (2, 4): - def putheader(self, header, value): - if header == 'Accept-Encoding' and value == 'identity': - return - self.__class__.putheader(self, header, value) - import new - conn.putheader = new.instancemethod( - putheader, conn, conn.__class__) - conn.putrequest(method.upper(), url, skip_host=True) - elif not py3k: + if not py3k: conn.putrequest(method.upper(), url, skip_host=True, skip_accept_encoding=True) else: -- cgit v1.2.1 From 40dbf22a89aee46b180514d360ebedc592c5b80b Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 6 Feb 2016 10:07:43 -0500 Subject: Remove a hacky monkeypatch. Replace with a simple decoding of the URL on Python 3. --- cherrypy/test/webtest.py | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/cherrypy/test/webtest.py b/cherrypy/test/webtest.py index b738d7f2..fc3cab49 100644 --- a/cherrypy/test/webtest.py +++ b/cherrypy/test/webtest.py @@ -510,38 +510,11 @@ def openURL(url, headers=None, method="GET", body=None, conn._http_vsn_str = protocol conn._http_vsn = int("".join([x for x in protocol if x.isdigit()])) - if not py3k: - conn.putrequest(method.upper(), url, skip_host=True, - skip_accept_encoding=True) - else: - import http.client - # Replace the stdlib method, which only accepts ASCII url's - - def putrequest(self, method, url): - if ( - self._HTTPConnection__response and - self._HTTPConnection__response.isclosed() - ): - self._HTTPConnection__response = None - - if self._HTTPConnection__state == http.client._CS_IDLE: - self._HTTPConnection__state = ( - http.client._CS_REQ_STARTED) - else: - raise http.client.CannotSendRequest() - - self._method = method - if not url: - url = ntob('/') - request = ntob(' ').join( - (method.encode("ASCII"), - url, - self._http_vsn_str.encode("ASCII"))) - self._output(request) - import types - conn.putrequest = types.MethodType(putrequest, conn) - - conn.putrequest(method.upper(), url) + if py3k and isinstance(url, bytes): + url = url.decode() + + conn.putrequest(method.upper(), url, skip_host=True, + skip_accept_encoding=True) for key, value in headers: conn.putheader(key, value.encode("Latin-1")) -- cgit v1.2.1 From 5ebcc7eb1fa192c651f3d42cefe804fe4d836c75 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 7 Feb 2016 22:03:39 -0500 Subject: Create the unix socket in a temporary dir, as the directory for the tests may not be suitable for creating a unix socket. Fixes #1407. --- cherrypy/test/test_wsgi_unix_socket.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cherrypy/test/test_wsgi_unix_socket.py b/cherrypy/test/test_wsgi_unix_socket.py index 0e98a4c5..0a552bc5 100644 --- a/cherrypy/test/test_wsgi_unix_socket.py +++ b/cherrypy/test/test_wsgi_unix_socket.py @@ -2,6 +2,7 @@ import os import sys import socket import atexit +import tempfile import cherrypy from cherrypy.test import helper @@ -9,7 +10,7 @@ from cherrypy._cpcompat import HTTPConnection USOCKET_PATH = os.path.join( - os.path.dirname(os.path.realpath(__file__)), + tempfile.gettempdir(), 'cp_test.sock' ) -- cgit v1.2.1 From af6b333e29e2e53253ed45323e0884f23b3c99f4 Mon Sep 17 00:00:00 2001 From: Nicole Negedly Date: Mon, 8 Feb 2016 17:25:04 +0000 Subject: typo/spelling error fixed --- docs/tutorials.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 36994a32..3b6e97de 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -5,7 +5,7 @@ Tutorials This tutorial will walk you through basic but complete CherryPy applications -that will show you common concepts as well as slightly more adavanced ones. +that will show you common concepts as well as slightly more advanced ones. .. contents:: :depth: 4 -- cgit v1.2.1 From 6a08d9f67aa996274df5d2de8408880ebae80452 Mon Sep 17 00:00:00 2001 From: Leonid Suprun Date: Sun, 28 Feb 2016 14:01:57 +0000 Subject: tutorials.rst edited online with Bitbucket: fix typo --- docs/tutorials.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 3b6e97de..e50fa1dd 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -183,7 +183,7 @@ Tutorial 4: Submit this form ############################ CherryPy is a web framework upon which you build web applications. -The most traditionnal shape taken by applications is through +The most traditional shape taken by applications is through an HTML user-interface speaking to your CherryPy server. Let's see how to handle HTML forms via the following -- cgit v1.2.1