def _download_file(self, url, filename): "Download url to filename in workdir." pathname = os.path.join(self.workdir, filename) if self.dsc.verify_file(pathname): Logger.debug('Using existing %s', filename) return True size = [ entry['size'] for entry in self.dsc['Files'] if entry['name'] == filename ] assert len(size) == 1 size = int(size[0]) parsed = urlparse(url) if not self.quiet: Logger.normal('Downloading %s from %s (%0.3f MiB)', filename, parsed.hostname, size / 1024.0 / 1024) if parsed.scheme == 'file': in_ = open(parsed.path, 'rb') else: try: in_ = self.url_opener.open(url) except URLError: return False downloaded = 0 bar_width = 60 try: with open(pathname, 'wb') as out: while True: block = in_.read(10240) if block == b'': break downloaded += len(block) out.write(block) if not self.quiet: percent = downloaded * 100 // size bar = '=' * int(round(downloaded * bar_width / size)) bar = (bar + '>' + ' ' * bar_width)[:bar_width] Logger.stdout.write('[%s] %#3i%%\r' % (bar, percent)) Logger.stdout.flush() in_.close() finally: if not self.quiet: Logger.stdout.write(' ' * (bar_width + 7) + '\r') Logger.stdout.flush() if not self.dsc.verify_file(pathname): Logger.error('Checksum for %s does not match.', filename) return False return True
def component(self): "Cached archive component, in available" if not self._component: Logger.debug('Determining component from Launchpad') self._component = self.lp_spph.getComponent() return self._component