[Zope-Checkins] CVS: Zope/lib/python/Zope/Startup - handlers.py:1.2.2.2
Fred L. Drake, Jr.
fred@zope.com
Wed, 5 Feb 2003 18:29:47 -0500
Update of /cvs-repository/Zope/lib/python/Zope/Startup
In directory cvs.zope.org:/tmp/cvs-serv17177
Modified Files:
Tag: new-install-branch
handlers.py
Log Message:
Remove lots of stuff; use the config support from the ZServer package
instead.
=== Zope/lib/python/Zope/Startup/handlers.py 1.2.2.1 => 1.2.2.2 ===
--- Zope/lib/python/Zope/Startup/handlers.py:1.2.2.1 Thu Jan 30 11:40:11 2003
+++ Zope/lib/python/Zope/Startup/handlers.py Wed Feb 5 18:29:43 2003
@@ -146,31 +146,22 @@
self._env[key] = value
config.cgi_environment_variables = env
- # set up server factories
- factory = ServerFactoryFactory(config)
- l = []
+ # if no servers are defined, create default http server and ftp server
+ if not config.servers:
+ import ZServer.datatypes
- for section in config.servers:
- # XXX ugly; need to clean this up soon
- server_type = section.getSectionType().replace("-", "_")
- for server_factory in getattr(factory, server_type)(section):
- l.append((server_type, server_factory))
+ conf = DummyServerConfig(8080)
+ http = ZServer.datatypes.HTTPServerFactory(conf)
+ config.servers.append(http)
+
+ conf = DummyServerConfig(8021)
+ ftp = ZServer.datatypes.FTPServerFactory(conf)
+ config.servers.append(ftp)
- # if no servers are defined, create default http server and ftp server
- if not l:
- class dummy:
- pass
- http, ftp = dummy(), dummy()
-
- http.ports = [('', 8080)]
- http.force_connection_close = 0
- ftp.ports = [('', 8021)]
-
- http = factory.http_server(http)[0]
- ftp = factory.ftp_server(ftp)[0]
- l.extend([('http_server', http), ('ftp_server', ftp)])
+ # prepare servers:
+ for section in config.servers:
+ self.prepare_server(section, config)
- config.servers = l
# set up defaults for zope_home and client_home if they're
# not in the config
@@ -207,122 +198,34 @@
opt_processor = cmdline.CommandLineOptions()
opt_processor(config, self.options)
-class ServerFactoryFactory:
- def __init__(self, config):
- self._config = config
- # alias some things for use in server handlers
- from ZServer.AccessLogger import access_logger
- self._logger = access_logger
- import ZODB # :-( required to import user
- from AccessControl.User import emergency_user
- if hasattr(emergency_user, '__null_user__'):
- self._pw = None
- else:
- self._pw = emergency_user._getPassword()
- self._resolver = self.get_dns_resolver()
- self._read_only = config.zserver_read_only_mode
- self._default_ip = config.ip_address
- self._env = config.cgi_environment_variables
- self._module = 'Zope' # no longer settable
-
- def get_dns_resolver(self):
- if self._config.dns_ip_address:
- from ZServer import resolver
- return resolver.caching_resolver(self._config.dns_ip_address)
-
- def http_server(self, section):
- l = []
- from ZServer import zhttp_server, zhttp_handler
- for addr, port in section.ports:
- def callback(inst, self=self):
- handler = zhttp_handler(self._module, '', self._env)
- inst.install_handler(handler)
- if section.force_connection_close:
- handler._force_connection_close = 1
- serverfactory = Factory('ZServer.zhttp_server', callback,
- ip=addr, port=port,
- resolver=self._resolver,
- logger_object=self._logger)
- l.append(serverfactory)
- return l
-
- def webdav_source_server(self, section):
- l = []
- for addr, port in section.ports:
- def callback(inst, self=self):
- from ZServer.WebDAVSrcHandler import WebDAVSrcHandler
- handler = WebDAVSrcHandler(self._module, '', self._env)
- inst.install_handler(handler)
- if section.force_connection_close:
- handler._force_connection_close = 1
- serverfactory = Factory('ZServer.zhttp_server', callback,
- ip=addr, port=port,
- resolver=self._resolver,
- logger_object=self._logger)
- l.append(serverfactory)
- return l
-
- def ftp_server(self, section):
- l = []
- for addr, port in section.ports:
- serverfactory = Factory('ZServer.FTPServer', None,
- module=self._module, ip=addr, port=port,
- resolver=self._resolver,
- logger_object=self._logger)
- l.append(serverfactory)
- return l
-
- def pcgi_server(self, section):
- if not self._read_only:
- serverfactory = Factory('ZServer.PCGIServer', None,
- module=self._module,
- ip=self._default_ip,
- pcgi_file=section.file,
- resolver=self._resolver,
- logger_object=self._logger)
- return [serverfactory]
- return []
-
- def fcgi_server(self, section):
- if section.file and section.port:
- raise ValueError, ("Must specify either 'port' or 'file' in "
- "fcgi server configuration, but not both")
- if section.port:
- addr = section.port[0]
- port = section.port[1]
- else:
- addr = port = None
- file = section.file
- if not self._read_only:
- serverfactory = Factory('ZServer.FCGIServer', None,
- module=self._module, ip=addr, port=port,
- socket_file=file, resolver=self._resolver,
- logger_object=self._logger)
- return [serverfactory]
- return []
-
- def monitor_server(self, section):
- if self._pw is None:
- import zLOG
- zLOG.LOG("z2", zLOG.WARNING, 'Monitor server not started'
- ' because no emergency user exists.')
- return []
- l = []
- for addr, port in section.ports:
- serverfactory = Factory('ZServer.secure_monitor_server', None,
- password=self._pw,
- hostname=addr,
- port=port)
- l.append(serverfactory)
- return l
-
- def icp_server(self, section):
- l = []
- for addr, port in section.ports:
- serverfactory = Factory('ZServer.ICPServer.ICPServer', None,
- addr, port)
- l.append(serverfactory)
- return l
+ _resolver = None
+
+ def get_dns_resolver(self, config):
+ if self._resolver is None and self._config.dns_ip_address:
+ from ZServer.medusa import resolver
+ r = resolver.caching_resolver(self._config.dns_ip_address)
+ self._resolver = r
+ return self._resolver
+
+ def prepare_server(self, factory, config):
+ import ZServer.AccessLogger
+ logger = ZServer.AccessLogger.access_logger
+ dnsresolver = self.get_dns_resolver(config)
+ # XXX need to get IP_ADDRESS
+ factory.prepare(IP_ADDRESS, resolver, logger, "Zope", env)
+
+
+class DummyServerConfig:
+ class _Thing:
+ pass
+
+ def __init__(self, port):
+ import socket
+ self.address = self._Thing()
+ self.address.family = socket.AF_INET
+ self.address.address = '', port
+ self.force_connection_close = 0
+
def handleConfig(config, multihandler, options):
handlers = {}