# -*- coding: utf-8 -*- """ flask_rq2.job ~~~~~~~~~~~~~ The Flask application aware RQ job class. """ from flask import current_app from rq.job import Job try: from flask.cli import ScriptInfo except ImportError: # pragma: no cover try: from flask_cli import ScriptInfo except ImportError: raise RuntimeError('Cannot import Flask CLI. Is it installed?') class FlaskJob(Job): """ The RQ Job class that is capable to running with a Flask app context. This requires setting the ``FLASK_APP`` environment variable. """ def __init__(self, *args, **kwargs): super(FlaskJob, self).__init__(*args, **kwargs) self.script_info = ScriptInfo() def load_app(self): if current_app: app = current_app else: app = self.script_info.load_app() return app def perform(self): app = self.load_app() with app.app_context(): return super(FlaskJob, self).perform()