** Description changed:
[ Impact ]
* There is a bug in cmd2 v0.8.5 where an exception is thrown when GTK3
libraries are not installed. This causes Python applications using
cmd2 to crash unexpectedly
* This patch backports a fix from upstream that handles that expection
gracefully, allowing applications to function properly.
* The workaround to this was to install GTK3, which is not ideal as the
Python applications are command line tools, not graphical
[ Test Plan ]
- * Deploy focal
+ 1) Deploy focal
+ 2) Enable wallaby, xena or yoga proposed
- * Install an application that has cmd2 as a dependency
- e.g. python3-openstackclient
+ sudo add-apt-repository cloud-archive:yoga-proposed
- * Run command that uses cmd2: `openstack server list`
-
- * In the failing case, we would expect to see an uncaught ValueError
exception
+ 3) sudo apt update
+ 4) sudo apt install python3-openstackclient
+ 5) confirm packages installed
- * In the successful case, the command runs as anticipated
+ dpkg -l | egrep "(cmd2|pyperclip|cliff)"
+
+ python3-cliff 3.10.0...
+ python3-cmd2 0.8.5-2.1...
+ python3-pyperclip 1.7.0-1
+
+ 6) Simulate that a display is present
+
+ export DISPLAY=:1
+
+ 7) source a credentials file
+
+ source novarc
+
+ 8) Try to list servers
+
+ openstack server list
+
+ Traceback (most recent call last):
+ File "/usr/bin/openstack", line 6, in <module>
+ from openstackclient.shell import main
+ File "/usr/lib/python3/dist-packages/openstackclient/shell.py", line 23, in
<module>
+ from osc_lib import shell
+ File "/usr/lib/python3/dist-packages/osc_lib/shell.py", line 24, in <module>
+ from cliff import app
+ File "/usr/lib/python3/dist-packages/cliff/app.py", line 23, in <module>
+ import cmd2
+ File "/usr/lib/python3/dist-packages/cmd2.py", line 585, in <module>
+ _ = pyperclip.paste()
+ File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 667, in
lazy_load_stub_paste
+ copy, paste = determine_clipboard()
+ File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 558, in
determine_clipboard
+ return init_gi_clipboard()
+ File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 167, in
init_gi_clipboard
+ gi.require_version('Gtk', '3.0')
+ File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in
require_version
+ raise ValueError('Namespace %s not available' % namespace)
+ ValueError: Namespace Gtk not available
+
+ 9) Enable focal proposed pocket
+
+
+ cat <<EOF >/etc/apt/sources.list.d/ubuntu-$(lsb_release -cs)-proposed.list
+ # Enable Ubuntu proposed archive
+ deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-proposed restricted
main multiverse universe
+ EOF
+
+ sudo apt update
+
+ 10) update python3-cmd2
+
+ sudo apt install python3-cmd2
+
+ 11) retest, should not produce any error
+
+ openstack server list
+
[ Where problems could occur ]
- * This changes the error handling for a library that is used by many
- Python applications. Some of these applications could rely on the
- existing behavior (a ValueError exception being thrown) to detect
- certain configurations and change their behavior accordingly.
-
- * This would result in those applications failing under certain use
- cases. For example, the configuration in question is a headless
- Linux system without GTK libraries installed.
+ * The code change being backported is already present in jammy+,
+ therefore no issues or regressions are expected. However, given that
+ cmd2 is a library used by many different applications, and some may be
+ coded to handle the ValueError exception on version 0.8.5, or other code
+ modifications that exist in later versions but not in 0.8.5, this change
+ could potentially break the interaction with other applications that
+ were expecting a ValueErrro to be thrown. However, such scenario is
+ considered to be unlikely.
[ Original bug description ]
Openstack release: Wallaby
OS: Ubuntu 20.04 server edition
After installation of python3-openstackclient from apt, while setting up
user, roles and project, I executed following command:
openstack domain create --description "An Example Domain" example
Error:
Traceback (most recent call last):
File "/usr/bin/openstack", line 6, in <module>
from openstackclient.shell import main
File "/usr/lib/python3/dist-packages/openstackclient/shell.py", line 23, in
<module>
from osc_lib import shell
File "/usr/lib/python3/dist-packages/osc_lib/shell.py", line 24, in <module>
from cliff import app
File "/usr/lib/python3/dist-packages/cliff/app.py", line 22, in <module>
import cmd2
File "/usr/lib/python3/dist-packages/cmd2.py", line 585, in <module>
_ = pyperclip.paste()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 667, in
lazy_load_stub_paste
copy, paste = determine_clipboard()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 558, in
determine_clipboard
return init_gi_clipboard()
File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 167, in
init_gi_clipboard
gi.require_version('Gtk', '3.0')
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in
require_version
raise ValueError('Namespace %s not available' % namespace)
Had to install GTK3 to make openstack commands work but it is taking
huge time to get a response to the commands. The wait time after firing
any openstack cli command is around 30 seconds.
Anybody faced the issue? What is the fix for it if it exists?
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1945661
Title:
openstack commands fail with GTK3 error
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/cmd2/+bug/1945661/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs