comparison mercurial/url.py @ 40019:f80db6adabbe

url: move _wraphttpresponse() from httpeer This is a generally useful function. Having it on the url module will make it more accessible outside of the HTTP peers. Differential Revision: https://phab.mercurial-scm.org/D4770
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 26 Sep 2018 16:07:59 -0700
parents 126998dcfb08
children f2dffa1359c6
comparison
equal deleted inserted replaced
40018:426cb2859013 40019:f80db6adabbe
593 else: 593 else:
594 path = util.normpath(os.path.abspath(url_)) 594 path = util.normpath(os.path.abspath(url_))
595 url_ = 'file://' + pycompat.bytesurl(urlreq.pathname2url(path)) 595 url_ = 'file://' + pycompat.bytesurl(urlreq.pathname2url(path))
596 authinfo = None 596 authinfo = None
597 return opener(ui, authinfo).open(pycompat.strurl(url_), data) 597 return opener(ui, authinfo).open(pycompat.strurl(url_), data)
598
599 def wrapresponse(resp):
600 """Wrap a response object with common error handlers.
601
602 This ensures that any I/O from any consumer raises the appropriate
603 error and messaging.
604 """
605 origread = resp.read
606
607 class readerproxy(resp.__class__):
608 def read(self, size=None):
609 try:
610 return origread(size)
611 except httplib.IncompleteRead as e:
612 # e.expected is an integer if length known or None otherwise.
613 if e.expected:
614 got = len(e.partial)
615 total = e.expected + got
616 msg = _('HTTP request error (incomplete response; '
617 'expected %d bytes got %d)') % (total, got)
618 else:
619 msg = _('HTTP request error (incomplete response)')
620
621 raise error.PeerTransportError(
622 msg,
623 hint=_('this may be an intermittent network failure; '
624 'if the error persists, consider contacting the '
625 'network or server operator'))
626 except httplib.HTTPException as e:
627 raise error.PeerTransportError(
628 _('HTTP request error (%s)') % e,
629 hint=_('this may be an intermittent network failure; '
630 'if the error persists, consider contacting the '
631 'network or server operator'))
632
633 resp.__class__ = readerproxy