commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r8451 - trunk/gnue-common/src/events


From: johannes
Subject: [gnue] r8451 - trunk/gnue-common/src/events
Date: Fri, 12 May 2006 04:35:56 -0500 (CDT)

Author: johannes
Date: 2006-05-12 04:35:55 -0500 (Fri, 12 May 2006)
New Revision: 8451

Modified:
   trunk/gnue-common/src/events/EventController.py
Log:
Optimized code for better performance


Modified: trunk/gnue-common/src/events/EventController.py
===================================================================
--- trunk/gnue-common/src/events/EventController.py     2006-04-27 20:02:44 UTC 
(rev 8450)
+++ trunk/gnue-common/src/events/EventController.py     2006-05-12 09:35:55 UTC 
(rev 8451)
@@ -47,6 +47,7 @@
 
   def __init__ (self):
 
+    self.__caching = False
     self.__incomingEvents = {}
 
   
@@ -87,6 +88,7 @@
     called.
     """
 
+    self.__caching = True
     self.__cache = []
 
 
@@ -100,6 +102,7 @@
     Any previously cached events are dispatched.
     """
 
+    self.__caching = False
     cache = self.__cache
     del self.__cache
     
@@ -120,41 +123,33 @@
     @returns: the event object's __result__ attribute
     """
 
-    # If we are caching our events, cache it:
-    try:
+    if self.__caching:
       self.__cache.append ((event, args, parms))
       return
 
-    except AttributeError:
-      pass
+    if not hasattr(event, '__event__'):
+        event = Event(event, *args, **parms)
 
-    # Hackery so dispatchEvent can be passed either an Event() object, or a
-    # text string identifying the type of event.  If the latter, an event is
-    # created on the fly.
-    try:
-      event.__event__
-
-    except:
-      event = Event (event, *args, **parms)
-
     handlers = []
+    incoming = self.__incomingEvents
 
-    if self.__incomingEvents.has_key (event.__event__):
-      handlers = self.__incomingEvents [event.__event__]
+    if incoming.has_key('__before__'):
+        handlers.append(incoming['__before__'])
 
-    if self.__incomingEvents.has_key ('__before__'):
-      handlers = self.__incomingEvents ['__before__'] + handlers
+    if incoming.has_key(event.__event__):
+        handlers.append(incoming[event.__event__])
 
-    if self.__incomingEvents.has_key ('__after__'):
-      handlers = handlers + self.__incomingEvents ['__after__']
+    if incoming.has_key('__after__'):
+        handlers.append(incoming['__after__'])
 
-    for handler in handlers:
-      handler (event)
-      if event.__error__ or event.__dropped__:
-        break
+    if handlers:
+        for handler in handlers:
+            handler(event)
+            if event.__error__ or event.__dropped__:
+                break
 
-    # Fire any "dispatchAfter" events
-    for args, parms in event.__after__:
-      self.dispatchEvent (*args, **parms)
+    if event.__after__:
+        for args, parms in event.__after__:
+            self.dispatchEvent(*args, **parms)
 
     return event.__result__





reply via email to

[Prev in Thread] Current Thread [Next in Thread]