Module: deluge
Branch: master
Commit: 24c945f139a2f5fa15d8386442afe4be0fde03b0

Author: Andrew Resch <[email protected]>
Date:   Mon Jun  6 13:55:51 2011 -0700

Add a RPCServer.deregister method
Deregister RPC exports when disabling a Core plugin

---

 deluge/core/rpcserver.py     |   11 +++++++++++
 deluge/plugins/pluginbase.py |    3 +++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/deluge/core/rpcserver.py b/deluge/core/rpcserver.py
index e206936..93315d4 100644
--- a/deluge/core/rpcserver.py
+++ b/deluge/core/rpcserver.py
@@ -424,6 +424,17 @@ class RPCServer(component.Component):
                 log.debug("Registering method: %s", name + "." + d)
                 self.factory.methods[name + "." + d] = getattr(obj, d)
 
+    def deregister_object(self, obj):
+        """
+        Deregisters an objects exported rpc methods.
+        
+        :param obj: the object that was previously registered
+        
+        """
+        for key, value in self.factory.methods.items():
+            if value.im_self == obj:
+                del self.factory.methods[key]
+                
     def get_object_method(self, name):
         """
         Returns a registered method.
diff --git a/deluge/plugins/pluginbase.py b/deluge/plugins/pluginbase.py
index a59aab7..cdabcf6 100644
--- a/deluge/plugins/pluginbase.py
+++ b/deluge/plugins/pluginbase.py
@@ -58,6 +58,9 @@ class CorePluginBase(PluginBase):
         component.get("RPCServer").register_object(self, plugin_name.lower())
         log.debug("CorePlugin initialized..")
 
+    def __del__(self):
+        component.get("RPCServer").deregister_object(self)
+
 class GtkPluginBase(PluginBase):
     def __init__(self, plugin_name):
         super(GtkPluginBase, self).__init__("GtkPlugin." + plugin_name)

-- 
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