From ee8108111d5a377d33bcd44368748fd4b080c01d Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 1 May 2007 17:47:54 -0400 Subject: [PATCH] Add a workaround for Ubuntu 7.04/amd64 signal importation problem of signal module. --- scripting/python/adesklets/events_handler.py | 6 ++++++ scripting/python/adesklets/signal_handler.py | 14 +++++++++++--- scripting/python/adesklets/utils.py | 9 +++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/scripting/python/adesklets/events_handler.py b/scripting/python/adesklets/events_handler.py index 7d7cf3f..fb608cc 100644 --- a/scripting/python/adesklets/events_handler.py +++ b/scripting/python/adesklets/events_handler.py @@ -9,6 +9,12 @@ import sys from signal_handler import Signal_handler from singleton import _Singleton, _States +from utils import inject_module + +# It seems that the importation of signal module inside posix_signal is failing +# on Ubuntu 7.04/amd64: this is a workaround. +# +if not hasattr(posix_signal, 'signal'): inject_module(posix_signal, 'signal') class _Events_handler(Signal_handler, _States): """ diff --git a/scripting/python/adesklets/signal_handler.py b/scripting/python/adesklets/signal_handler.py index 6e6597a..642bfb8 100644 --- a/scripting/python/adesklets/signal_handler.py +++ b/scripting/python/adesklets/signal_handler.py @@ -8,23 +8,31 @@ in the base class. """ import types +from utils import inject_module class Signal_handler: """ Create a mechanism to set a signal handler and reset when the instance is destroyed. """ - # the module is encapsulated in the class import posix_signal - func = posix_signal.signal - ignore = posix_signal.SIG_IGN def __init__(self, signals, handler=None): """ Can take integer signal number (checked in the signal module) or the string name of a valid signal (encapsulated in an array) """ + + # It seems that the importation of signal module inside posix_signal is + # failing on Ubuntu 7.04/amd64: this is a workaround. + # + if not hasattr(self.posix_signal, 'signal'): + inject_module(self.posix_signal, 'signal') + + Signal_handler.func = self.posix_signal.signal + Signal_handler.ignore = self.posix_signal.SIG_IGN + self.sigvals_and_handlers = {} # Dictionary for signal in signals: sigval = self._sigval(signal) diff --git a/scripting/python/adesklets/utils.py b/scripting/python/adesklets/utils.py index 9cba365..875bcff 100644 --- a/scripting/python/adesklets/utils.py +++ b/scripting/python/adesklets/utils.py @@ -19,3 +19,12 @@ def version_check(ver): return compute_version(ver)<=compute_version(version()) #------------------------------------------------------------------------------- +def inject_module(mod1, mod2): + """Inject all symbols from mod2 into mod1 namespace""" + if not hasattr(mod1, mod2): + mod = __import__(mod2) + for k, v in mod.__dict__.iteritems(): + if k not in ['__doc__', '__name__']: + setattr(mod1, k, v) + +#------------------------------------------------------------------------------- -- 2.11.4.GIT