Package cherrypy :: Module _cpserver
[hide private]
[frames] | no frames]

Source Code for Module cherrypy._cpserver

  1  """Manage HTTP servers with CherryPy.""" 
  2   
  3  import warnings 
  4   
  5  import cherrypy 
  6  from cherrypy.lib import attributes 
  7   
  8  # We import * because we want to export check_port 
  9  # et al as attributes of this module. 
 10  from cherrypy.process.servers import * 
 11   
 12   
13 -class Server(ServerAdapter):
14 """An adapter for an HTTP server. 15 16 You can set attributes (like socket_host and socket_port) 17 on *this* object (which is probably cherrypy.server), and call 18 quickstart. For example: 19 20 cherrypy.server.socket_port = 80 21 cherrypy.quickstart() 22 """ 23 24 socket_port = 8080 25 26 _socket_host = '127.0.0.1'
27 - def _get_socket_host(self):
28 return self._socket_host
29 - def _set_socket_host(self, value):
30 if not value: 31 raise ValueError("Host values of '' or None are not allowed. " 32 "Use '0.0.0.0' instead to listen on all active " 33 "interfaces (INADDR_ANY).") 34 self._socket_host = value
35 socket_host = property(_get_socket_host, _set_socket_host, 36 doc="""The hostname or IP address on which to listen for connections. 37 38 Host values may be any IPv4 or IPv6 address, or any valid hostname. 39 The string 'localhost' is a synonym for '127.0.0.1' (or '::1', if 40 your hosts file prefers IPv6). The string '0.0.0.0' is a special 41 IPv4 entry meaning "any active interface" (INADDR_ANY), and '::' 42 is the similar IN6ADDR_ANY for IPv6. The empty string or None are 43 not allowed.""") 44 45 socket_file = '' 46 socket_queue_size = 5 47 socket_timeout = 10 48 shutdown_timeout = 5 49 protocol_version = 'HTTP/1.1' 50 reverse_dns = False 51 thread_pool = 10 52 thread_pool_max = -1 53 max_request_header_size = 500 * 1024 54 max_request_body_size = 100 * 1024 * 1024 55 instance = None 56 ssl_certificate = None 57 ssl_private_key = None 58 nodelay = True 59
60 - def __init__(self):
62
63 - def quickstart(self, server=None):
64 """This does nothing now and will be removed in 3.2.""" 65 warnings.warn('quickstart does nothing now and will be removed in ' 66 '3.2. Call cherrypy.engine.start() instead.', 67 DeprecationWarning)
68
69 - def httpserver_from_self(self, httpserver=None):
70 """Return a (httpserver, bind_addr) pair based on self attributes.""" 71 if httpserver is None: 72 httpserver = self.instance 73 if httpserver is None: 74 from cherrypy import _cpwsgi_server 75 httpserver = _cpwsgi_server.CPWSGIServer() 76 if isinstance(httpserver, basestring): 77 httpserver = attributes(httpserver)() 78 79 if self.socket_file: 80 return httpserver, self.socket_file 81 82 host = self.socket_host 83 port = self.socket_port 84 return httpserver, (host, port)
85
86 - def start(self):
87 """Start the HTTP server.""" 88 if not self.httpserver: 89 self.httpserver, self.bind_addr = self.httpserver_from_self() 90 ServerAdapter.start(self)
91 start.priority = 75 92
93 - def base(self):
94 """Return the base (scheme://host) for this server.""" 95 if self.socket_file: 96 return self.socket_file 97 98 host = self.socket_host 99 if host in ('0.0.0.0', '::'): 100 # 0.0.0.0 is INADDR_ANY and :: is IN6ADDR_ANY. 101 # Look up the host name, which should be the 102 # safest thing to spit out in a URL. 103 import socket 104 host = socket.gethostname() 105 106 port = self.socket_port 107 108 if self.ssl_certificate: 109 scheme = "https" 110 if port != 443: 111 host += ":%s" % port 112 else: 113 scheme = "http" 114 if port != 80: 115 host += ":%s" % port 116 117 return "%s://%s" % (scheme, host)
118