Jim Gallacher writes:
> Daniel J. Popowich wrote:
> > Jim Gallacher writes:
> > 
> >>Jim Gallacher wrote:
> >>
> >>
> >>>Using an internal_redirect messes with some of these attributes but not 
> >>>others. Those that change get their new values from the new_uri used in 
> >>>the redirect. Unchanged values are from the initial request.
> >>>
> >>>req.internal_redirect(new_uri)
> >>>
> >>>the_request        unchanged
> >>>unparsed_uri       new
> >>>parsed_uri         new
> >>>args               new
> >>>uri                unchanged
> >>
> >>                      ^^^^^^^^^
> >>   uri                new (oops - wee typo there)
> >>
> >>
> >>>hostname           unchanged
> > 
> > 
> > Jim,
> > 
> > Really, I don't mean to be obtuse, but I'm not groking your point.
> > Are you clarifying that for internal redirects the *source* for these
> > attributes is different than what I was saying in my documentation
> 
> Exactly. The documentation needs to account for the different behaviour 
> after an internal_redirect. I'll let the code talk for me as I can't 
> come up with adequate text. Assume you are using publisher with the 
> following code.
> 
> Client request:
> http://www.example.com/mod_python/parsed_uri/mptest.py?blah=de-blah
> 
> mptest.py
> ---------
> 
> def index(req):
>      req.content_type = 'text/plain'
>      req.write('-----\nindex\n-----\n')
>      stuff(req)
>      # I'm sorry about the look of the next statement -
>      # thunderbird line wrapping issues
>      req.internal_redirect("http://ABCDE.example.org:666";
>                            "/mod_python/parsed_uri/mptest/redirect"
>                             "?inquisition=spanish#foo")
> 
> def redirect(req):
>      req.write('\n\n--------\nredirect\n--------\n')
>      stuff(req)
> 
> def stuff(req):
>      req.write('req.the_request: %s\n' % req.the_request)
>      req.write('req.uri: %s\n' % req.uri)
>      req.write('req.unparsed_uri: %s\n' % str(req.unparsed_uri))
>      req.write('req.parsed_uri: %s\n' % str(req.parsed_uri))
>      req.write('req.hostname: %s\n' % req.hostname)
>      req.write('req.args: %s\n' % req.args)
> 
> 
> Output:
> =======
> 
> -----
> index
> -----
> req.the_request: GET /mod_python/parsed_uri/mptest?blah=de-blah HTTP/1.1
> req.uri: /mod_python/parsed_uri/mptest.py
> req.unparsed_uri: /mod_python/parsed_uri/mptest
> req.parsed_uri: (None, None, None, None, None, None, 
> '/mod_python/parsed_uri/mptest', 'blah=de-blah', None)
> req.hostname: www.example.org
> 
> req.args: blah=de-blah
> 
> --------
> redirect
> --------
> req.the_request: GET /mod_python/parsed_uri/mptest HTTP/1.1
> req.uri: /mod_python/parsed_uri/mptest.py/redirect
> req.unparsed_uri: 
> http://ABCDE.example.org:666/mod_python/parsed_uri/mptest/redirect?inquisition=spanish#foo
> req.parsed_uri: ('http', 'ABCDE.example.org:666', None, None, 
> 'ABCDE.example.org', 666, '/mod_python/parsed_uri/mptest/redirect', 
> 'inquisition=spanish', 'foo')
> req.hostname: www.example.org
> req.args: inquisition=spanish
> 

HOLY COW!  Is it me or does this seem completely arbitrary?  The value
of the_request is wrong, too (doesn't include the query).  I have no
idea how to write this up concisely without driving people to perl.

Can we ignore it and maybe it will go away?  ;-)



Daniel Popowich
---------------
http://home.comcast.net/~d.popowich/mpservlets/

Reply via email to