OnComplete handler for events and async re-use

This commit is contained in:
Ruud
2012-05-22 00:14:09 +02:00
parent cb89e12e97
commit b350f1e798
+16 -9
View File
@@ -1,6 +1,7 @@
from axl.axel import Event from axl.axel import Event
from couchpotato.core.helpers.variable import mergeDicts, natcmp from couchpotato.core.helpers.variable import mergeDicts, natcmp
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
import thread
import threading import threading
import traceback import traceback
@@ -53,6 +54,13 @@ def fireEvent(name, *args, **kwargs):
is_after_event = True is_after_event = True
except: pass except: pass
# onComplete event
on_complete = False
try:
on_complete = kwargs['on_complete']
del kwargs['on_complete']
except: pass
# Return single handler # Return single handler
single = False single = False
try: try:
@@ -129,24 +137,23 @@ def fireEvent(name, *args, **kwargs):
if not is_after_event: if not is_after_event:
fireEvent('%s.after' % name, is_after_event = True) fireEvent('%s.after' % name, is_after_event = True)
if on_complete:
on_complete()
return results return results
except KeyError, e: except KeyError, e:
pass pass
except Exception: except Exception:
log.error('%s: %s' % (name, traceback.format_exc())) log.error('%s: %s' % (name, traceback.format_exc()))
def fireEventAsync(name, *args, **kwargs): def fireEventAsync(*args, **kwargs):
#log.debug('Async "%s": %s, %s' % (name, args, kwargs))
try: try:
e = events[name] my_thread = threading.Thread(target = fireEvent, args = args, kwargs = kwargs)
e.lock.acquire() my_thread.setDaemon(True)
e.asynchronous = True my_thread.start()
e.error_handler = errorHandler
e(*args, **kwargs)
e.lock.release()
return True return True
except Exception, e: except Exception, e:
log.error('%s: %s' % (name, e)) log.error('%s: %s' % (args[0], e))
def errorHandler(error): def errorHandler(error):
etype, value, tb = error etype, value, tb = error