On August 15, 2011 04:38:04 PM Paul Boddie wrote: > On Monday 15 August 2011 20:52:42 Neal Holtz wrote: > > > > Is it possible to request an http redirect from within a macro > > handler? Using moinmoin 1.9.3, when I try: > > > > def macro_Quiz( macro, filename ): > > .... > > macro.request.http_redirect( 'http://www.disney.com', code=301 ) > > > > > > <<Quiz: execution failed [proxy exception for > > <werkzeug.wrappers.BaseResponse object at 0xaacbb4c>] (see also the log)>> > > What does the log say?
The traceback is: 2011-08-15 19:22:03,910 ERROR MoinMoin.macro:132 Macro Quiz (page: 'TestQuiz') raised an exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/MoinMoin/macro/__init__.py", line 122, in execute return execute(self, args) File "/usr/local/lib/python2.7/dist-packages/MoinMoin/macro/__init__.py", line 107, in <lambda> _self.request, call, _args, [_self]) File "/usr/local/lib/python2.7/dist-packages/MoinMoin/wikiutil.py", line 1954, in invoke_extension_function return function(*fixed_args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/MoinMoin/macro/Quiz.py", line 39, in macro_Quiz macro.request.http_redirect( 'http://www.disney.com', code=301 ) File "/usr/local/lib/python2.7/dist-packages/MoinMoin/web/contexts.py", line 276, in http_redirect abort(redirect(url, code=code)) File "/usr/local/lib/python2.7/dist-packages/MoinMoin/support/werkzeug/exceptions.py", line 436, in __call__ raise _ProxyException(code) _ProxyException: proxy exception for <werkzeug.wrappers.BaseResponse object at 0x32b3490> > I looked at some actions and you'd use the > http_redirect method on the request in that environment, but I don't know if > that works for macros, mostly because macros are executed during output > production, at which point it's probably a bit late to attempt a redirect: > the HTTP status code will have been set and page content partially written. >From a quick look at the code, because this is done partially by raising an exception, I was hoping that it would work even under those conditions. I haven't dug into the macro handling code, but the some relevant lines for doing the redirect are: In contexts.py: def http_redirect(self, url, code=302): """ Raise a simple redirect exception. """ # werkzeug >= 0.6 does iri-to-uri transform if it gets unicode, but our # url is already url-quoted, so we better give it str to have same behaviour # with werkzeug 0.5.x and 0.6.x: url = str(url) # if url is unicode, it should contain ascii chars only abort(redirect(url, code=code)) In: support/werkzeug/exceptions.py: class Aborter(object): """ When passed a dict of code -> exception items it can be used as callable that raises exceptions. If the first argument to the callable is a integer it will be looked up in the mapping, if it's a WSGI application it will be raised in a proxy exception. The rest of the arguments are forwarded to the exception constructor. """ def __init__(self, mapping=None, extra=None): if mapping is None: mapping = default_exceptions self.mapping = dict(mapping) if extra is not None: self.mapping.update(extra) def __call__(self, code, *args, **kwargs): if not args and not kwargs and not isinstance(code, (int, long)): raise _ProxyException(code) if code not in self.mapping: raise LookupError('no exception for %r' % code) raise self.mapping[code](*args, **kwargs) abort = Aborter() I wonder if the macro executor is expected to handle that _ProxyException ... I'll have a look at invoke_extension_function ... > > Paul > > ------------------------------------------------------------------------------ > uberSVN's rich system and user administration capabilities and model > configuration take the hassle out of deploying and managing Subversion and > the tools developers use with it. Learn more about uberSVN and get a free > download at: http://p.sf.net/sfu/wandisco-dev2dev > _______________________________________________ > Moin-user mailing list > Moin-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/moin-user > -- Neal Holtz http://cee.carleton.ca/~nholtz Dept. of Civil and Environmental Engineering, Carleton University, Ottawa, Ontario, Canada K1S 5B6. nho...@cee.carleton.ca Public Key: http://holtz3.cee.carleton.ca/~nholtz/pubkey.asc Office-Hours: http://holtz3.cee.carleton.ca/~nholtz/office-hours.html Free-Busy: http://holtz3.cee.carleton.ca/~nholtz/free-busy.cgi ------------------------------------------------------------------------------ uberSVN's rich system and user administration capabilities and model configuration take the hassle out of deploying and managing Subversion and the tools developers use with it. Learn more about uberSVN and get a free download at: http://p.sf.net/sfu/wandisco-dev2dev _______________________________________________ Moin-user mailing list Moin-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/moin-user