Skip to content

Instantly share code, notes, and snippets.

@bastianh
Created January 12, 2016 09:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bastianh/5ca79d76bc88b1a2af97 to your computer and use it in GitHub Desktop.
Save bastianh/5ca79d76bc88b1a2af97 to your computer and use it in GitHub Desktop.
from celery import Celery
from celery.loaders.base import BaseLoader
from raven import Client
from raven.contrib.celery import register_signal
from webapp import settings
from webapp.app import create_app
class CeleryLoader(BaseLoader):
def __init__(self, app, **kwargs):
super(CeleryLoader, self).__init__(app, **kwargs)
self.flask_app = None
# noinspection PyPep8Naming
def on_worker_init(self):
TaskBase = self.app.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with self.flask_app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
self.app.Task = ContextTask
self.flask_app = create_app(db_only=True)
if settings.SENTRY_DSN:
client = Client(settings.SENTRY_DSN)
register_signal(client)
def on_task_init(self, task_id, task):
task.flask_app = self.flask_app
def celery_app():
capp = Celery(loader=CeleryLoader)
capp.config_from_object(settings)
return capp
celery = celery_app()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment