Hi All!

I've read the document " A Pylons controller with MoinMoin as a WSGI
callable" and I've tried to make the same with trac. I get it working
but I'm with a doubt!

first of all, the recipe :) (I called my project 'embed')

from embed.lib.base import *
from trac.web.main import dispatch_request
from authkit.permissions import NotAuthenticatedError
import os
#os.environ["TRAC_ENV"] = '/var/trac/jornalismo'

template = """\
   <html>
     <head><title>Please Login!</title></head>
     <body>
       <h1>Please Login</h1>
       <form action="" method="post">
         <dl>
           <dt>Username:</dt>
           <dd><input type="text" name="username"></dd>
           <dt>Password:</dt>
           <dd><input type="password" name="password"></dd>
         </dl>
         <input type="hidden" name="r" value="%s" />
         <input type="submit" name="authform" />
         <hr />
       </form>
     </body>
   </html>
"""

class MeutracController(BaseController):

    def tracpage(self, *args, **kwargs):
        # Thanks to ianbicking for a workaround of an empty wsgi.input value
        os.environ['TRAC_ENV'] = "/var/trac/experiencias"
        #request.environ['REMOTE_USER'] = 'walter'

        if request.environ['PATH_INFO'] == '/logout':
            del(session['user'])
            session.save()
            h.redirect_to('/')

        if request.environ['PATH_INFO'] == '/login' and not session.get('user'):
            #raise NotAuthenticatedError('Not Authenticated')
            return self._redirect_to_sign_in()

        if session.get('user'):
            request.environ['REMOTE_USER'] = session.get('user')
        a = dispatch_request(request.environ, self.start_response)
        if len(a) == 0:
            return ['']
        return a

    def _redirect_to_sign_in(self):
        if len(request.params) > 1 and request.params['password'] ==
request.params['username']:
            session['user'] = request.params['username']
            session.save()
            h.redirect_to('/')
        else:
            return Response(template)


And in routings.py:

    map.connect('trac/*path_info', controller='meutrac',
action='tracpage',path_info='/')


It's working. I have used a basic authentication, as I've found in a
example on the wiki.

My doubts:

First:
Look these lines:

        a = dispatch_request(request.environ, self.start_response)
        if len(a) == 0:
            return ['']
        return a

I don't know if the problem is on the trac side or in the Pylons side:

If I replace these lines with the common:
return dispatch_request(request.environ, self.start_response)


When I call a pege, i get these errors:

Exception happened during processing of request from ('127.0.0.1', 56302)
Traceback (most recent call last):
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/httpserver.py",
line 592, in process_request_in_thread
    self.finish_request(request, client_address)
  File "SocketServer.py", line 254, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "SocketServer.py", line 521, in __init__
    self.handle()
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/httpserver.py",
line 400, in handle
    BaseHTTPRequestHandler.handle(self)
  File "BaseHTTPServer.py", line 316, in handle
    self.handle_one_request()
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/httpserver.py",
line 395, in handle_one_request
    self.wsgi_execute()
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/httpserver.py",
line 266, in wsgi_execute
    self.wsgi_start_response)
  File "/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/cascade.py",
line 92, in __call__
    return self.apps[-1](environ, start_response)
  File "/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/registry.py",
line 327, in __call__
    app_iter = self.application(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/recursive.py",
line 80, in __call__
    return self.application(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/errordocument.py",
line 185, in __call__
    app_iter = self.application(environ, change_response)
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/evalexception/middleware.py",
line 186, in __call__
    return self.respond(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Pylons-0.9.5-py2.4.egg/pylons/error.py",
line 249, in respond
    exc_info)
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/errordocument.py",
line 183, in change_response
    return start_response(status, headers, exc_info)
  File 
"/usr/lib/python2.4/site-packages/Pylons-0.9.5-py2.4.egg/pylons/error.py",
line 225, in respond
    app_iter = self.application(environ, detect_start_response)
  File 
"/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/httpexceptions.py",
line 633, in __call__
    self.send_http_response, catch=HTTPException)
  File "/usr/lib/python2.4/site-packages/Paste-1.3-py2.4.egg/paste/wsgilib.py",
line 225, in catch_errors_app
    app_iter = application(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/PasteDeploy-1.3-py2.4.egg/paste/deploy/config.py",
line 164, in __call__
    app_iter = self.application(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Pylons-0.9.5-py2.4.egg/pylons/wsgiapp.py",
line 261, in __call__
    return self.app(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Beaker-0.7.3-py2.4.egg/beaker/cache.py",
line 175, in __call__
    return self.app(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Beaker-0.7.3-py2.4.egg/beaker/session.py",
line 388, in __call__
    response = self.wrap_app(environ, session_start_response)
  File 
"/usr/lib/python2.4/site-packages/Routes-1.7.1dev_r368-py2.4.egg/routes/middleware.py",
line 104, in __call__
    response = self.app(environ, start_response)
  File 
"/usr/lib/python2.4/site-packages/Pylons-0.9.5-py2.4.egg/pylons/wsgiapp.py",
line 96, in __call__
    raise Exception("No content returned by controller: %s" % \
Exception: No content returned by controller: MeutracController


But everything works as expected! Is that a problem with trac?

Second:
If I enable the authkit middleware, I get these errors:

File 
'/home/walter/devel/python/pylons_projects/embed/embed/controllers/meutrac.py',
line 45 in tracpage
  a = dispatch_request(request.environ, self.start_response)
File '/var/lib/python-support/python2.4/trac/web/main.py', line 440 in
dispatch_request
  req.send_error(sys.exc_info(), status=500)
File '/var/lib/python-support/python2.4/trac/web/api.py', line 397 in send_error
  self.write(data)
File '/var/lib/python-support/python2.4/trac/web/api.py', line 460 in write
  self._write(data)
TypeError: 'NoneType' object is not callable

Thet are in the trac side.

Am I doing something wrong or there's something weird about trac?

(I will post that recipe at the confluence wiki!)

[]'s
- Walter

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to