def get_versions(self, header=None, ccancel=None):
"""Query the repo for versions information.
Returns a fileobject. If server returns 401 (Unauthorized)
check for presence of X-IPkg-Error header and decode."""
requesturl = self.__get_request_url("versions/0/")
fobj = self._fetch_url(requesturl, header, ccancel=ccancel,
failonerror=False)
try:
# Bogus request to trigger
# StreamingFileObj.__fill_buffer(), otherwise the
# TransportProtoError won't be raised here. We can't
# use .read() since this will empty the data buffer.
fobj.getheader("octopus", None)
except tx.TransportProtoError as e:
if e.code == http_client.UNAUTHORIZED:
exc_type, exc_value, exc_tb = sys.exc_info()
try:
e.details = self._analyze_server_error(
fobj.getheader("X-IPkg-Error",
None))
except:
# If analysis fails, raise original
# exception.
if six.PY2:
six.reraise(exc_value, None,
exc_tb)
else:
raise exc_value
raise
return fobj
评论列表
文章目录