Better priority merging

This commit is contained in:
Ruud
2012-03-11 02:12:03 +01:00
parent 8803323ae4
commit 34611e1061
2 changed files with 12 additions and 11 deletions

View File

@@ -1,8 +1,7 @@
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
import threading
import time
import traceback
log = CPLog(__name__)
@@ -36,7 +35,7 @@ def addEvent(name, handler, priority = 100):
return h
e.handle(handler, priority = priority)
e.handle(createHandle, priority = priority)
def removeEvent(name, handler):
e = events[name]
@@ -84,7 +83,8 @@ def fireEvent(name, *args, **kwargs):
results = None
# 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:
results = r[1]
break
@@ -95,7 +95,8 @@ def fireEvent(name, *args, **kwargs):
else:
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]:
results.append(r[1])
elif r[1]:

View File

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