mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-14 10:36:57 -07:00
Update CherryPy to 5.1.0
This commit is contained in:
parent
f9825410dc
commit
b2304992e5
25 changed files with 2383 additions and 130 deletions
|
@ -68,7 +68,7 @@ class SSL_fileobject(wsgiserver.CP_fileobject):
|
|||
time.sleep(self.ssl_retry)
|
||||
except SSL.WantWriteError:
|
||||
time.sleep(self.ssl_retry)
|
||||
except SSL.SysCallError, e:
|
||||
except SSL.SysCallError as e:
|
||||
if is_reader and e.args == (-1, 'Unexpected EOF'):
|
||||
return ""
|
||||
|
||||
|
@ -76,7 +76,7 @@ class SSL_fileobject(wsgiserver.CP_fileobject):
|
|||
if is_reader and errnum in wsgiserver.socket_errors_to_ignore:
|
||||
return ""
|
||||
raise socket.error(errnum)
|
||||
except SSL.Error, e:
|
||||
except SSL.Error as e:
|
||||
if is_reader and e.args == (-1, 'Unexpected EOF'):
|
||||
return ""
|
||||
|
||||
|
|
|
@ -75,7 +75,8 @@ __all__ = ['HTTPRequest', 'HTTPConnection', 'HTTPServer',
|
|||
'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:
|
||||
|
@ -83,19 +84,33 @@ try:
|
|||
except:
|
||||
import Queue as queue
|
||||
import re
|
||||
import rfc822
|
||||
import email.utils
|
||||
import socket
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import traceback as traceback_
|
||||
import operator
|
||||
from urllib import unquote
|
||||
import warnings
|
||||
import errno
|
||||
import logging
|
||||
try:
|
||||
# prefer slower Python-based io module
|
||||
import _pyio as io
|
||||
except ImportError:
|
||||
# Python 2.6
|
||||
import io
|
||||
|
||||
|
||||
if 'win' in sys.platform and hasattr(socket, "AF_INET6"):
|
||||
if not hasattr(socket, 'IPPROTO_IPV6'):
|
||||
socket.IPPROTO_IPV6 = 41
|
||||
if not hasattr(socket, 'IPV6_V6ONLY'):
|
||||
socket.IPV6_V6ONLY = 27
|
||||
try:
|
||||
import cStringIO as StringIO
|
||||
except ImportError:
|
||||
import StringIO
|
||||
DEFAULT_BUFFER_SIZE = -1
|
||||
|
||||
|
||||
DEFAULT_BUFFER_SIZE = io.DEFAULT_BUFFER_SIZE
|
||||
|
||||
|
||||
class FauxSocket(object):
|
||||
|
@ -109,23 +124,6 @@ _fileobject_uses_str_type = isinstance(
|
|||
socket._fileobject(FauxSocket())._rbuf, basestring)
|
||||
del FauxSocket # this class is not longer required for anything.
|
||||
|
||||
import threading
|
||||
import time
|
||||
import traceback
|
||||
|
||||
|
||||
def format_exc(limit=None):
|
||||
"""Like print_exc() but return a string. Backport for Python 2.3."""
|
||||
try:
|
||||
etype, value, tb = sys.exc_info()
|
||||
return ''.join(traceback.format_exception(etype, value, tb, limit))
|
||||
finally:
|
||||
etype = value = tb = None
|
||||
|
||||
import operator
|
||||
|
||||
from urllib import unquote
|
||||
import warnings
|
||||
|
||||
if sys.version_info >= (3, 0):
|
||||
bytestr = bytes
|
||||
|
@ -165,8 +163,6 @@ ASTERISK = ntob('*')
|
|||
FORWARD_SLASH = ntob('/')
|
||||
quoted_slash = re.compile(ntob("(?i)%2F"))
|
||||
|
||||
import errno
|
||||
|
||||
|
||||
def plat_specific_errors(*errnames):
|
||||
"""Return error numbers for all errors in errnames on this platform.
|
||||
|
@ -210,7 +206,6 @@ comma_separated_headers = [
|
|||
]
|
||||
|
||||
|
||||
import logging
|
||||
if not hasattr(logging, 'statistics'):
|
||||
logging.statistics = {}
|
||||
|
||||
|
@ -674,6 +669,10 @@ class HTTPRequest(object):
|
|||
|
||||
# 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.")
|
||||
|
@ -970,7 +969,7 @@ class HTTPRequest(object):
|
|||
self.rfile.read(remaining)
|
||||
|
||||
if "date" not in hkeys:
|
||||
self.outheaders.append(("Date", rfc822.formatdate()))
|
||||
self.outheaders.append(("Date", email.utils.formatdate()))
|
||||
|
||||
if "server" not in hkeys:
|
||||
self.outheaders.append(("Server", self.server.server_name))
|
||||
|
@ -1051,7 +1050,7 @@ class CP_fileobject(socket._fileobject):
|
|||
if size < 0:
|
||||
# Read until EOF
|
||||
# reset _rbuf. we consume it via buf.
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
while True:
|
||||
data = self.recv(rbufsize)
|
||||
if not data:
|
||||
|
@ -1066,12 +1065,12 @@ class CP_fileobject(socket._fileobject):
|
|||
# return.
|
||||
buf.seek(0)
|
||||
rv = buf.read(size)
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
self._rbuf.write(buf.read())
|
||||
return rv
|
||||
|
||||
# reset _rbuf. we consume it via buf.
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
while True:
|
||||
left = size - buf_len
|
||||
# recv() will malloc the amount of memory given as its
|
||||
|
@ -1109,7 +1108,7 @@ class CP_fileobject(socket._fileobject):
|
|||
buf.seek(0)
|
||||
bline = buf.readline(size)
|
||||
if bline.endswith('\n') or len(bline) == size:
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
self._rbuf.write(buf.read())
|
||||
return bline
|
||||
del bline
|
||||
|
@ -1120,7 +1119,7 @@ class CP_fileobject(socket._fileobject):
|
|||
buf.seek(0)
|
||||
buffers = [buf.read()]
|
||||
# reset _rbuf. we consume it via buf.
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
data = None
|
||||
recv = self.recv
|
||||
while data != "\n":
|
||||
|
@ -1132,7 +1131,7 @@ class CP_fileobject(socket._fileobject):
|
|||
|
||||
buf.seek(0, 2) # seek end
|
||||
# reset _rbuf. we consume it via buf.
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
while True:
|
||||
data = self.recv(self._rbufsize)
|
||||
if not data:
|
||||
|
@ -1154,11 +1153,11 @@ class CP_fileobject(socket._fileobject):
|
|||
if buf_len >= size:
|
||||
buf.seek(0)
|
||||
rv = buf.read(size)
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
self._rbuf.write(buf.read())
|
||||
return rv
|
||||
# reset _rbuf. we consume it via buf.
|
||||
self._rbuf = StringIO.StringIO()
|
||||
self._rbuf = io.BytesIO()
|
||||
while True:
|
||||
data = self.recv(self._rbufsize)
|
||||
if not data:
|
||||
|
@ -1757,7 +1756,7 @@ class HTTPServer(object):
|
|||
timeout = 10
|
||||
"""The timeout in seconds for accepted connections (default 10)."""
|
||||
|
||||
version = "CherryPy/3.8.0"
|
||||
version = "CherryPy/5.1.0"
|
||||
"""A version string for the HTTPServer."""
|
||||
|
||||
software = None
|
||||
|
@ -1884,25 +1883,6 @@ class HTTPServer(object):
|
|||
if self.software is None:
|
||||
self.software = "%s Server" % self.version
|
||||
|
||||
# SSL backward compatibility
|
||||
if (self.ssl_adapter is None and
|
||||
getattr(self, 'ssl_certificate', None) and
|
||||
getattr(self, 'ssl_private_key', None)):
|
||||
warnings.warn(
|
||||
"SSL attributes are deprecated in CherryPy 3.2, and will "
|
||||
"be removed in CherryPy 3.3. Use an ssl_adapter attribute "
|
||||
"instead.",
|
||||
DeprecationWarning
|
||||
)
|
||||
try:
|
||||
from cherrypy.wsgiserver.ssl_pyopenssl import pyOpenSSLAdapter
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
self.ssl_adapter = pyOpenSSLAdapter(
|
||||
self.ssl_certificate, self.ssl_private_key,
|
||||
getattr(self, 'ssl_certificate_chain', None))
|
||||
|
||||
# Select the appropriate socket
|
||||
if isinstance(self.bind_addr, basestring):
|
||||
# AF_UNIX socket
|
||||
|
@ -1915,7 +1895,7 @@ class HTTPServer(object):
|
|||
|
||||
# So everyone can access the socket...
|
||||
try:
|
||||
os.chmod(self.bind_addr, 511) # 0777
|
||||
os.chmod(self.bind_addr, 0o777)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
@ -1984,7 +1964,7 @@ class HTTPServer(object):
|
|||
sys.stderr.write(msg + '\n')
|
||||
sys.stderr.flush()
|
||||
if traceback:
|
||||
tblines = format_exc()
|
||||
tblines = traceback_.format_exc()
|
||||
sys.stderr.write(tblines)
|
||||
sys.stderr.flush()
|
||||
|
||||
|
@ -2186,7 +2166,7 @@ ssl_adapters = {
|
|||
}
|
||||
|
||||
|
||||
def get_ssl_adapter_class(name='pyopenssl'):
|
||||
def get_ssl_adapter_class(name='builtin'):
|
||||
"""Return an SSL adapter class for the given name."""
|
||||
adapter = ssl_adapters[name.lower()]
|
||||
if isinstance(adapter, basestring):
|
||||
|
|
2187
lib/cherrypy/wsgiserver/wsgiserver3.py
Normal file
2187
lib/cherrypy/wsgiserver/wsgiserver3.py
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue