diff --git a/src/vpoller/decorators.py b/src/vpoller/decorators.py new file mode 100644 index 0000000..f898f91 --- /dev/null +++ b/src/vpoller/decorators.py @@ -0,0 +1,56 @@ +# Copyright (c) 2013-2015 Marin Atanasov Nikolov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer +# in this position and unchanged. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +vPoller Task Decorators module + +""" + +from functools import wraps + +from vpoller.registry import registry + + +def task(name, required): + """ + A decorator for creating new tasks + + Args: + name (str): Name of the task + required (list): A list of required message keys + that the task expects to be present + + """ + def decorator(fn): + @wraps(fn) + def wrapper(*args, **kwargs): + try: + result = fn(*args, **kwargs) + except Exception as e: + result = {'success': 1, 'msg': e.message} + finally: + return result + registry.register(name, required, fn) + return wrapper + return decorator