You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.8 KiB
68 lines
2.8 KiB
"""WSGI server interface (see PEP 333). This adds some CP-specific bits to
|
|
the framework-agnostic wsgiserver package.
|
|
"""
|
|
|
|
import cherrypy
|
|
from cherrypy import wsgiserver
|
|
|
|
|
|
class CPHTTPRequest(wsgiserver.HTTPRequest):
|
|
|
|
def __init__(self, sendall, environ, wsgi_app):
|
|
s = cherrypy.server
|
|
self.max_request_header_size = s.max_request_header_size or 0
|
|
self.max_request_body_size = s.max_request_body_size or 0
|
|
wsgiserver.HTTPRequest.__init__(self, sendall, environ, wsgi_app)
|
|
|
|
|
|
class CPHTTPConnection(wsgiserver.HTTPConnection):
|
|
|
|
RequestHandlerClass = CPHTTPRequest
|
|
|
|
|
|
class CPWSGIServer(wsgiserver.CherryPyWSGIServer):
|
|
"""Wrapper for wsgiserver.CherryPyWSGIServer.
|
|
|
|
wsgiserver has been designed to not reference CherryPy in any way,
|
|
so that it can be used in other frameworks and applications. Therefore,
|
|
we wrap it here, so we can set our own mount points from cherrypy.tree
|
|
and apply some attributes from config -> cherrypy.server -> wsgiserver.
|
|
"""
|
|
|
|
ConnectionClass = CPHTTPConnection
|
|
|
|
def __init__(self, server_adapter=cherrypy.server):
|
|
self.server_adapter = server_adapter
|
|
|
|
# We have to make custom subclasses of wsgiserver internals here
|
|
# so that our server.* attributes get applied to every request.
|
|
class _CPHTTPRequest(wsgiserver.HTTPRequest):
|
|
def __init__(self, sendall, environ, wsgi_app):
|
|
s = server_adapter
|
|
self.max_request_header_size = s.max_request_header_size or 0
|
|
self.max_request_body_size = s.max_request_body_size or 0
|
|
wsgiserver.HTTPRequest.__init__(self, sendall, environ, wsgi_app)
|
|
class _CPHTTPConnection(wsgiserver.HTTPConnection):
|
|
RequestHandlerClass = _CPHTTPRequest
|
|
self.ConnectionClass = _CPHTTPConnection
|
|
|
|
server_name = (self.server_adapter.socket_host or
|
|
self.server_adapter.socket_file or
|
|
None)
|
|
|
|
s = wsgiserver.CherryPyWSGIServer
|
|
s.__init__(self, server_adapter.bind_addr, cherrypy.tree,
|
|
self.server_adapter.thread_pool,
|
|
server_name,
|
|
max = self.server_adapter.thread_pool_max,
|
|
request_queue_size = self.server_adapter.socket_queue_size,
|
|
timeout = self.server_adapter.socket_timeout,
|
|
shutdown_timeout = self.server_adapter.shutdown_timeout,
|
|
)
|
|
self.protocol = self.server_adapter.protocol_version
|
|
self.nodelay = self.server_adapter.nodelay
|
|
self.ssl_context = self.server_adapter.ssl_context
|
|
self.ssl_certificate = self.server_adapter.ssl_certificate
|
|
self.ssl_certificate_chain = self.server_adapter.ssl_certificate_chain
|
|
self.ssl_private_key = self.server_adapter.ssl_private_key
|
|
|
|
|