i am interest in integating moinmoin in turbogears.
some month ago, i managed to run moinmoin over turbogears.but have
small bug.
below is my code.

# -*- coding: iso-8859-1 -*-
from MoinMoin import config
from MoinMoin.request import RequestBase
import cherrypy
def getdict(d,s,default):
    try:
        r=d[s]
    except KeyError,e:
        r=default
    return(r)
class WikiRoot:
    def index(self,*arg,**karg):
        req = RequestCherry(cherrypy,arg,karg)
        req.run()
        return(req.output())
    index.exposed=True
    def default(self,*arg,**karg):
        req = RequestCherry(cherrypy,arg,karg)
        req.run()
        return(req.output())
    default.exposed=True
class RequestCherry(RequestBase):
    def cherryUri(self):
        p=self.cpresponse.path.split("/")
        p=p[:-1]
        for p1 in p:
            r="/"+p1
        return r
    def output(self):
        return(self.res[0])
    def __init__(self, cpm,arg,karg):
        if len(arg)>0:
            pagename=arg[0]
        else:
            pagename=""
        properties={}
        self.res=[""]
        self.arg=arg
        self.karg=karg
        self.cpresponse = cpm.request
        self.reactor= cpm.response
        self.http_accept_language =
getdict(self.cpresponse.headerMap,'Accept-Language','')
        self.saved_cookie =
getdict(self.cpresponse.headerMap,'Cookie','')
        self.http_user_agent = self.cpresponse.headerMap['User-Agent']

        self.server_name =
self.cpresponse.headerMap['Host'].split(':')[0]
        hp=self.cpresponse.headerMap['Host'].split(':')
        if (len(hp)==2):
            self.server_port = hp[1]
        else:
            self.server_port = "80"
        self.is_ssl = 0
        self.path_info = '/' + '/'.join([pagename]) #+
self.cpresponse.postpath)
        self.request_method =self.cpresponse.method
        self.remote_host = self.cpresponse.remoteHost
        self.remote_addr = self.cpresponse.remoteAddr
        self.script_name = self.cherryUri()
        self.request_uri = self.cpresponse.path

        # Values that need more work
        self.query_string = self.splitURI(self.request_uri)[1]
        #self.setHttpReferer(self.cpresponse.getHeader('Referer'))
        self.setHost()

self.setURL(self.cpresponse.headerMap)#self.cpresponse.getAllHeaders()

        self.debugEnvironment(self.cpresponse.headerMap)

        RequestBase.__init__(self, properties)
    def run(self):
        """ Handle delayed errors then invoke base class run """
        if hasattr(self, 'delayedError'):
            self.fail(self.delayedError)
            return self.finish()
        RequestBase.run(self)

    def setup_args(self, form=None):
        """ Return args dict

        Cherry already parsed args, including __filename__ hacking,
        but did not decoded the values.
        """
        #return self.decodeArgs(self.cpresponse.args)
        from types import InstanceType,StringType
        a={}
        try:
            a=self.karg
            for a1 in a:
                r=[]
                if type(a[a1])==StringType:
                    r.append(unicode(a[a1],"utf-8"))
                elif type(a[a1])==InstanceType:
                    r.append(a[a1].file.read())
                else :
                    r.append(a[a1])
                a[a1]=r
        except IndexError,e:
            pass
        return(a)

    def read(self, n=None):
        """ Read from input stream.
        """
        # XXX why is that wrong?:
        #rd = self.reactor.callFromThread(self.cpresponse.read)

        # XXX do we need self.reactor.callFromThread with that?
        # XXX if yes, why doesn't it work?
        self.cpresponse.content.seek(0, 0)
        if n is None:
            rd = self.cpresponse.content.read()
        else:
            rd = self.cpresponse.content.read(n)
        #print "request.RequestCherry.read: data=\n" + str(rd)
        return rd

    def write(self, *data):
        d=self.encode(data)
        self.res[0]=self.res[0]+d
    def flush(self):
        pass # XXX is there a flush in Cherry?

    def finish(self):
        RequestBase.finish(self)
        #self.reactor.callFromThread(self.cpresponse.finish)

    def open_logs(self):
        return
        # create log file for catching stderr output
        if not self.opened_logs:
            sys.stderr = open(os.path.join(self.cfg.data_dir,
'error.log'), 'at')
            self.opened_logs = 1

    # Headers
----------------------------------------------------------

    def __setHttpHeader(self, header):
        if type(header) is unicode:
            header = header.encode('ascii')
        key, value = header.split(':',1)
        value = value.lstrip()
        if key.lower() == 'set-cookie':
            key, value = value.split('=',1)
            self.cpresponse.simpleCookie[key]=value
            #self.cpresponse.addCookie(key, value)
        else:
            self.reactor.headerMap[key]=value
        #print "request.RequestCherry.setHttpHeader: %s" % header

    def http_headers(self, more_headers=[]):
        if getattr(self, 'sent_headers', None):
            return
        self.sent_headers = 1
        have_ct = 0

        # set http headers
        for header in more_headers + getattr(self, 'user_headers', []):
            if header.lower().startswith("content-type:"):
                # don't send content-type multiple times!
                if have_ct: continue
                have_ct = 1
            self.__setHttpHeader(header)

        if not have_ct:
            self.__setHttpHeader("Content-type: text/html;charset=%s" %
config.charset)

    def http_redirect(self, url):
        """ Redirect to a fully qualified, or server-rooted URL

        @param url: relative or absolute url, ascii using url encoding.
        """
        url = self.getQualifiedURL(url)
        raise cherrypy.HTTPRedirect(url)
        #raise MoinMoinNoFooter

    def setResponseCode(self, code, message=None):
        #self.cpresponse.setResponseCode(code, message)
        pass


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/turbogears
-~----------~----~----~----~------~----~------~--~---

Reply via email to