mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-06 05:01:14 -07:00
Update cheroot-8.5.2
This commit is contained in:
parent
4ac151d7de
commit
182e5f553e
25 changed files with 2171 additions and 602 deletions
|
@ -1,36 +1,42 @@
|
|||
"""Command line tool for starting a Cheroot WSGI/HTTP server instance.
|
||||
|
||||
Basic usage::
|
||||
Basic usage:
|
||||
|
||||
# Start a server on 127.0.0.1:8000 with the default settings
|
||||
# for the WSGI app myapp/wsgi.py:application()
|
||||
cheroot myapp.wsgi
|
||||
.. code-block:: shell-session
|
||||
|
||||
# Start a server on 0.0.0.0:9000 with 8 threads
|
||||
# for the WSGI app myapp/wsgi.py:main_app()
|
||||
cheroot myapp.wsgi:main_app --bind 0.0.0.0:9000 --threads 8
|
||||
$ # Start a server on 127.0.0.1:8000 with the default settings
|
||||
$ # for the WSGI app myapp/wsgi.py:application()
|
||||
$ cheroot myapp.wsgi
|
||||
|
||||
# Start a server for the cheroot.server.Gateway subclass
|
||||
# myapp/gateway.py:HTTPGateway
|
||||
cheroot myapp.gateway:HTTPGateway
|
||||
$ # Start a server on 0.0.0.0:9000 with 8 threads
|
||||
$ # for the WSGI app myapp/wsgi.py:main_app()
|
||||
$ cheroot myapp.wsgi:main_app --bind 0.0.0.0:9000 --threads 8
|
||||
|
||||
# Start a server on the UNIX socket /var/spool/myapp.sock
|
||||
cheroot myapp.wsgi --bind /var/spool/myapp.sock
|
||||
$ # Start a server for the cheroot.server.Gateway subclass
|
||||
$ # myapp/gateway.py:HTTPGateway
|
||||
$ cheroot myapp.gateway:HTTPGateway
|
||||
|
||||
# Start a server on the abstract UNIX socket CherootServer
|
||||
cheroot myapp.wsgi --bind @CherootServer
|
||||
$ # Start a server on the UNIX socket /var/spool/myapp.sock
|
||||
$ cheroot myapp.wsgi --bind /var/spool/myapp.sock
|
||||
|
||||
$ # Start a server on the abstract UNIX socket CherootServer
|
||||
$ cheroot myapp.wsgi --bind @CherootServer
|
||||
|
||||
.. spelling::
|
||||
|
||||
cli
|
||||
"""
|
||||
|
||||
import argparse
|
||||
from importlib import import_module
|
||||
import os
|
||||
import sys
|
||||
import contextlib
|
||||
|
||||
import six
|
||||
|
||||
from . import server
|
||||
from . import wsgi
|
||||
from ._compat import suppress
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
@ -49,6 +55,7 @@ class TCPSocket(BindLocation):
|
|||
Args:
|
||||
address (str): Host name or IP address
|
||||
port (int): TCP port number
|
||||
|
||||
"""
|
||||
self.bind_addr = address, port
|
||||
|
||||
|
@ -64,9 +71,9 @@ class UnixSocket(BindLocation):
|
|||
class AbstractSocket(BindLocation):
|
||||
"""AbstractSocket."""
|
||||
|
||||
def __init__(self, addr):
|
||||
def __init__(self, abstract_socket):
|
||||
"""Initialize."""
|
||||
self.bind_addr = '\0{}'.format(self.abstract_socket)
|
||||
self.bind_addr = '\x00{sock_path}'.format(sock_path=abstract_socket)
|
||||
|
||||
|
||||
class Application:
|
||||
|
@ -77,8 +84,8 @@ class Application:
|
|||
"""Read WSGI app/Gateway path string and import application module."""
|
||||
mod_path, _, app_path = full_path.partition(':')
|
||||
app = getattr(import_module(mod_path), app_path or 'application')
|
||||
|
||||
with contextlib.suppress(TypeError):
|
||||
# suppress the `TypeError` exception, just in case `app` is not a class
|
||||
with suppress(TypeError):
|
||||
if issubclass(app, server.Gateway):
|
||||
return GatewayYo(app)
|
||||
|
||||
|
@ -128,8 +135,17 @@ class GatewayYo:
|
|||
|
||||
def parse_wsgi_bind_location(bind_addr_string):
|
||||
"""Convert bind address string to a BindLocation."""
|
||||
# if the string begins with an @ symbol, use an abstract socket,
|
||||
# this is the first condition to verify, otherwise the urlparse
|
||||
# validation would detect //@<value> as a valid url with a hostname
|
||||
# with value: "<value>" and port: None
|
||||
if bind_addr_string.startswith('@'):
|
||||
return AbstractSocket(bind_addr_string[1:])
|
||||
|
||||
# try and match for an IP/hostname and port
|
||||
match = six.moves.urllib.parse.urlparse('//{}'.format(bind_addr_string))
|
||||
match = six.moves.urllib.parse.urlparse(
|
||||
'//{addr}'.format(addr=bind_addr_string),
|
||||
)
|
||||
try:
|
||||
addr = match.hostname
|
||||
port = match.port
|
||||
|
@ -139,9 +155,6 @@ def parse_wsgi_bind_location(bind_addr_string):
|
|||
pass
|
||||
|
||||
# else, assume a UNIX socket path
|
||||
# if the string begins with an @ symbol, use an abstract socket
|
||||
if bind_addr_string.startswith('@'):
|
||||
return AbstractSocket(bind_addr_string[1:])
|
||||
return UnixSocket(path=bind_addr_string)
|
||||
|
||||
|
||||
|
@ -151,70 +164,70 @@ def parse_wsgi_bind_addr(bind_addr_string):
|
|||
|
||||
|
||||
_arg_spec = {
|
||||
'_wsgi_app': dict(
|
||||
metavar='APP_MODULE',
|
||||
type=Application.resolve,
|
||||
help='WSGI application callable or cheroot.server.Gateway subclass',
|
||||
),
|
||||
'--bind': dict(
|
||||
metavar='ADDRESS',
|
||||
dest='bind_addr',
|
||||
type=parse_wsgi_bind_addr,
|
||||
default='[::1]:8000',
|
||||
help='Network interface to listen on (default: [::1]:8000)',
|
||||
),
|
||||
'--chdir': dict(
|
||||
metavar='PATH',
|
||||
type=os.chdir,
|
||||
help='Set the working directory',
|
||||
),
|
||||
'--server-name': dict(
|
||||
dest='server_name',
|
||||
type=str,
|
||||
help='Web server name to be advertised via Server HTTP header',
|
||||
),
|
||||
'--threads': dict(
|
||||
metavar='INT',
|
||||
dest='numthreads',
|
||||
type=int,
|
||||
help='Minimum number of worker threads',
|
||||
),
|
||||
'--max-threads': dict(
|
||||
metavar='INT',
|
||||
dest='max',
|
||||
type=int,
|
||||
help='Maximum number of worker threads',
|
||||
),
|
||||
'--timeout': dict(
|
||||
metavar='INT',
|
||||
dest='timeout',
|
||||
type=int,
|
||||
help='Timeout in seconds for accepted connections',
|
||||
),
|
||||
'--shutdown-timeout': dict(
|
||||
metavar='INT',
|
||||
dest='shutdown_timeout',
|
||||
type=int,
|
||||
help='Time in seconds to wait for worker threads to cleanly exit',
|
||||
),
|
||||
'--request-queue-size': dict(
|
||||
metavar='INT',
|
||||
dest='request_queue_size',
|
||||
type=int,
|
||||
help='Maximum number of queued connections',
|
||||
),
|
||||
'--accepted-queue-size': dict(
|
||||
metavar='INT',
|
||||
dest='accepted_queue_size',
|
||||
type=int,
|
||||
help='Maximum number of active requests in queue',
|
||||
),
|
||||
'--accepted-queue-timeout': dict(
|
||||
metavar='INT',
|
||||
dest='accepted_queue_timeout',
|
||||
type=int,
|
||||
help='Timeout in seconds for putting requests into queue',
|
||||
),
|
||||
'_wsgi_app': {
|
||||
'metavar': 'APP_MODULE',
|
||||
'type': Application.resolve,
|
||||
'help': 'WSGI application callable or cheroot.server.Gateway subclass',
|
||||
},
|
||||
'--bind': {
|
||||
'metavar': 'ADDRESS',
|
||||
'dest': 'bind_addr',
|
||||
'type': parse_wsgi_bind_addr,
|
||||
'default': '[::1]:8000',
|
||||
'help': 'Network interface to listen on (default: [::1]:8000)',
|
||||
},
|
||||
'--chdir': {
|
||||
'metavar': 'PATH',
|
||||
'type': os.chdir,
|
||||
'help': 'Set the working directory',
|
||||
},
|
||||
'--server-name': {
|
||||
'dest': 'server_name',
|
||||
'type': str,
|
||||
'help': 'Web server name to be advertised via Server HTTP header',
|
||||
},
|
||||
'--threads': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'numthreads',
|
||||
'type': int,
|
||||
'help': 'Minimum number of worker threads',
|
||||
},
|
||||
'--max-threads': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'max',
|
||||
'type': int,
|
||||
'help': 'Maximum number of worker threads',
|
||||
},
|
||||
'--timeout': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'timeout',
|
||||
'type': int,
|
||||
'help': 'Timeout in seconds for accepted connections',
|
||||
},
|
||||
'--shutdown-timeout': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'shutdown_timeout',
|
||||
'type': int,
|
||||
'help': 'Time in seconds to wait for worker threads to cleanly exit',
|
||||
},
|
||||
'--request-queue-size': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'request_queue_size',
|
||||
'type': int,
|
||||
'help': 'Maximum number of queued connections',
|
||||
},
|
||||
'--accepted-queue-size': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'accepted_queue_size',
|
||||
'type': int,
|
||||
'help': 'Maximum number of active requests in queue',
|
||||
},
|
||||
'--accepted-queue-timeout': {
|
||||
'metavar': 'INT',
|
||||
'dest': 'accepted_queue_timeout',
|
||||
'type': int,
|
||||
'help': 'Timeout in seconds for putting requests into queue',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue