Source code for consensys_utils.config.schema.gunicorn

"""
    consensys_utils.config.schema.gunicorn
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Gunicorn configuration schema

    :copyright: Copyright 2017 by ConsenSys France.
    :license: BSD, see :ref:`license` for more details.
"""

import cfg_loader
from cfg_loader.fields import Path, UnwrapNested
from marshmallow import fields


class DebuggingConfigSchema(cfg_loader.ConfigSchema):
    """Debugging configuration

    c.f http://docs.gunicorn.org/en/stable/settings.html#debugging
    """

    reload = fields.Bool(missing=False)
    reload_engine = fields.Str(missing='auto')
    reload_extra_files = fields.List(Path(), missing=[])
    spew = fields.Bool(missing=False)
    check_config = fields.Bool(missing=False)


[docs]class LoggingConfigSchema(cfg_loader.ConfigSchema): """Logging configuration c.f http://docs.gunicorn.org/en/stable/settings.html#logging """ accesslog = fields.Str() disable_redirect_access_to_syslog = fields.Bool(missing=False) access_log_format = fields.Str(missing='%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"') errorlog = fields.Str(missing='-') loglevel = fields.Str(missing='info') capture_output = fields.Bool(missing=False) logger_class = fields.Str(missing='consensys_utils.gunicorn.logging.Logger') logconfig = fields.Str() logconfig_dict = fields.Dict() syslog_addr = fields.Str(missing='udp://localhost:514') syslog = fields.Bool(missing=False) syslog_prefix = fields.Str() syslog_facility = fields.Str(missing='user') enable_stdio_inheritance = fields.Bool(missing=False) statsd_host = fields.Str() statsd_prefix = fields.Str(missing='')
[docs]class ProcessNamingConfigSchema(cfg_loader.ConfigSchema): """Process Naming configuration c.f http://docs.gunicorn.org/en/stable/settings.html#process-naming """ proc_name = fields.Str() default_proc_name = fields.Str(missing='gunicorn')
[docs]class SSLConfigSchema(cfg_loader.ConfigSchema): """SSL configuration c.f http://docs.gunicorn.org/en/stable/settings.html#ssl """ keyfile = Path() certfile = Path() ssl_version = fields.Str(missing='2') cert_reqs = fields.Str(missing='0') ca_certs = Path() suppress_ragged_eofs = fields.Bool(missing=True) do_handshake_on_connect = fields.Bool(missing=False) ciphers = fields.Str(missing='TLSv1')
[docs]class SecurityConfigSchema(cfg_loader.ConfigSchema): """Security configuration c.f http://docs.gunicorn.org/en/stable/settings.html#security """ limit_request_line = fields.Int(missing=4094) limit_request_fields = fields.Int(missing=100) limit_request_field_size = fields.Int(missing=8190)
[docs]class ServerMechanicsConfigSchema(cfg_loader.ConfigSchema): """Server Mechanics configuration c.f http://docs.gunicorn.org/en/stable/settings.html#server-mechanics """ preload_app = fields.Bool(missing=False) sendfile = fields.Bool() reuse_port = fields.Bool(missing=False) chdir = fields.Str() daemon = fields.Bool(missing=False) raw_env = fields.List(fields.Str(), missing=[]) pidfile = fields.Str() worker_tmp_dir = fields.Str() user = fields.Int(missing=1005) group = fields.Int(missing=205) umask = fields.Int(missing=0) initgroups = fields.Bool(missing=False) tmp_upload_dir = fields.Str() secure_scheme_headers = fields.Dict(missing={ 'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on', }) forwarded_allow_ips = fields.Str(missing="127.0.0.1") pythonpath = fields.Str() paste = fields.Str() proxy_protocol = fields.Bool(missing=False) proxy_allow_ips = fields.Str(missing="127.0.0.1") raw_paste_global_conf = fields.List(fields.Str(), missing=[])
[docs]class ServerSocketConfigSchema(cfg_loader.ConfigSchema): """Server Socket configuration c.f http://docs.gunicorn.org/en/stable/settings.html#server-socket """ bind = fields.List(fields.Str(), missing=[':5000']) backlog = fields.Int(missing=2048)
[docs]class WorkerProcessesConfigSchema(cfg_loader.ConfigSchema): """Worker Processes configuration c.f http://docs.gunicorn.org/en/stable/settings.html#worker-processes """ workers = fields.Int(missing=1) worker_class = fields.Str(missing='sync') threads = fields.Int(missing=1) worker_connections = fields.Int(missing=1000) max_requests = fields.Int(missing=0) max_requests_jitter = fields.Int(missing=0) timeout = fields.Int(missing=30) graceful_timeout = fields.Int(missing=30) keepalive = fields.Int(missing=2)
[docs]class GunicornConfigSchema(cfg_loader.ConfigSchema): """Gunicorn configuration Please refer to http://docs.gunicorn.org/en/stable/settings.html for exhaustive listing of Gunicorn settings. Describes and validates against .. list-table:: :widths: 30 50 20 :header-rows: 1 * - Key - Comment - Default value * - ``config`` - Gunicorn config file path - * - ``debugging`` - Debugging config in format :class:`DebuggingConfigSchema` - :class:`DebuggingConfigSchema` default * - ``logging`` - Gunicorn logging config in format :class:`LoggingConfigSchema` - :class:`LoggingConfigSchema` default * - ``process-naming`` - Process naming config in format :class:`ProcessNamingConfigSchema` - :class:`ProcessNamingConfigSchema` default * - ``ssl`` - Debugging config in format :class:`SSLConfigSchema` - :class:`SSLConfigSchema` default * - ``security`` - Security config in format :class:`SecurityConfigSchema` - :class:`SecurityConfigSchema` default * - ``server-mechanics`` - Server mechanics config in format :class:`ServerMechanicsConfigSchema` - :class:`ServerMechanicsConfigSchema` default * - ``server-socket`` - Server Socket config in format :class:`ServerSocketConfigSchema` - :class:`ServerSocketConfigSchema` default * - ``worker-processes`` - Worker processes config in format :class:`WorkerProcessesConfigSchema` - :class:`WorkerProcessesConfigSchema` default """ # Config file config = Path() # Debugging debugging = UnwrapNested(DebuggingConfigSchema, missing=DebuggingConfigSchema().load({})) # Logging logging = UnwrapNested(LoggingConfigSchema, missing=LoggingConfigSchema().load({})) # Process Naming process_naming = UnwrapNested(ProcessNamingConfigSchema, missing=ProcessNamingConfigSchema().load({}), key='process-naming') # SSL ssl = UnwrapNested(SSLConfigSchema, missing=SSLConfigSchema().load({})) # Security security = UnwrapNested(SecurityConfigSchema, missing=SecurityConfigSchema().load({})) # Server Mechanics server_mechanics = UnwrapNested(ServerMechanicsConfigSchema, missing=ServerMechanicsConfigSchema().load({}), data_key='server-mechanics') # Server Socket server_socket = UnwrapNested(ServerSocketConfigSchema, missing=ServerSocketConfigSchema().load({}), data_key='server-socket') # Worker Processes worker_processes = UnwrapNested(WorkerProcessesConfigSchema, missing=WorkerProcessesConfigSchema().load({}), data_key='worker-processes')