You are not logged in Log in Join
You are here: Home » Members » adytumsolutions » PyCon2004 » TwistedZopeIntegrationCode » wikipage_view

Log in
Name

Password

 
 
Zope2 Sprint »

TwistedZopeIntegrationCode

import os
import sys
import string
here = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, os.path.join(here, 'lib', 'python'))
from ZPublisher.Publish import publish_module

def setupzope():
    import os
    import sys
    here = os.path.dirname(__file__)
    sys.path.insert(0, os.path.join(here, 'lib', 'python'))
    import Zope
    Zope.configure(os.path.join(here, 'etc', 'zope.conf'))
    Zope.startup()

__version__ = 1

setupzope()
from twisted.internet import reactor
from twisted.web import static, server, twcgi, resource
#from twisted.python import filepath
from twisted.python import log
log.startLogging(file('twisted.log', 'w'))
from cStringIO import StringIO

#docroot = '/home/chrism/'
#cgibin = docroot + '/cgibin'
#root = static.File(docroot)
#root.putChild("cgi-bin", twcgi.CGIDirectory(cgibin))

class ZopeResource(resource.Resource):
    isLeaf = 1
    def __init__(self, data):
        self.data = data

    def render(self, request):
        return self.data

class ZopeRoot(resource.Resource):
    def getChild(self, path, request):
        stdout = StringIO()
        script_name = "/"+string.join(request.prepath, '/')
        python_path = string.join(sys.path, os.pathsep)
        serverName = string.split(request.getRequestHostname(), ':')[0]
        env = {
            "SERVER_SOFTWARE":   'ZTwisted' , # server.version,
            "SERVER_NAME":       serverName,
            "GATEWAY_INTERFACE": "CGI/1.1",
            "SERVER_PROTOCOL":   request.clientproto,
            "SERVER_PORT":       str(request.getHost()[2]),
            "REQUEST_METHOD":    request.method,
            "SCRIPT_NAME":       script_name, # XXX
            "REQUEST_URI":       request.uri,
            "PATH_INFO":         path,
            }
        publish_module('Zope', stdout=stdout, environ=env)
        stdout.seek(0)
        data = stdout.read()
        return ZopeResource(data)

class ZopeSite(server.Site):
    pass

root = ZopeRoot()

reactor.listenTCP(6969, ZopeSite(root))
reactor.run()