[PATCH] [py3] Let InstanceCommand.run_arg() always return an int

Denis Laxalde denis.laxalde at logilab.fr
Wed Jun 13 11:31:46 CEST 2018


# HG changeset patch
# User Denis Laxalde <denis.laxalde at logilab.fr>
# Date 1528880957 -7200
#      Wed Jun 13 11:09:17 2018 +0200
# Node ID e5e4d02901b8437b37573daf377a4bbcb7dcc629
# Parent  f90e0d5c9a647bbd3fe296814facf48f16b34332
# Available At https://hg.logilab.org/review/cubicweb
#              hg pull https://hg.logilab.org/review/cubicweb -r e5e4d02901b8
# EXP-Topic py3
[py3] Let InstanceCommand.run_arg() always return an int

The caller of this method (which is method "run_args") does `max(status,
self.run_arg(appid))` and run_arg might return None if the underlying
<cmdname>_instance method returns None. On python3 max(1, None) breaks
with "TypeError: unorderable types: int() > NoneType()". So we enforce
run_arg() method to return an integer even if the underlying method
returns None.

This fixes call of "cubicweb-ctl i18ninstance" with Python3.

diff --git a/cubicweb/cwctl.py b/cubicweb/cwctl.py
--- a/cubicweb/cwctl.py
+++ b/cubicweb/cwctl.py
@@ -148,7 +148,7 @@ class InstanceCommand(Command):
     def run_arg(self, appid):
         cmdmeth = getattr(self, '%s_instance' % self.name)
         try:
-            status = cmdmeth(appid)
+            status = cmdmeth(appid) or 0
         except (ExecutionError, ConfigurationError) as ex:
             sys.stderr.write('instance %s not %s: %s\n' % (
                     appid, self.actionverb, ex))


More information about the cubicweb-devel mailing list