Mercurial > hg
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) |