[bmap-tools] [PATCH 2/3] TransRead: accept the logger object

Artem Bityutskiy dedekind1 at gmail.com
Fri Sep 13 06:48:13 EDT 2013

From: Artem Bityutskiy <artem.bityutskiy at intel.com>

In order to improve user experience, I would like to print warnings when we
cannot open the URL for some time. This requires the TransRead object to accept
the logger object, or take the global one.

Change-Id: I4fc9f3d6544a2a699b6476dddf362aa127e81550
Signed-off-by: Artem Bityutskiy <artem.bityutskiy at intel.com>
 bmaptool               | 10 +++++-----
 bmaptools/TransRead.py | 10 +++++++++-
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/bmaptool b/bmaptool
index 50eeea1..3c607e8 100755
--- a/bmaptool
+++ b/bmaptool
@@ -95,7 +95,7 @@ def copy_command_open_blkdev(path, log):
     return NamedFile(file_obj, path)
-def find_and_open_bmap(image_path):
+def find_and_open_bmap(image_path, log):
     When the user does not specify the bmap file, we try to find it at the same
     place where the image file is located. We search for a file with the same
@@ -113,7 +113,7 @@ def find_and_open_bmap(image_path):
         bmap_path = image_path + ".bmap"
-            bmap_obj = TransRead.TransRead(bmap_path)
+            bmap_obj = TransRead.TransRead(bmap_path, logger=log)
             return bmap_path
         except TransRead.Error:
@@ -140,7 +140,7 @@ def copy_command_open_all(args, log):
     # Open the image file using the TransRead module, which will automatically
     # recognize whether it is compressed or whether file path is an URL, etc.
-        image_obj = TransRead.TransRead(args.image)
+        image_obj = TransRead.TransRead(args.image, logger=log)
     except TransRead.Error as err:
         log.error("cannot open image: %s" % str(err))
         raise SystemExit(1)
@@ -149,7 +149,7 @@ def copy_command_open_all(args, log):
     # was not specified.
     bmap_path = args.bmap
     if not bmap_path and not args.nobmap:
-        bmap_path = find_and_open_bmap(args.image)
+        bmap_path = find_and_open_bmap(args.image, log)
         if bmap_path:
             log.info("discovered bmap file '%s'" % bmap_path)
@@ -158,7 +158,7 @@ def copy_command_open_all(args, log):
             # The current implementation of BmapCopy requires a local file for
             # the bmap file.
-            bmap_obj = TransRead.TransRead(bmap_path, local = True)
+            bmap_obj = TransRead.TransRead(bmap_path, local=True, logger=log)
         except TransRead.Error as err:
             log.error("cannot open bmap file '%s': %s" % (bmap_path, str(err)))
             raise SystemExit(1)
diff --git a/bmaptools/TransRead.py b/bmaptools/TransRead.py
index 45c243d..49c7b59 100644
--- a/bmaptools/TransRead.py
+++ b/bmaptools/TransRead.py
@@ -19,6 +19,7 @@ them on-the-fly if needed. Remote files are read using urllib2 (except of
 import os
 import errno
 import urlparse
+import logging
 # Disable the following pylint errors and recommendations:
 #   * Instance of X has no member Y (E1101), because it produces
@@ -218,7 +219,7 @@ class TransRead:
     this class are file-like objects which you can read and seek only forward.
-    def __init__(self, filepath, local=False):
+    def __init__(self, filepath, local=False, logger=None):
         Class constructor. The 'filepath' argument is the full path to the file
         to read transparently. If 'local' is True, then the file-like object is
@@ -226,8 +227,15 @@ class TransRead:
         if the source file is compressed and/or an URL, then it will first be
         copied to an temporary local file, and then all the subsequent
         operations will be done with the uncompresed local copy.
+        The "logger" argument is the logger object to use for printing
+        messages.
+        self._logger = logger
+        if self._logger is None:
+            self._logger = logging.getLogger(__name__)
         self.name = filepath
         # Size of the file (in uncompressed form), may be 'None' if the size is
         # unknown

More information about the Bmap-tools mailing list