[Catalog-sig] setuptools upload to pypi

Phillip J. Eby pje at telecommunity.com
Mon Jul 23 23:31:39 CEST 2007

At 11:03 PM 7/23/2007 +0200, Martin v. Löwis wrote:
> > because I turned of proxying from www.python.org/pypi
> >> to cheeseshop.python.org/pypi, and replaced it with redirection
> >> (302, temporary redirect) instead (temporary just in case people
> >> find problems with that).
> >
> > If you were doing that for POST requests, that is probably the source of
> > the problem.  You could always restrict the proxying to occur only for
> > non-GET requests, since IIRC distutils.command.register and
> > distutils.command.upload use POSTs.  GET requests generally have a much
> > wider leeway for safe redirection than POST requests do.
>What is the problem with redirects for POST? In particular, why doesn't
>urllib2 support it?

It's my understanding that a redirection response to a POST means 
"GET the location I'm giving you", not "sorry, you should POST to 
this other place instead."  At least, that's how I understand web 
browsers to interpret it, and I believe urllib2 does as well.

So, the issue is not one of "not supporting" POSTs, it's a question 
of what the semantics of a redirected POST should be.  As far as I'm 
aware, it doesn't cause the POST to repeat, although that *might* 
depend on the specific status code and HTTP version.

> > Of course, one must also preserve the query string in a redirected GET,
> > and I don't think Apache's Redirect directive does that either.  You can
> > certainly do it with mod_rewrite, however.
>I see - I was using a plain Redirect.
> > I expect that the combination of preserving query strings on
> > redirection, and only redirecting GETs should make the transition safe.
>Can you share the magic to do that? I'd really like to start phasing
>out www.python.org/pypi, although I now see that it will take a few
>Python releases to get the cheeseshop home page replaced in distutils.
>In particular, if I also keep the mod_proxy setup for the reverse
>proxy, how will it interact with the redirect for the GET only?

Well, if you are using mod_rewrite to do both the redirection and the 
proxying, then it should suffice to have the GET rewrite with [R] and 
the remainder use [P].

Something like:

RewriteEngine On
RewriteBase /
RewriteRule ^pypi(.*)$ 
http://cheeseshop.python.org/pypi$1?%{QUERY_STRING} [R,L]
RewriteRule ^pypi(.*)$ 
http://cheeseshop.python.org/pypi$1?%{QUERY_STRING} [P,L]

But I'd test that with some dummy URLs instead of 'pypi', 
first.  Notice that this is not using any mod_proxy directives, just 
using mod_rewrite proxy support.  I've never used the mod_proxy 
directives, actually, but I have used mod_rewrite proxying.

More information about the Catalog-SIG mailing list