Browse Source

handle ValueError Exception via Gnome import; refs #75

pull/77/head
Chris Caron 6 years ago
parent
commit
81b6e7a212
  1. 5
      apprise/plugins/NotifyGnome.py
  2. 31
      test/test_glib_plugin.py
  3. 28
      test/test_gnome_plugin.py

5
apprise/plugins/NotifyGnome.py

@ -47,10 +47,13 @@ try:
# We're good to go! # We're good to go!
NOTIFY_GNOME_SUPPORT_ENABLED = True NOTIFY_GNOME_SUPPORT_ENABLED = True
except ImportError: except (ImportError, ValueError):
# No problem; we just simply can't support this plugin; we could # No problem; we just simply can't support this plugin; we could
# be in microsoft windows, or we just don't have the python-gobject # be in microsoft windows, or we just don't have the python-gobject
# library available to us (or maybe one we don't support)? # library available to us (or maybe one we don't support)?
# Alternativey A ValueError will get thrown upon calling
# gi.require_version() if the requested Notify namespace isn't available
pass pass

31
test/test_glib_plugin.py

@ -260,3 +260,34 @@ def test_dbus_plugin(mock_mainloop, mock_byte, mock_bytearray,
# Our notification succeeds even though the gi library was not loaded # Our notification succeeds even though the gi library was not loaded
assert(obj.notify(title='title', body='body', assert(obj.notify(title='title', body='body',
notify_type=apprise.NotifyType.INFO) is True) notify_type=apprise.NotifyType.INFO) is True)
# Force a global import error
_session_bus = sys.modules['dbus']
sys.modules['dbus'] = compile('raise ImportError()', 'dbus', 'exec')
# Reload our modules
reload(sys.modules['apprise.plugins.NotifyDBus'])
reload(sys.modules['apprise.plugins'])
reload(sys.modules['apprise.Apprise'])
reload(sys.modules['apprise'])
# Create our instance
obj = apprise.Apprise.instantiate('glib://', suppress_exceptions=False)
assert(isinstance(obj, apprise.plugins.NotifyDBus) is True)
obj.duration = 0
# Test url() call
assert(compat_is_basestring(obj.url()) is True)
# Our notification fail because the dbus library wasn't present
assert(obj.notify(title='title', body='body',
notify_type=apprise.NotifyType.INFO) is False)
# Since playing with the sys.modules is not such a good idea,
# let's just put it back now :)
sys.modules['dbus'] = _session_bus
# Reload our modules
reload(sys.modules['apprise.plugins.NotifyDBus'])
reload(sys.modules['apprise.plugins'])
reload(sys.modules['apprise.Apprise'])
reload(sys.modules['apprise'])

28
test/test_gnome_plugin.py

@ -153,3 +153,31 @@ def test_gnome_plugin():
# Test the setting of a the urgency # Test the setting of a the urgency
apprise.plugins.NotifyGnome(urgency=0) apprise.plugins.NotifyGnome(urgency=0)
# Verify this all works in the event a ValueError is also thronw
# out of the call to gi.require_version()
# Emulate require_version function:
gi.require_version.side_effect = ValueError()
# The following libraries need to be reloaded to prevent
# TypeError: super(type, obj): obj must be an instance or subtype of type
# This is better explained in this StackOverflow post:
# https://stackoverflow.com/questions/31363311/\
# any-way-to-manually-fix-operation-of-\
# super-after-ipython-reload-avoiding-ty
#
reload(sys.modules['apprise.plugins.NotifyGnome'])
reload(sys.modules['apprise.plugins'])
reload(sys.modules['apprise.Apprise'])
reload(sys.modules['apprise'])
# Create our instance
obj = apprise.Apprise.instantiate('gnome://', suppress_exceptions=False)
assert(isinstance(obj, apprise.plugins.NotifyGnome) is True)
obj.duration = 0
# Our notifications can not work without our gi library having been
# loaded.
assert(obj.notify(title='title', body='body',
notify_type=apprise.NotifyType.INFO) is False)

Loading…
Cancel
Save