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)
|
#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:
|
||||||
|
|||||||
Reference in New Issue
Block a user