From e99cc374d74ef502cedf2babc147863ee3083f8d Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Mon, 28 Nov 2016 16:16:23 -0500 Subject: [PATCH] Allow calling after_request outside of request context --- CHANGELOG | 11 ++++++++++- README.rst | 4 ++++ flask_defer.py | 8 +++++++- setup.py | 2 +- test_flask_defer.py | 6 +++++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 70777d2..3c7423a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,14 @@ Flask-Defer Changelog -=================== +===================== + +Version 1.0.1 +------------- + +:Released: 11-28-2016 + +:Changes: + Execute tasks immediately if we are outside of a request context + Version 1.0.0 ------------- diff --git a/README.rst b/README.rst index e66fd8f..ee4ba34 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,10 @@ Installation Usage ~~~~~ +Passing a function and it's arguments to `flask_defer.after_request` will register that function to execute when the Flask request has ended. + +If a call to `flask_defer.after_request` happens outside of a request context then the function will be executed immediately. + .. code:: python from flask import Flask diff --git a/flask_defer.py b/flask_defer.py index 34b4bf2..e0dcf01 100644 --- a/flask_defer.py +++ b/flask_defer.py @@ -7,8 +7,14 @@ __all__ = ['after_request', 'defer', 'FlaskDefer'] def defer(func, *args, **kwargs): - params = dict(func=func, args=args, kwargs=kwargs) ctx = stack.top + + # If we are not in a request/app context, then just execute + if not ctx: + return func(*args, **kwargs) + + # We are in a request/app context, defer until request/app teardown + params = dict(func=func, args=args, kwargs=kwargs) if not hasattr(ctx, 'deferred_tasks'): setattr(ctx, 'deferred_tasks', []) ctx.deferred_tasks.append(params) diff --git a/setup.py b/setup.py index 24ef1d2..7b2308c 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def get_long_description(): setup( name='Flask-Defer', - version='1.0.0', + version='1.0.1', url='https://github.com/brettlangdon/flask-defer.git', license='MIT', author='Brett Langdon', diff --git a/test_flask_defer.py b/test_flask_defer.py index c08bc7c..71c9109 100644 --- a/test_flask_defer.py +++ b/test_flask_defer.py @@ -5,7 +5,7 @@ from flask_defer import FlaskDefer, defer, stack def deferred_task(name, with_keyword=False): - pass + return (name, with_keyword) class TestFlaskDefer(unittest.TestCase): @@ -114,6 +114,10 @@ class TestFlaskDefer(unittest.TestCase): kwargs=dict(with_keyword=True, extra_param='param'), )) + def test_no_app_context(self): + result = defer(deferred_task, 'name', with_keyword=True) + self.assertEqual(result, ('name', True)) + if __name__ == '__main__': unittest.main()