Simpler options for events
This commit is contained in:
+21
-41
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user