[elbe-devel] [PATCH 1/2] hashes debinstaller: use wget for downloads, because of improved feedback

Torben Hohn torben.hohn at linutronix.de
Wed Nov 21 13:08:04 CET 2018


copyfileobj() does not support progress callbacks. getting progress
reports would require reimplementing it.

Switch from urlopen() / copyfileobj() to system('wget ...')

Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
---
 elbepack/debinstaller.py |  8 +++-----
 elbepack/hashes.py       | 26 ++++----------------------
 2 files changed, 7 insertions(+), 27 deletions(-)

diff --git a/elbepack/debinstaller.py b/elbepack/debinstaller.py
index d251f202..baf8d8d4 100644
--- a/elbepack/debinstaller.py
+++ b/elbepack/debinstaller.py
@@ -116,11 +116,9 @@ def setup_apt_keyring(gpg_home, keyring_fname):
 
 def download(url, local_fname):
     try:
-        rf = urlopen(url, None, 10)
-        with open(local_fname, "w") as wf:
-            copyfileobj(rf, wf)
-    finally:
-        rf.close()
+        system('wget -O "%s" "%s"' % (local_fname, url))
+    except CommandError:
+        raise NoKinitrdException('Failed to download %s' % url)
 
 
 def download_release(tmp, base_url):
diff --git a/elbepack/hashes.py b/elbepack/hashes.py
index d2dfe053..e32d7456 100644
--- a/elbepack/hashes.py
+++ b/elbepack/hashes.py
@@ -4,21 +4,7 @@
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import hashlib
-from shutil import copyfileobj
-
-# different module names in python 2 and 3
-try:
-    import urllib.request
-
-    # when running inside pylint this import fails
-    # disable no-member here
-    #
-    # pylint: disable=no-member
-
-    urlopen = urllib.request.urlopen
-except ImportError:
-    import urllib2
-    urlopen = urllib2.urlopen
+from elbepack.shellhelper import system, CommandError
 
 
 class HashValidationFailed(Exception):
@@ -57,13 +43,9 @@ class HashValidator(object):
 
     def download_and_validate_file(self, upstream_fname, local_fname):
         url = self.base_url + upstream_fname
-        rf = None
         try:
-            rf = urlopen(url, None, 10)
-            with open(local_fname, "w") as wf:
-                copyfileobj(rf, wf)
-        finally:
-            if rf is not None:
-                rf.close()
+            system('wget -O "%s" "%s"' % (local_fname, url))
+        except CommandError:
+            raise HashValidationFailed('Failed to download %s' % url)
 
         self.validate_file(upstream_fname, local_fname)
-- 
2.11.0




More information about the elbe-devel mailing list