Simpler options for events

This commit is contained in:
Ruud
2012-10-12 18:50:57 +02:00
parent 4836a9ffdc
commit 27635caa1d
+21 -41
View File
@@ -46,49 +46,29 @@ def fireEvent(name, *args, **kwargs):
#log.debug('Firing event %s', name)
try:
# Fire after event
is_after_event = False
try:
del kwargs['is_after_event']
is_after_event = True
except: pass
options = {
'is_after_event': False, # Fire after event
'on_complete': False, # onComplete event
'single': False, # Return single handler
'merge': False, # Merge items
'in_order': False, # Fire them in specific order, waits for the other to finish
}
# onComplete event
on_complete = False
try:
on_complete = kwargs['on_complete']
del kwargs['on_complete']
except: pass
# Return single handler
single = False
try:
del kwargs['single']
single = True
except: pass
# Merge items
merge = False
try:
del kwargs['merge']
merge = True
except: pass
# Merge items
in_order = False
try:
del kwargs['in_order']
in_order = True
except: pass
# Do options
for x in options:
try:
del kwargs[x]
options[x] = True
except: pass
e = events[name]
if not in_order: e.lock.acquire()
if not options['in_order']: e.lock.acquire()
e.asynchronous = False
e.in_order = in_order
e.in_order = options['in_order']
result = e(*args, **kwargs)
if not in_order: e.lock.release()
if not options['in_order']: e.lock.release()
if single and not merge:
if options['single'] and not options['merge']:
results = None
# Loop over results, stop when first not None result is found.
@@ -112,7 +92,7 @@ def fireEvent(name, *args, **kwargs):
errorHandler(r[1])
# Merge
if merge and len(results) > 0:
if options['merge'] and len(results) > 0:
# Dict
if type(results[0]) == dict:
merged = {}
@@ -133,11 +113,11 @@ def fireEvent(name, *args, **kwargs):
log.debug('Return modified results for %s', name)
results = modified_results
if not is_after_event:
if not options['is_after_event']:
fireEvent('%s.after' % name, is_after_event = True)
if on_complete:
on_complete()
if options['on_complete']:
options['on_complete']()
return results
except KeyError, e: