comparison mercurial/httppeer.py @ 25500:00ecc894138d

httppeer: allow extensions to replace urllib2.Request The authentication library my extension wants to use requires using a different opener and a different request builder. This change pulls the call to urllib2.Request out so that my extension can replace it just like it can replace urlopener.
author Kyle Lippincott <spectral@google.com>
date Mon, 08 Jun 2015 16:55:21 -0700
parents e05734cd7902
children 328739ea70c3
comparison
equal deleted inserted replaced
25499:0fa964d6fd48 25500:00ecc894138d
28 def __init__(self, ui, path): 28 def __init__(self, ui, path):
29 self.path = path 29 self.path = path
30 self.caps = None 30 self.caps = None
31 self.handler = None 31 self.handler = None
32 self.urlopener = None 32 self.urlopener = None
33 self.requestbuilder = None
33 u = util.url(path) 34 u = util.url(path)
34 if u.query or u.fragment: 35 if u.query or u.fragment:
35 raise util.Abort(_('unsupported URL component: "%s"') % 36 raise util.Abort(_('unsupported URL component: "%s"') %
36 (u.query or u.fragment)) 37 (u.query or u.fragment))
37 38
40 41
41 self.ui = ui 42 self.ui = ui
42 self.ui.debug('using %s\n' % self._url) 43 self.ui.debug('using %s\n' % self._url)
43 44
44 self.urlopener = url.opener(ui, authinfo) 45 self.urlopener = url.opener(ui, authinfo)
46 self.requestbuilder = urllib2.Request
45 47
46 def __del__(self): 48 def __del__(self):
47 if self.urlopener: 49 if self.urlopener:
48 for h in self.urlopener.handlers: 50 for h in self.urlopener.handlers:
49 h.close() 51 h.close()
109 headers['Vary'] = ','.join(varyheaders) 111 headers['Vary'] = ','.join(varyheaders)
110 else: 112 else:
111 q += sorted(args.items()) 113 q += sorted(args.items())
112 qs = '?%s' % urllib.urlencode(q) 114 qs = '?%s' % urllib.urlencode(q)
113 cu = "%s%s" % (self._url, qs) 115 cu = "%s%s" % (self._url, qs)
114 req = urllib2.Request(cu, data, headers) 116 req = self.requestbuilder(cu, data, headers)
115 if data is not None: 117 if data is not None:
116 self.ui.debug("sending %s bytes\n" % size) 118 self.ui.debug("sending %s bytes\n" % size)
117 req.add_unredirected_header('Content-Length', '%d' % size) 119 req.add_unredirected_header('Content-Length', '%d' % size)
118 try: 120 try:
119 resp = self.urlopener.open(req) 121 resp = self.urlopener.open(req)