_cpserver.py (3948B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\_cpserver.py 2 import warnings 3 import cherrypy 4 from cherrypy.lib import attributes 5 from cherrypy._cpcompat import basestring 6 from cherrypy.process.servers import * 7 8 class Server(ServerAdapter): 9 socket_port = 8080 10 _socket_host = '127.0.0.1' 11 12 def _get_socket_host(self): 13 return self._socket_host 14 15 def _set_socket_host(self, value): 16 if value == '': 17 raise ValueError("The empty string ('') is not an allowed value. Use '0.0.0.0' instead to listen on all active interfaces (INADDR_ANY).") 18 self._socket_host = value 19 20 socket_host = property(_get_socket_host, _set_socket_host, doc='The hostname or IP address on which to listen for connections.\n \n Host values may be any IPv4 or IPv6 address, or any valid hostname.\n The string \'localhost\' is a synonym for \'127.0.0.1\' (or \'::1\', if\n your hosts file prefers IPv6). The string \'0.0.0.0\' is a special\n IPv4 entry meaning "any active interface" (INADDR_ANY), and \'::\'\n is the similar IN6ADDR_ANY for IPv6. The empty string or None are\n not allowed.') 21 socket_file = None 22 socket_queue_size = 5 23 socket_timeout = 10 24 shutdown_timeout = 5 25 protocol_version = 'HTTP/1.1' 26 thread_pool = 10 27 thread_pool_max = -1 28 max_request_header_size = 512000 29 max_request_body_size = 104857600 30 instance = None 31 ssl_context = None 32 ssl_certificate = None 33 ssl_certificate_chain = None 34 ssl_private_key = None 35 ssl_module = 'pyopenssl' 36 nodelay = True 37 wsgi_version = (1, 0) 38 39 def __init__(self): 40 self.bus = cherrypy.engine 41 self.httpserver = None 42 self.interrupt = None 43 self.running = False 44 45 def httpserver_from_self(self, httpserver = None): 46 if httpserver is None: 47 httpserver = self.instance 48 if httpserver is None: 49 from cherrypy import _cpwsgi_server 50 httpserver = _cpwsgi_server.CPWSGIServer(self) 51 if isinstance(httpserver, basestring): 52 httpserver = attributes(httpserver)(self) 53 return (httpserver, self.bind_addr) 54 55 def start(self): 56 if not self.httpserver: 57 self.httpserver, self.bind_addr = self.httpserver_from_self() 58 ServerAdapter.start(self) 59 60 start.priority = 75 61 62 def _get_bind_addr(self): 63 if self.socket_file: 64 return self.socket_file 65 if self.socket_host is None and self.socket_port is None: 66 return 67 return (self.socket_host, self.socket_port) 68 69 def _set_bind_addr(self, value): 70 if value is None: 71 self.socket_file = None 72 self.socket_host = None 73 self.socket_port = None 74 elif isinstance(value, basestring): 75 self.socket_file = value 76 self.socket_host = None 77 self.socket_port = None 78 else: 79 try: 80 self.socket_host, self.socket_port = value 81 self.socket_file = None 82 except ValueError: 83 raise ValueError('bind_addr must be a (host, port) tuple (for TCP sockets) or a string (for Unix domain sockets), not %r' % value) 84 85 bind_addr = property(_get_bind_addr, _set_bind_addr, doc='A (host, port) tuple for TCP sockets or a str for Unix domain sockets.') 86 87 def base(self): 88 if self.socket_file: 89 return self.socket_file 90 host = self.socket_host 91 if host in ('0.0.0.0', '::'): 92 import socket 93 host = socket.gethostname() 94 port = self.socket_port 95 if self.ssl_certificate: 96 scheme = 'https' 97 if port != 443: 98 host += ':%s' % port 99 else: 100 scheme = 'http' 101 if port != 80: 102 host += ':%s' % port 103 return '%s://%s' % (scheme, host)