[virt-manager PATCH 05/16] i18n: fix string puzzles in error messages

Pino Toscano ptoscano at redhat.com
Tue Jul 14 07:41:49 UTC 2020


Do not split the error messages and the error details, but rather use a
single string with proper placeholders. This avoids string puzzles.

Signed-off-by: Pino Toscano <ptoscano at redhat.com>
---
 virtManager/clone.py                   | 10 ++++++----
 virtManager/connection.py              | 15 ++++++++++-----
 virtManager/createvm.py                |  2 +-
 virtManager/delete.py                  |  7 ++++---
 virtManager/details/console.py         |  2 +-
 virtManager/details/viewers.py         |  6 ++++--
 virtManager/device/netlist.py          |  6 ++++--
 virtManager/vmmenu.py                  |  2 +-
 virtinst/cli.py                        |  6 ++++--
 virtinst/cloner.py                     |  6 ++++--
 virtinst/diskbackend.py                |  6 +++---
 virtinst/install/installertreemedia.py |  6 ++++--
 virtinst/install/urlfetcher.py         | 12 ++++++++----
 virtinst/storage.py                    |  6 ++++--
 virtinst/virtxml.py                    | 18 ++++++++++++------
 15 files changed, 70 insertions(+), 40 deletions(-)

diff --git a/virtManager/clone.py b/virtManager/clone.py
index ecd56b5d..43a04802 100644
--- a/virtManager/clone.py
+++ b/virtManager/clone.py
@@ -806,10 +806,12 @@ class vmmCloneVM(vmmGObjectUI):
         self.reset_finish_cursor()
 
         if error is not None:
-            msg = (_("Error creating virtual machine clone '%s'") %
-                      self.clone_design.clone_name)
-            msg += ": %s" % error
-            self.err.show_err(msg, details=details)
+            error = (_("Error creating virtual machine clone '%(vm)s': "
+                       "%(error)s") % {
+                     "vm": self.clone_design.clone_name,
+                     "error": error,
+                     })
+            self.err.show_err(error, details=details)
             return
 
         conn.schedule_priority_tick(pollvm=True)
diff --git a/virtManager/connection.py b/virtManager/connection.py
index bed6f5d5..01d5e03a 100644
--- a/virtManager/connection.py
+++ b/virtManager/connection.py
@@ -598,11 +598,16 @@ class vmmConnection(vmmGObject):
             except Exception as fixerr:
                 log.debug("Failed to redefine original %s!",
                     obj.class_name(), exc_info=True)
-                msg = (_("%s rename failed. Attempting to "
-                    "recover also failed") % (obj.class_name()))
-                msg += "\n\n"
-                msg += ("Original error: %s\n\n" % str(renameerr))
-                msg += ("Recover error: %s" % str(fixerr))
+                msg = _("%(object)s rename failed. Attempting to recover also "
+                        "failed.\n"
+                        "\n"
+                        "Original error: %(origerror)s\n"
+                        "\n"
+                        "Recover error: %s") % {
+                            "object": obj.class_name(),
+                            "origerror": str(renameerr),
+                            "recovererror": str(fixerr),
+                        }
                 raise RuntimeError(msg)
             raise
         finally:
diff --git a/virtManager/createvm.py b/virtManager/createvm.py
index 5f15f5c3..1120ea2a 100644
--- a/virtManager/createvm.py
+++ b/virtManager/createvm.py
@@ -1923,7 +1923,7 @@ class vmmCreateVM(vmmGObjectUI):
             self._show_customize_dialog(guest, installer)
         except Exception as e:
             self.reset_finish_cursor()
-            self.err.show_err(_("Error starting installation: ") + str(e))
+            self.err.show_err(_("Error starting installation: %s") % str(e))
             return
 
     def _cleanup_customize_window(self):
diff --git a/virtManager/delete.py b/virtManager/delete.py
index 40284505..28edc727 100644
--- a/virtManager/delete.py
+++ b/virtManager/delete.py
@@ -199,9 +199,10 @@ class _vmmDeleteBase(vmmGObjectUI):
 
             self._delete_vm(vm)
         except Exception as e:
-            error = (
-                (_("Error deleting virtual machine '%s'") % vm.get_name()) +
-                (": %s") % str(e))
+            error = _("Error deleting virtual machine '%(vm)s': %(error)s") % {
+                        "vm": vm.get_name(),
+                        "error": str(e),
+                    }
             details = "".join(traceback.format_exc())
 
         storage_errstr = ""
diff --git a/virtManager/details/console.py b/virtManager/details/console.py
index 193e79eb..ae9b85ed 100644
--- a/virtManager/details/console.py
+++ b/virtManager/details/console.py
@@ -736,7 +736,7 @@ class vmmConsolePages(vmmGObjectUI):
         except Exception as e:
             log.exception("Error connection to graphical console")
             self._activate_unavailable_page(
-                    _("Error connecting to graphical console") + ":\n%s" % e)
+                    _("Error connecting to graphical console:\n%s") % e)
 
     def _set_credentials(self, src_ignore=None):
         passwd = self.widget("console-auth-password")
diff --git a/virtManager/details/viewers.py b/virtManager/details/viewers.py
index bcefa86a..4ae0e668 100644
--- a/virtManager/details/viewers.py
+++ b/virtManager/details/viewers.py
@@ -461,8 +461,10 @@ class VNCViewer(Viewer):
             self._sockfd = sock
         except Exception as e:
             raise RuntimeError(
-                (_("Error opening socket path '%s'") % self._ginfo.gsocket) +
-                (": %s" % e))
+                _("Error opening socket path '%(path)s': %(error)s") % {
+                    "path": self._ginfo.gsocket,
+                    "error": e,
+                })
 
         fd = self._sockfd.fileno()
         if fd < 0:
diff --git a/virtManager/device/netlist.py b/virtManager/device/netlist.py
index 29aeac50..cfd7a442 100644
--- a/virtManager/device/netlist.py
+++ b/virtManager/device/netlist.py
@@ -211,8 +211,10 @@ class vmmNetworkList(vmmGObjectUI):
             log.debug("Started network '%s'", devname)
         except Exception as e:
             return self.err.show_err(
-                    (_("Could not start virtual network '%s'") % devname) +
-                    (": %s") % str(e))
+                _("Could not start virtual network '%(device)s': %(error)s") % {
+                    "device": devname,
+                    "error": str(e),
+                })
 
     def _find_rowiter_for_dev(self, net):
         nettype = net.type
diff --git a/virtManager/vmmenu.py b/virtManager/vmmenu.py
index a5b4410f..5883ce34 100644
--- a/virtManager/vmmenu.py
+++ b/virtManager/vmmenu.py
@@ -239,7 +239,7 @@ class VMActionUI(object):
             def errorcb(error, details):
                 # This is run from the main thread
                 res = src.err.show_err(
-                    _("Error restoring domain") + ": " + error,
+                    _("Error restoring domain: %s") % error,
                     details=details,
                     text2=_(
                         "The domain could not be restored. Would you like\n"
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 37b1f617..ed9fd911 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -489,8 +489,10 @@ def get_domain_and_guest(conn, domstr):
             else:
                 raise
     except libvirt.libvirtError as e:
-        fail((_("Could not find domain '%s'") % domstr) +
-             (": " + str(e)))
+        fail(_("Could not find domain '%(domain)s': %(error)s") % {
+                 "domain": domstr,
+                 "error": str(e),
+             })
 
     state = domain.info()[0]
     active_xmlobj = None
diff --git a/virtinst/cloner.py b/virtinst/cloner.py
index 7d4db4f3..d3ba1bfa 100644
--- a/virtinst/cloner.py
+++ b/virtinst/cloner.py
@@ -43,8 +43,10 @@ def _replace_vm(conn, name):
         vm.undefine()
     except libvirt.libvirtError as e:  # pragma: no cover
         raise RuntimeError(
-                (_("Could not remove old vm '%s'") % name) +
-                (": " + str(e)))
+            _("Could not remove old vm '%(vm)s': %(error)s") % {
+                "vm": name,
+                "error": str(e),
+            })
 
 
 class Cloner(object):
diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
index f35964db..0dcfe663 100644
--- a/virtinst/diskbackend.py
+++ b/virtinst/diskbackend.py
@@ -623,10 +623,10 @@ class CloneStorageCreator(_StorageCreator):
                         meter.update(i)
             except OSError as e:  # pragma: no cover
                 msg = (_("Error cloning diskimage "
-                         "%(inputpath)s to %(outputpath)s") %
+                         "%(inputpath)s to %(outputpath)s: %(error)s") %
                          {"inputpath": self._input_path,
-                          "outputpath": self._output_path})
-                msg += ": " + str(e)
+                          "outputpath": self._output_path,
+                          "error": str(e)})
                 raise RuntimeError(msg)
         finally:
             if src_fd is not None:
diff --git a/virtinst/install/installertreemedia.py b/virtinst/install/installertreemedia.py
index d39d346d..318c56d0 100644
--- a/virtinst/install/installertreemedia.py
+++ b/virtinst/install/installertreemedia.py
@@ -68,8 +68,10 @@ class InstallerTreeMedia(object):
                     "from the local directory mount point.")
 
             raise ValueError(
-                (_("Validating install media '%s' failed") % str(path)) +
-                (": %s" % e))
+                _("Validating install media '%(media)s' failed: %(error)s") % {
+                    "media": str(path),
+                    "error": str(e),
+                })
 
     @staticmethod
     def get_system_scratchdir(guest):
diff --git a/virtinst/install/urlfetcher.py b/virtinst/install/urlfetcher.py
index 70755bcd..d539e142 100644
--- a/virtinst/install/urlfetcher.py
+++ b/virtinst/install/urlfetcher.py
@@ -68,8 +68,10 @@ class _URLFetcher(object):
             urlobj, size = self._grabber(url)
         except Exception as e:
             raise ValueError(
-                    (_("Couldn't acquire file %s") % url) +
-                    (": %s" % str(e)))
+                _("Couldn't acquire file %(url)s: %(error)s") % {
+                    "url": url,
+                    "error": str(e),
+                })
 
         log.debug("Fetching URI: %s", url)
         self.meter.start(
@@ -246,8 +248,10 @@ class _FTPURLFetcher(_URLFetcher):
             self._ftp.voidcmd("TYPE I")
         except Exception as e:  # pragma: no cover
             raise ValueError(
-                    (_("Opening URL %s failed") % self.location) +
-                    (": %s" % str(e)))
+                _("Opening URL %(url)s failed: %(error)s") % {
+                    "url": self.location,
+                    "error": str(e),
+                })
 
     def _grabber(self, url):
         """
diff --git a/virtinst/storage.py b/virtinst/storage.py
index 93fe3aa3..796bc3bd 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -163,8 +163,10 @@ class StoragePool(_StorageObject):
             return defpool
         except Exception as e:  # pragma: no cover
             raise RuntimeError(
-                (_("Couldn't create default storage pool '%s'") % path) +
-                (": %s" % str(e)))
+                _("Couldn't create default storage pool '%(path)s': %(error)s") % {
+                    "path": path,
+                    "error": str(e),
+                })
 
     @staticmethod
     def lookup_pool_by_path(conn, path):
diff --git a/virtinst/virtxml.py b/virtinst/virtxml.py
index 95752a69..5b36837e 100644
--- a/virtinst/virtxml.py
+++ b/virtinst/virtxml.py
@@ -243,8 +243,10 @@ def start_domain_transient(conn, xmlobj, devs, action, confirm):
     try:
         dom = conn.createXML(xmlobj.get_xml())
     except libvirt.libvirtError as e:
-        fail((_("Failed starting domain '%s'") % xmlobj.name) +
-             (": %s" % e))
+        fail(_("Failed starting domain '%(domain)s': %(error)s") % {
+                 "vm": xmlobj.name,
+                 "error": e,
+             })
     else:
         print_stdout(_("Domain '%s' started successfully.") % xmlobj.name)
         return dom
@@ -278,8 +280,10 @@ def update_changes(domain, devs, action, confirm):
             elif action == "update":
                 domain.updateDeviceFlags(xml, libvirt.VIR_DOMAIN_AFFECT_LIVE)
         except libvirt.libvirtError as e:
-            fail((_("Error attempting device action %s") % action) +
-                 (": %s" % e))
+            fail(_("Error attempting device action %(action)s: %(error)s") % {
+                     "action": action,
+                     "error": e,
+                 })
 
         # Test driver doesn't support device hotplug so we can't reach this
         print_stdout(_("Device %s successful.") % action)  # pragma: no cover
@@ -505,8 +509,10 @@ def main(conn=None):
         try:
             dom.create()
         except libvirt.libvirtError as e:  # pragma: no cover
-            fail((_("Failed starting domain '%s'") % inactive_xmlobj.name) +
-                 (": " % e))
+            fail(_("Failed starting domain '%(domain)s': %(error)s") % {
+                     "domain": inactive_xmlobj.name,
+                     "error": e,
+                 })
         print_stdout(_("Domain '%s' started successfully.") %
                      inactive_xmlobj.name)
 
-- 
2.26.2




More information about the virt-tools-list mailing list