Browse Source

Better priority merging

pull/84/head
Ruud 13 years ago
parent
commit
34611e1061
  1. 11
      couchpotato/core/event.py
  2. 12
      libs/axl/axel.py

11
couchpotato/core/event.py

@ -1,8 +1,7 @@
from axl.axel import Event from axl.axel import Event
from couchpotato.core.helpers.variable import mergeDicts from couchpotato.core.helpers.variable import mergeDicts, natcmp
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
import threading import threading
import time
import traceback import traceback
log = CPLog(__name__) log = CPLog(__name__)
@ -36,7 +35,7 @@ def addEvent(name, handler, priority = 100):
return h return h
e.handle(handler, priority = priority) e.handle(createHandle, priority = priority)
def removeEvent(name, handler): def removeEvent(name, handler):
e = events[name] e = events[name]
@ -84,7 +83,8 @@ def fireEvent(name, *args, **kwargs):
results = None results = None
# Loop over results, stop when first not None result is found. # Loop over results, stop when first not None result is found.
for r in result: for r_key in sorted(result.iterkeys(), cmp = natcmp):
r = result[r_key]
if r[0] is True and r[1] is not None: if r[0] is True and r[1] is not None:
results = r[1] results = r[1]
break break
@ -95,7 +95,8 @@ def fireEvent(name, *args, **kwargs):
else: else:
results = [] results = []
for r in result: for r_key in sorted(result.iterkeys(), cmp = natcmp):
r = result[r_key]
if r[0] == True and r[1]: if r[0] == True and r[1]:
results.append(r[1]) results.append(r[1])
elif r[1]: elif r[1]:

12
libs/axl/axel.py

@ -141,7 +141,7 @@ class Event(object):
def fire(self, *args, **kwargs): def fire(self, *args, **kwargs):
""" Stores all registered handlers in a queue for processing """ """ Stores all registered handlers in a queue for processing """
self.queue = Queue.Queue() self.queue = Queue.Queue()
self.result = [] self.result = {}
if self.handlers: if self.handlers:
@ -158,12 +158,12 @@ class Event(object):
if self.asynchronous: if self.asynchronous:
handler_, memoize, timeout = self.handlers[handler] handler_, memoize, timeout = self.handlers[handler]
self.result.append((None, None, handler_)) self.result[handler] = (None, None, handler_)
if not self.asynchronous: if not self.asynchronous:
self.queue.join() self.queue.join()
return tuple(self.result) or None return self.result or None
def count(self): def count(self):
""" Returns the count of registered handlers """ """ Returns the count of registered handlers """
@ -187,12 +187,12 @@ class Event(object):
try: try:
r = self._memoize(memoize, timeout, handler, *args, **kwargs) r = self._memoize(memoize, timeout, handler, *args, **kwargs)
if not self.asynchronous: if not self.asynchronous:
self.result.append(tuple(r)) self.result[h_] = tuple(r)
except Exception: except Exception:
if not self.asynchronous: if not self.asynchronous:
self.result.append((False, self._error(sys.exc_info()), self.result[h_] = (False, self._error(sys.exc_info()),
handler)) handler)
else: else:
self.error_handler(sys.exc_info()) self.error_handler(sys.exc_info())
finally: finally:

Loading…
Cancel
Save