aboutsummaryrefslogtreecommitdiff
path: root/app/tasks/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/tasks/__init__.py')
-rw-r--r--app/tasks/__init__.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/app/tasks/__init__.py b/app/tasks/__init__.py
new file mode 100644
index 0000000..c431fae
--- /dev/null
+++ b/app/tasks/__init__.py
@@ -0,0 +1,44 @@
+import flask
+from flask.ext.sqlalchemy import SQLAlchemy
+from celery import Celery
+from app import app
+from app.models import *
+
+class FlaskCelery(Celery):
+ def __init__(self, *args, **kwargs):
+ super(FlaskCelery, self).__init__(*args, **kwargs)
+ self.patch_task()
+
+ if 'app' in kwargs:
+ self.init_app(kwargs['app'])
+
+ def patch_task(self):
+ TaskBase = self.Task
+ _celery = self
+
+ class ContextTask(TaskBase):
+ abstract = True
+
+ def __call__(self, *args, **kwargs):
+ if flask.has_app_context():
+ return TaskBase.__call__(self, *args, **kwargs)
+ else:
+ with _celery.app.app_context():
+ return TaskBase.__call__(self, *args, **kwargs)
+
+ self.Task = ContextTask
+
+ def init_app(self, app):
+ self.app = app
+ self.config_from_object(app.config)
+
+def make_celery(app):
+ celery = FlaskCelery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'],
+ broker=app.config['CELERY_BROKER_URL'])
+
+ celery.init_app(app)
+ return celery
+
+celery = make_celery(app)
+
+from . import importtasks