Module: deluge
Branch: master
Commit: 1f800bf49a4cf5ce93765dc6b7d1b102003f25ec

Author: Pedro Algarvio <[email protected]>
Date:   Sat Jan  1 18:33:41 2011 +0000

On a 64bit platform with old plugins, the deprecation code was unable to find 
out which was the caller module. This might also happen on other platforms 
although I was unable to reproduce it on x86. Anyway, handle it cleanly.

---

 deluge/log.py |   33 +++++++++++++++++++++------------
 1 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/deluge/log.py b/deluge/log.py
index af610e0..a5e8f64 100644
--- a/deluge/log.py
+++ b/deluge/log.py
@@ -263,21 +263,30 @@ class __BackwardsCompatibleLOG(object):
         import warnings
         logger_name = 'deluge'
         stack = inspect.stack()
-        module_stack = stack.pop(1)
+        stack.pop(0)                # The logging call from this module
+        module_stack = stack.pop(0) # The module that called the log function
         caller_module = inspect.getmodule(module_stack[0])
+        # In some weird cases caller_module might be None, try to continue
+        caller_module_name = getattr(caller_module, '__name__', '')
         warnings.warn_explicit(DEPRECATION_WARNING, DeprecationWarning,
                                module_stack[1], module_stack[2],
-                               caller_module.__name__)
-        for member in stack:
-            module = inspect.getmodule(member[0])
-            if not module:
-                continue
-            if module.__name__ in ('deluge.plugins.pluginbase',
-                                   'deluge.plugins.init'):
-                logger_name += '.plugin.%s' % caller_module.__name__
-                # Monkey Patch The Plugin Module
-                caller_module.log = logging.getLogger(logger_name)
-                break
+                               caller_module_name)
+        if caller_module:
+            for member in stack:
+                module = inspect.getmodule(member[0])
+                if not module:
+                    continue
+                if module.__name__ in ('deluge.plugins.pluginbase',
+                                       'deluge.plugins.init'):
+                    logger_name += '.plugin.%s' % caller_module_name
+                    # Monkey Patch The Plugin Module
+                    caller_module.log = logging.getLogger(logger_name)
+                    break
+        else:
+            logging.getLogger(logger_name).warning(
+                "Unable to monkey-patch the calling module's `log` attribute! "
+                "You should really update and rebuild your plugins..."
+            )
         return getattr(logging.getLogger(logger_name), name)
 
 LOG = __BackwardsCompatibleLOG()

-- 
You received this message because you are subscribed to the Google Groups 
"deluge-commit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/deluge-commit?hl=en.

Reply via email to