raise MaxTriesExceededError
- def retrieve(self, url, filename, show_progress=True, message=None, **kwargs):
+ def retrieve(self, url, filename, message=None, **kwargs):
p = None
if message is None:
buffer_size = 100 * 1024 # 100k
- # Make a progressbar
- if show_progress:
- p = self._make_progressbar(message)
-
# Prepare HTTP request
r = self._make_request(url, **kwargs)
# Send the request
- with self._send_request(r) as f:
- # Try setting progress bar to correct maximum value
- # XXX this might need a function in ProgressBar
- l = self._get_content_length(f)
- if p:
+ with self._make_progressbar(message) as p:
+ with self._send_request(r) as f:
+ # Try setting progress bar to correct maximum value
+ # XXX this might need a function in ProgressBar
+ l = self._get_content_length(f)
p.value_max = l
- buf = f.read(buffer_size)
- while buf:
- l = len(buf)
- if p:
- p.update_increment(l)
+ while True:
+ buf = f.read(buffer_size)
+ if not buf:
+ break
- buf = f.read(buffer_size)
-
- if p:
- p.finish()
+ l = len(buf)
+ p.update_increment(l)
def _get_content_length(self, response):
s = response.getheader("Content-Length")
return "Basic %s" % authstring.decode("ascii")
- def _make_progressbar(self, message=None):
- p = progressbar.ProgressBar()
+ def _make_progressbar(self, message=None, **kwargs):
+ p = progressbar.ProgressBar(**kwargs)
# Show message (e.g. filename)
if message:
w = progressbar.WidgetETA()
p.add(w)
- return p.start()
+ return p
class HTTPError(errors.Error):
return 0
+ # Implement using progressbar as context
+
+ def __enter__(self):
+ # Start the progressbar
+ self.start()
+
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.finish()
+
def format_updatable(widget, pbar):
if hasattr(widget, "update"):