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) #log.debug('Firing event %s', name)
try: try:
# Fire after event options = {
is_after_event = False 'is_after_event': False, # Fire after event
try: 'on_complete': False, # onComplete event
del kwargs['is_after_event'] 'single': False, # Return single handler
is_after_event = True 'merge': False, # Merge items
except: pass 'in_order': False, # Fire them in specific order, waits for the other to finish
}
# onComplete event # Do options
on_complete = False for x in options:
try: try:
on_complete = kwargs['on_complete'] del kwargs[x]
del kwargs['on_complete'] options[x] = True
except: pass 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
e = events[name] e = events[name]
if not in_order: e.lock.acquire() if not options['in_order']: e.lock.acquire()
e.asynchronous = False e.asynchronous = False
e.in_order = in_order e.in_order = options['in_order']
result = e(*args, **kwargs) 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 results = None
# Loop over results, stop when first not None result is found. # Loop over results, stop when first not None result is found.
@@ -112,7 +92,7 @@ def fireEvent(name, *args, **kwargs):
errorHandler(r[1]) errorHandler(r[1])
# Merge # Merge
if merge and len(results) > 0: if options['merge'] and len(results) > 0:
# Dict # Dict
if type(results[0]) == dict: if type(results[0]) == dict:
merged = {} merged = {}
@@ -133,11 +113,11 @@ def fireEvent(name, *args, **kwargs):
log.debug('Return modified results for %s', name) log.debug('Return modified results for %s', name)
results = modified_results results = modified_results
if not is_after_event: if not options['is_after_event']:
fireEvent('%s.after' % name, is_after_event = True) fireEvent('%s.after' % name, is_after_event = True)
if on_complete: if options['on_complete']:
on_complete() options['on_complete']()
return results return results
except KeyError, e: except KeyError, e: