almahmoud преди 7 години
родител
ревизия
7c4f2a4485
променени са 1 файла, в които са добавени 15 реда и са изтрити 7 реда
  1. 15 7
      cloudbridge/cloud/base/middleware.py

+ 15 - 7
cloudbridge/cloud/base/middleware.py

@@ -1,11 +1,12 @@
-import inspect
 import logging
 import logging
 import sys
 import sys
+from inspect import ismethod
 
 
 import six
 import six
 
 
 from ..base.events import intercept
 from ..base.events import intercept
 from ..base.events import observe
 from ..base.events import observe
+from ..interfaces.events import EventHandler
 from ..interfaces.exceptions import CloudBridgeBaseException
 from ..interfaces.exceptions import CloudBridgeBaseException
 from ..interfaces.middleware import Middleware
 from ..interfaces.middleware import Middleware
 from ..interfaces.middleware import MiddlewareManager
 from ..interfaces.middleware import MiddlewareManager
@@ -53,12 +54,19 @@ class BaseMiddleware(Middleware):
 
 
     def discover_handlers(self, class_or_obj):
     def discover_handlers(self, class_or_obj):
         discovered_handlers = []
         discovered_handlers = []
-        for _, func in inspect.getmembers(class_or_obj, inspect.ismethod):
-            handler = getattr(func, "__event_handler", None)
-            if handler:
-                # Set the properly bound method as the callback
-                handler.callback = func
-                discovered_handlers.append(handler)
+        for key in dir(class_or_obj):
+            try:
+                func = getattr(object, key)
+            # Properties can sometimes cause various exceptions (e.g. during
+            # auth failure testing)
+            except Exception:
+                continue
+            if ismethod(func):
+                handler = getattr(func, "__event_handler", None)
+                if handler and isinstance(handler, EventHandler):
+                    # Set the properly bound method as the callback
+                    handler.callback = func
+                    discovered_handlers.append(handler)
         return discovered_handlers
         return discovered_handlers
 
 
     def uninstall(self):
     def uninstall(self):