##// END OF EJS Templates
httppeer: extract code for performing an HTTP request...
Gregory Szorc -
r37566:8e7a4435 default
parent child Browse files
Show More
@@ -138,6 +138,46 b' class _multifile(object):'
138 f.seek(0)
138 f.seek(0)
139 self._index = 0
139 self._index = 0
140
140
141 def sendrequest(ui, opener, req):
142 """Send a prepared HTTP request.
143
144 Returns the response object.
145 """
146 if (ui.debugflag
147 and ui.configbool('devel', 'debug.peer-request')):
148 dbg = ui.debug
149 line = 'devel-peer-request: %s\n'
150 dbg(line % '%s %s' % (req.get_method(), req.get_full_url()))
151 hgargssize = None
152
153 for header, value in sorted(req.header_items()):
154 if header.startswith('X-hgarg-'):
155 if hgargssize is None:
156 hgargssize = 0
157 hgargssize += len(value)
158 else:
159 dbg(line % ' %s %s' % (header, value))
160
161 if hgargssize is not None:
162 dbg(line % ' %d bytes of commands arguments in headers'
163 % hgargssize)
164
165 if req.has_data():
166 data = req.get_data()
167 length = getattr(data, 'length', None)
168 if length is None:
169 length = len(data)
170 dbg(line % ' %d bytes of data' % length)
171
172 start = util.timer()
173
174 res = opener.open(req)
175 if ui.configbool('devel', 'debug.peer-request'):
176 dbg(line % ' finished in %.4f seconds (%s)'
177 % (util.timer() - start, res.code))
178
179 return res
180
141 class httppeer(wireproto.wirepeer):
181 class httppeer(wireproto.wirepeer):
142 def __init__(self, ui, path, url, opener, requestbuilder):
182 def __init__(self, ui, path, url, opener, requestbuilder):
143 self.ui = ui
183 self.ui = ui
@@ -152,41 +192,6 b' class httppeer(wireproto.wirepeer):'
152 h.close()
192 h.close()
153 getattr(h, "close_all", lambda: None)()
193 getattr(h, "close_all", lambda: None)()
154
194
155 def _openurl(self, req):
156 if (self.ui.debugflag
157 and self.ui.configbool('devel', 'debug.peer-request')):
158 dbg = self.ui.debug
159 line = 'devel-peer-request: %s\n'
160 dbg(line % '%s %s' % (req.get_method(), req.get_full_url()))
161 hgargssize = None
162
163 for header, value in sorted(req.header_items()):
164 if header.startswith('X-hgarg-'):
165 if hgargssize is None:
166 hgargssize = 0
167 hgargssize += len(value)
168 else:
169 dbg(line % ' %s %s' % (header, value))
170
171 if hgargssize is not None:
172 dbg(line % ' %d bytes of commands arguments in headers'
173 % hgargssize)
174
175 if req.has_data():
176 data = req.get_data()
177 length = getattr(data, 'length', None)
178 if length is None:
179 length = len(data)
180 dbg(line % ' %d bytes of data' % length)
181
182 start = util.timer()
183
184 ret = self._urlopener.open(req)
185 if self.ui.configbool('devel', 'debug.peer-request'):
186 dbg(line % ' finished in %.4f seconds (%s)'
187 % (util.timer() - start, ret.code))
188 return ret
189
190 # Begin of ipeerconnection interface.
195 # Begin of ipeerconnection interface.
191
196
192 def url(self):
197 def url(self):
@@ -322,7 +327,7 b' class httppeer(wireproto.wirepeer):'
322 self.ui.debug("sending %d bytes\n" % size)
327 self.ui.debug("sending %d bytes\n" % size)
323 req.add_unredirected_header(r'Content-Length', r'%d' % size)
328 req.add_unredirected_header(r'Content-Length', r'%d' % size)
324 try:
329 try:
325 resp = self._openurl(req)
330 resp = sendrequest(self.ui, self._urlopener, req)
326 except urlerr.httperror as inst:
331 except urlerr.httperror as inst:
327 if inst.code == 401:
332 if inst.code == 401:
328 raise error.Abort(_('authorization failed'))
333 raise error.Abort(_('authorization failed'))
General Comments 0
You need to be logged in to leave comments. Login now