~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/http/_urllib2_wrappers.py

  • Committer: Vincent Ladeuil
  • Date: 2007-03-14 16:39:24 UTC
  • mto: (2323.7.1 redirection)
  • mto: This revision was merged to the branch mainline in revision 2390.
  • Revision ID: v.ladeuil+lp@free.fr-20070314163924-5xoey9mkxe6qaptd
Test the http redirection at the request level even if it's not
used anymore, so far.

* bzrlib/transport/http/_urllib2_wrappers.py
(HTTPRedirectHandler.http_error_302): Renamed from http_error_30x.
(HTTPRedirectHandler.http_error_301): Deleted. Finally, that's the
easiest way to fix bug #88780 :) In retrospect, that code was a
first attempt to handle this whole redirection handling by
providing the final target to the first request. This is not
needed anymore.

* bzrlib/tests/test_http.py:
(RedirectedRequest, TestHTTPSilentRedirections_urllib): Test the
_urllib2_wrappers redirection at the request level.

* bzrlib/tests/HTTPTestUtil.py:
(RedirectRequestHandler.parse_request): Delegate the redirection
handling to the test_case_server.
(HTTPServerRedirecting.is_redirected): Handle redirections by
searching a matching directive.
(HTTPServerRedirecting.redirect_to): Redefined to use the nre
redirections definitions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
503
503
        # of creating a new one, but the urllib2.Request object
504
504
        # has a too complicated creation process to provide a
505
505
        # simple enough equivalent update process. Instead, when
506
 
        # redirecting, we only update the original request with a
507
 
        # reference to the following request in the redirect
508
 
        # chain.
 
506
        # redirecting, we only update the following request in
 
507
        # the redirect chain with a reference to the parent
 
508
        # request .
509
509
 
510
510
        # Some codes make no sense in our context and are treated
511
511
        # as errors:
542
542
        else:
543
543
            raise urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)
544
544
 
545
 
    def http_error_30x(self, req, fp, code, msg, headers):
 
545
    def http_error_302(self, req, fp, code, msg, headers):
546
546
        """Requests the redirected to URI.
547
547
 
548
548
        Copied from urllib2 to be able to fake_close the
596
596
 
597
597
        return self.parent.open(redirected_req)
598
598
 
599
 
    http_error_302 = http_error_303 = http_error_307 = http_error_30x
600
 
 
601
 
    def http_error_301(self, req, fp, code, msg, headers):
602
 
        response = self.http_error_30x(req, fp, code, msg, headers)
603
 
        # If one or several 301 responses occur during the
604
 
        # redirection chain, we MUST update the original request
605
 
        # to indicate where the URI where finally found.
606
 
 
607
 
        original_req = req
608
 
        while original_req.parent is not None:
609
 
            original_req = original_req.parent
610
 
        if original_req.redirected_to is None:
611
 
            # Only the last occurring 301 (the deepest in the
612
 
            # recursive call chain) should be taken into
613
 
            # account i.e. the first occurring here when
614
 
            # redirected_to has not yet been set.
615
 
            original_req.redirected_to = req.redirected_to
616
 
        return response
 
599
    http_error_301 = http_error_303 = http_error_307 = http_error_302
617
600
 
618
601
 
619
602
class ProxyHandler(urllib2.ProxyHandler):