Log message for revision 67759: Twisted support. Changed: U Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/__init__.py U Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/handlers.py U Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/zopeschema.xml
-=- Modified: Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/__init__.py =================================================================== --- Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/__init__.py 2006-04-30 08:25:20 UTC (rev 67758) +++ Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/__init__.py 2006-04-30 09:28:13 UTC (rev 67759) @@ -20,12 +20,11 @@ import socket from re import compile from socket import gethostbyaddr +import twisted.internet.reactor import ZConfig - from ZConfig.components.logger import loghandler - logger = logging.getLogger("Zope") started = False @@ -96,7 +95,10 @@ self.makePidFile() self.setupInterpreter() self.startZope() - self.registerSignals() + from App.config import getConfiguration + config = getConfiguration() + if not config.twisted_servers: + self.registerSignals() # emit a "ready" message in order to prevent the kinds of emails # to the Zope maillist in which people claim that Zope has "frozen" # after it has emitted ZServer messages. @@ -106,10 +108,15 @@ def run(self): # the mainloop. try: - import ZServer - import Lifetime - Lifetime.loop() - sys.exit(ZServer.exit_code) + from App.config import getConfiguration + config = getConfiguration() + if config.twisted_servers: + twisted.internet.reactor.run() + else: + import ZServer + import Lifetime + Lifetime.loop() + sys.exit(ZServer.exit_code) finally: self.shutdown() Modified: Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/handlers.py =================================================================== --- Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/handlers.py 2006-04-30 08:25:20 UTC (rev 67758) +++ Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/handlers.py 2006-04-30 09:28:13 UTC (rev 67759) @@ -1,8 +1,15 @@ import os import sys +import time +import logging from re import compile from socket import gethostbyaddr +import twisted.internet +from twisted.application.service import MultiService +import zope.app.appsetup.interfaces +import zope.app.twisted.main + # top-level key handlers @@ -133,7 +140,7 @@ "'catalog-getObject-raises' option will be removed in Zope 2.10:\n", DeprecationWarning) - from Products.ZCatalog import CatalogBrains + from Products.ZCatalog import CatalogBrains CatalogBrains.GETOBJECT_RAISES = bool(value) return value @@ -143,7 +150,8 @@ def root_handler(config): """ Mutate the configuration with defaults and perform fixups of values that require knowledge about configuration - values outside of their context. """ + values outside of their context. + """ # Set environment variables for k,v in config.environment.items(): @@ -165,7 +173,7 @@ instanceprod = os.path.join(config.instancehome, 'Products') if instanceprod not in config.products: config.products.append(instanceprod) - + import Products L = [] for d in config.products + Products.__path__: @@ -190,6 +198,23 @@ config.cgi_environment, config.port_base) + if not config.twisted_servers: + config.twisted_servers = [] + else: + # Set number of threads (reuse zserver_threads variable) + twisted.internet.reactor.suggestThreadPoolSize(config.zserver_threads) + + # Create a root service + rootService = MultiService() + + for server in config.twisted_servers: + service = server.create(None) + service.setServiceParent(rootService) + + rootService.startService() + twisted.internet.reactor.addSystemEventTrigger( + 'before', 'shutdown', rootService.stopService) + # set up trusted proxies if config.trusted_proxies: import ZPublisher.HTTPRequest @@ -217,3 +242,29 @@ if isIp_(host): return [host] return gethostbyaddr(host)[2] +# XXX Need to find a better place for this. + +import twisted.web2.wsgi +import twisted.web2.server +import twisted.web2.log + +try: + from twisted.web2.http import HTTPFactory +except ImportError: + from twisted.web2.channel.http import HTTPFactory + +from zope.component import provideUtility +from zope.app.twisted.server import ServerType, SSLServerType +from zope.app.twisted.interfaces import IServerType +from ZPublisher.WSGIPublisher import publish_module + +def createHTTPFactory(ignored): + resource = twisted.web2.wsgi.WSGIResource( + publish_module) + resource = twisted.web2.log.LogWrapperResource(resource) + + return HTTPFactory(twisted.web2.server.Site(resource)) + +http = ServerType(createHTTPFactory, 8080) + +provideUtility(http, IServerType, 'Zope2-HTTP') Modified: Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/zopeschema.xml =================================================================== --- Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/zopeschema.xml 2006-04-30 08:25:20 UTC (rev 67758) +++ Zope/branches/regebro-wsgi_support2/lib/python/Zope2/Startup/zopeschema.xml 2006-04-30 09:28:13 UTC (rev 67759) @@ -11,6 +11,12 @@ <import package="tempstorage"/> <import package="Zope2.Startup" file="warnfilter.xml"/> + <sectiontype name="server" datatype="zope.app.twisted.server.ServerFactory"> + <key name="type" required="yes" /> + <key name="address" datatype="inet-address" /> + <key name="backlog" datatype="integer" default="50" /> + </sectiontype> + <sectiontype name="logger" datatype=".LoggerFactory"> <description> This "logger" type only applies to access and request ("trace") @@ -805,7 +811,9 @@ <metadefault>on</metadefault> </key> + <multisection type="server" name="*" attribute="twisted_servers" /> <multisection type="ZServer.server" name="*" attribute="servers"/> + <key name="port-base" datatype="integer" default="0"> <description> Base port number that gets added to the specific port numbers _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins