Hello community, here is the log from the commit of package python3-CherryPy for openSUSE:Factory checked in at 2015-12-17 15:54:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-CherryPy (Old) and /work/SRC/openSUSE:Factory/.python3-CherryPy.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-CherryPy" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-CherryPy/python3-CherryPy.changes 2015-07-03 00:18:25.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python3-CherryPy.new/python3-CherryPy.changes 2015-12-17 15:54:47.000000000 +0100 @@ -1,0 +2,6 @@ +Sat Dec 5 22:46:46 UTC 2015 - a...@gmx.de + +- update to version 3.8.1: + * no changelog available + +------------------------------------------------------------------- Old: ---- CherryPy-3.8.0.tar.gz New: ---- CherryPy-3.8.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-CherryPy.spec ++++++ --- /var/tmp/diff_new_pack.NpWuvF/_old 2015-12-17 15:54:48.000000000 +0100 +++ /var/tmp/diff_new_pack.NpWuvF/_new 2015-12-17 15:54:48.000000000 +0100 @@ -17,7 +17,7 @@ Name: python3-CherryPy -Version: 3.8.0 +Version: 3.8.1 Release: 0 Url: http://www.cherrypy.org Summary: Object-Oriented HTTP framework ++++++ CherryPy-3.8.0.tar.gz -> CherryPy-3.8.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/CherryPy.egg-info/PKG-INFO new/CherryPy-3.8.1/CherryPy.egg-info/PKG-INFO --- old/CherryPy-3.8.0/CherryPy.egg-info/PKG-INFO 2015-06-26 17:30:45.000000000 +0200 +++ new/CherryPy-3.8.1/CherryPy.egg-info/PKG-INFO 2015-12-03 01:13:05.000000000 +0100 @@ -1,37 +1,37 @@ -Metadata-Version: 1.1 -Name: CherryPy -Version: 3.8.0 -Summary: Object-Oriented HTTP framework -Home-page: http://www.cherrypy.org -Author: CherryPy Team -Author-email: t...@cherrypy.org -License: BSD -Description: CherryPy is a pythonic, object-oriented HTTP framework -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: Freely Distributable -Classifier: Operating System :: OS Independent -Classifier: Framework :: CherryPy -Classifier: License :: OSI Approved :: BSD License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.3 -Classifier: Programming Language :: Python :: 2.4 -Classifier: Programming Language :: Python :: 2.5 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: Implementation -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: Jython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server -Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Metadata-Version: 1.1 +Name: CherryPy +Version: 3.8.1 +Summary: Object-Oriented HTTP framework +Home-page: http://www.cherrypy.org +Author: CherryPy Team +Author-email: t...@cherrypy.org +License: BSD +Description: CherryPy is a pythonic, object-oriented HTTP framework +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: Freely Distributable +Classifier: Operating System :: OS Independent +Classifier: Framework :: CherryPy +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.3 +Classifier: Programming Language :: Python :: 2.4 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: Implementation +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: Jython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/CherryPy.egg-info/SOURCES.txt new/CherryPy-3.8.1/CherryPy.egg-info/SOURCES.txt --- old/CherryPy-3.8.0/CherryPy.egg-info/SOURCES.txt 2015-06-26 17:31:03.000000000 +0200 +++ new/CherryPy-3.8.1/CherryPy.egg-info/SOURCES.txt 2015-12-03 01:13:06.000000000 +0100 @@ -107,6 +107,7 @@ cherrypy/test/test_tutorials.py cherrypy/test/test_virtualhost.py cherrypy/test/test_wsgi_ns.py +cherrypy/test/test_wsgi_unix_socket.py cherrypy/test/test_wsgi_vhost.py cherrypy/test/test_wsgiapps.py cherrypy/test/test_xmlrpc.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/PKG-INFO new/CherryPy-3.8.1/PKG-INFO --- old/CherryPy-3.8.0/PKG-INFO 2015-06-26 17:31:07.000000000 +0200 +++ new/CherryPy-3.8.1/PKG-INFO 2015-12-03 01:13:06.000000000 +0100 @@ -1,37 +1,37 @@ -Metadata-Version: 1.1 -Name: CherryPy -Version: 3.8.0 -Summary: Object-Oriented HTTP framework -Home-page: http://www.cherrypy.org -Author: CherryPy Team -Author-email: t...@cherrypy.org -License: BSD -Description: CherryPy is a pythonic, object-oriented HTTP framework -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: Freely Distributable -Classifier: Operating System :: OS Independent -Classifier: Framework :: CherryPy -Classifier: License :: OSI Approved :: BSD License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.3 -Classifier: Programming Language :: Python :: 2.4 -Classifier: Programming Language :: Python :: 2.5 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: Implementation -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: Jython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application -Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server -Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Metadata-Version: 1.1 +Name: CherryPy +Version: 3.8.1 +Summary: Object-Oriented HTTP framework +Home-page: http://www.cherrypy.org +Author: CherryPy Team +Author-email: t...@cherrypy.org +License: BSD +Description: CherryPy is a pythonic, object-oriented HTTP framework +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: Freely Distributable +Classifier: Operating System :: OS Independent +Classifier: Framework :: CherryPy +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.3 +Classifier: Programming Language :: Python :: 2.4 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: Implementation +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: Jython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/__init__.py new/CherryPy-3.8.1/cherrypy/__init__.py --- old/CherryPy-3.8.0/cherrypy/__init__.py 2015-06-26 16:40:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/__init__.py 2015-11-25 07:01:28.000000000 +0100 @@ -56,7 +56,7 @@ These API's are described in the `CherryPy specification <https://bitbucket.org/cherrypy/cherrypy/wiki/CherryPySpec>`_. """ -__version__ = "3.8.0" +__version__ = "3.8.1" from cherrypy._cpcompat import urljoin as _urljoin, urlencode as _urlencode from cherrypy._cpcompat import basestring, unicodestr, set diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/_cpcompat_subprocess.py new/CherryPy-3.8.1/cherrypy/_cpcompat_subprocess.py --- old/CherryPy-3.8.0/cherrypy/_cpcompat_subprocess.py 2014-06-27 22:32:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/_cpcompat_subprocess.py 2015-11-25 07:01:28.000000000 +0100 @@ -883,7 +883,7 @@ startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = _subprocess.SW_HIDE comspec = os.environ.get("COMSPEC", "cmd.exe") - args = '{} /c "{}"'.format(comspec, args) + args = '{0} /c "{1}"'.format(comspec, args) if (_subprocess.GetVersion() >= 0x80000000 or os.path.basename(comspec).lower() == "command.com"): # Win9x, or using command.com on NT. We need to @@ -1029,7 +1029,7 @@ elif sig == signal.CTRL_BREAK_EVENT: os.kill(self.pid, signal.CTRL_BREAK_EVENT) else: - raise ValueError("Unsupported signal: {}".format(sig)) + raise ValueError("Unsupported signal: {0}".format(sig)) def terminate(self): """Terminates the process diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/_cpwsgi.py new/CherryPy-3.8.1/cherrypy/_cpwsgi.py --- old/CherryPy-3.8.0/cherrypy/_cpwsgi.py 2014-06-27 22:32:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/_cpwsgi.py 2015-11-25 07:01:28.000000000 +0100 @@ -296,7 +296,8 @@ """Create a Request object using environ.""" env = self.environ.get - local = httputil.Host('', int(env('SERVER_PORT', 80)), + local = httputil.Host('', + int(env('SERVER_PORT', 80) or -1), env('SERVER_NAME', '')) remote = httputil.Host(env('REMOTE_ADDR', ''), int(env('REMOTE_PORT', -1) or -1), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/lib/cpstats.py new/CherryPy-3.8.1/cherrypy/lib/cpstats.py --- old/CherryPy-3.8.0/cherrypy/lib/cpstats.py 2014-06-27 22:32:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/lib/cpstats.py 2015-12-03 00:31:04.000000000 +0100 @@ -210,6 +210,7 @@ # -------------------- CherryPy Applications Statistics --------------------- # +import sys import threading import time @@ -294,6 +295,11 @@ average_uriset_time = lambda s: s['Count'] and (s['Sum'] / s['Count']) or 0 +def _get_threading_ident(): + if sys.version_info >= (3, 3): + return threading.get_ident() + return threading._get_ident() + class StatsTool(cherrypy.Tool): """Record various information about the current request.""" @@ -322,7 +328,7 @@ appstats['Current Requests'] += 1 appstats['Total Requests'] += 1 - appstats['Requests'][threading._get_ident()] = { + appstats['Requests'][_get_threading_ident()] = { 'Bytes Read': None, 'Bytes Written': None, # Use a lambda so the ip gets updated by tools.proxy later @@ -339,7 +345,7 @@ debug=False, **kwargs): """Record the end of a request.""" resp = cherrypy.serving.response - w = appstats['Requests'][threading._get_ident()] + w = appstats['Requests'][_get_threading_ident()] r = cherrypy.request.rfile.bytes_read w['Bytes Read'] = r @@ -605,7 +611,13 @@ """Return ([headers], [rows]) for the given collection.""" # E.g., the 'Requests' dict. headers = [] - for record in v.itervalues(): + try: + # python2 + vals = v.itervalues() + except AttributeError: + # python3 + vals = v.values() + for record in vals: for k3 in record: format = formatting.get(k3, missing) if format is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/lib/profiler.py new/CherryPy-3.8.1/cherrypy/lib/profiler.py --- old/CherryPy-3.8.0/cherrypy/lib/profiler.py 2014-06-27 22:32:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/lib/profiler.py 2015-11-25 07:01:28.000000000 +0100 @@ -8,7 +8,7 @@ from cherrypy.lib import profiler class Root: - p = profile.Profiler("/path/to/profile/dir") + p = profiler.Profiler("/path/to/profile/dir") def index(self): self.p.run(self._index) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/test/test_logging.py new/CherryPy-3.8.1/cherrypy/test/test_logging.py --- old/CherryPy-3.8.0/cherrypy/test/test_logging.py 2015-02-02 14:57:45.000000000 +0100 +++ new/CherryPy-3.8.1/cherrypy/test/test_logging.py 2015-11-25 07:01:28.000000000 +0100 @@ -169,7 +169,8 @@ try: self.getPage("/error") self.assertInBody("raise ValueError()") - self.assertLog(0, 'HTTP Traceback (most recent call last):') - self.assertLog(-3, 'raise ValueError()') + self.assertLog(0, 'HTTP') + self.assertLog(1, 'Traceback (most recent call last):') + self.assertLog(-2, 'raise ValueError()') finally: ignore.pop() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/test/test_request_obj.py new/CherryPy-3.8.1/cherrypy/test/test_request_obj.py --- old/CherryPy-3.8.0/cherrypy/test/test_request_obj.py 2014-06-27 22:32:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/test/test_request_obj.py 2015-11-25 07:01:28.000000000 +0100 @@ -377,15 +377,27 @@ self.getPage(uri) self.assertStatus(200) - # query string parameters are part of the URI, so if they are wrong - # for a particular handler, the status MUST be a 404. error_msgs = [ 'Missing parameters', 'Nothing matches the given URI', 'Multiple values for parameters', 'Unexpected query string parameters', 'Unexpected body parameters', + 'Invalid path in Request-URI', + 'Illegal #fragment in Request-URI', ] + + # uri should be tested for valid absolute path, the status must be 400. + for uri, error_idx in ( + ('invalid/path/without/leading/slash', 5), + ('/valid/path#invalid=fragment', 6), + ): + self.getPage(uri) + self.assertStatus(400) + self.assertInBody(error_msgs[error_idx]) + + # query string parameters are part of the URI, so if they are wrong + # for a particular handler, the status MUST be a 404. for uri, msg in ( ('/paramerrors/one_positional', error_msgs[0]), ('/paramerrors/one_positional?foo=foo', error_msgs[0]), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/test/test_wsgi_unix_socket.py new/CherryPy-3.8.1/cherrypy/test/test_wsgi_unix_socket.py --- old/CherryPy-3.8.0/cherrypy/test/test_wsgi_unix_socket.py 1970-01-01 01:00:00.000000000 +0100 +++ new/CherryPy-3.8.1/cherrypy/test/test_wsgi_unix_socket.py 2015-11-25 07:01:28.000000000 +0100 @@ -0,0 +1,104 @@ +import os +import sys +import socket +import atexit + +import cherrypy +from cherrypy.test import helper +from cherrypy._cpcompat import HTTPConnection + + +USOCKET_PATH = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'cp_test.sock' +) + + +class USocketHTTPConnection(HTTPConnection): + """ + HTTPConnection over a unix socket. + """ + + def __init__(self, path): + HTTPConnection.__init__(self, 'localhost') + self.path = path + + def __call__(self, *args, **kwargs): + """ + Catch-all method just to present itself as a constructor for the + HTTPConnection. + """ + return self + + def connect(self): + """ + Override the connect method and assign a unix socket as a transport. + """ + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(self.path) + self.sock = sock + atexit.register(lambda: os.remove(self.path)) + + +def skip_on_windows(method): + """ + Decorator to skip the method call if the test is executing on Windows. + """ + def wrapper(self): + if sys.platform == "win32": + return self.skip("No UNIX Socket support in Windows.") + else: + return method(self) + wrapper.__doc__ = method.__doc__ + wrapper.__name__ = method.__name__ + return wrapper + + + +class WSGI_UnixSocket_Test(helper.CPWebCase): + """ + Test basic behavior on a cherrypy wsgi server listening + on a unix socket. + + It exercises the config option `server.socket_file`. + """ + HTTP_CONN = USocketHTTPConnection(USOCKET_PATH) + + + @staticmethod + def setup_server(): + class Root(object): + + @cherrypy.expose + def index(self): + return "Test OK" + + @cherrypy.expose + def error(self): + raise Exception("Invalid page") + + config = { + 'server.socket_file': USOCKET_PATH + } + cherrypy.config.update(config) + cherrypy.tree.mount(Root()) + + def tearDown(self): + cherrypy.config.update({'server.socket_file': None}) + + @skip_on_windows + def test_simple_request(self): + self.getPage("/") + self.assertStatus("200 OK") + self.assertInBody("Test OK") + + @skip_on_windows + def test_not_found(self): + self.getPage("/invalid_path") + self.assertStatus("404 Not Found") + + @skip_on_windows + def test_internal_error(self): + self.getPage("/error") + self.assertStatus("500 Internal Server Error") + self.assertInBody("Invalid page") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/wsgiserver/wsgiserver2.py new/CherryPy-3.8.1/cherrypy/wsgiserver/wsgiserver2.py --- old/CherryPy-3.8.0/cherrypy/wsgiserver/wsgiserver2.py 2015-06-26 16:40:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/wsgiserver/wsgiserver2.py 2015-11-25 07:01:28.000000000 +0100 @@ -75,7 +75,8 @@ 'WorkerThread', 'ThreadPool', 'SSLAdapter', 'CherryPyWSGIServer', 'Gateway', 'WSGIGateway', 'WSGIGateway_10', 'WSGIGateway_u0', - 'WSGIPathInfoDispatcher', 'get_ssl_adapter_class'] + 'WSGIPathInfoDispatcher', 'get_ssl_adapter_class', + 'socket_errors_to_ignore'] import os try: @@ -674,6 +675,10 @@ # uri may be an abs_path (including "http://host.domain.tld"); scheme, authority, path = self.parse_request_uri(uri) + if path is None: + self.simple_response("400 Bad Request", + "Invalid path in Request-URI.") + return False if NUMBER_SIGN in path: self.simple_response("400 Bad Request", "Illegal #fragment in Request-URI.") @@ -1757,7 +1762,7 @@ timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/3.8.0" + version = "CherryPy/3.8.1" """A version string for the HTTPServer.""" software = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/cherrypy/wsgiserver/wsgiserver3.py new/CherryPy-3.8.1/cherrypy/wsgiserver/wsgiserver3.py --- old/CherryPy-3.8.0/cherrypy/wsgiserver/wsgiserver3.py 2015-06-26 16:40:38.000000000 +0200 +++ new/CherryPy-3.8.1/cherrypy/wsgiserver/wsgiserver3.py 2015-11-25 07:01:28.000000000 +0100 @@ -75,7 +75,8 @@ 'WorkerThread', 'ThreadPool', 'SSLAdapter', 'CherryPyWSGIServer', 'Gateway', 'WSGIGateway', 'WSGIGateway_10', 'WSGIGateway_u0', - 'WSGIPathInfoDispatcher', 'get_ssl_adapter_class'] + 'WSGIPathInfoDispatcher', 'get_ssl_adapter_class', + 'socket_errors_to_ignore'] import os try: @@ -650,6 +651,10 @@ # uri may be an abs_path (including "http://host.domain.tld"); scheme, authority, path = self.parse_request_uri(uri) + if path is None: + self.simple_response("400 Bad Request", + "Invalid path in Request-URI.") + return False if NUMBER_SIGN in path: self.simple_response("400 Bad Request", "Illegal #fragment in Request-URI.") @@ -1468,7 +1473,7 @@ timeout = 10 """The timeout in seconds for accepted connections (default 10).""" - version = "CherryPy/3.8.0" + version = "CherryPy/3.8.1" """A version string for the HTTPServer.""" software = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/setup.cfg new/CherryPy-3.8.1/setup.cfg --- old/CherryPy-3.8.0/setup.cfg 2015-06-26 17:31:08.000000000 +0200 +++ new/CherryPy-3.8.1/setup.cfg 2015-12-03 01:13:06.000000000 +0100 @@ -1,14 +1,14 @@ -[sdist] -formats = gztar,zip - -[nosetests] -where = cherrypy -logging-filter = cherrypy -verbosity = 2 -nocapture = True - -[egg_info] -tag_svn_revision = 0 -tag_date = 0 -tag_build = - +[sdist] +formats = gztar,zip + +[nosetests] +where = cherrypy +logging-filter = cherrypy +verbosity = 2 +nocapture = True + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-3.8.0/setup.py new/CherryPy-3.8.1/setup.py --- old/CherryPy-3.8.0/setup.py 2015-06-26 16:40:38.000000000 +0200 +++ new/CherryPy-3.8.1/setup.py 2015-11-25 07:01:28.000000000 +0100 @@ -36,7 +36,7 @@ # arguments for the setup command ############################################################################### name = "CherryPy" -version = "3.8.0" +version = "3.8.1" desc = "Object-Oriented HTTP framework" long_desc = "CherryPy is a pythonic, object-oriented HTTP framework" classifiers = [