""" Entrypoint for WSGI HTTP Server, usually gunicorn """ from gevent import monkey monkey.patch_all() from ihs import create_app # noqa # gunicorn expects the app object to appear under a variable named "application" application = create_app()
celery.conf.update(app.config) TaskBase = celery.Task class ContextTask(TaskBase): # noqa abstract = True metadata: Optional[Dict] = None def __call__(self, *args, **kwargs): with app.app_context(): return TaskBase.__call__(self, *args, **kwargs) celery.Task = ContextTask return celery flask_app = create_app() celery = create_celery(flask_app) @celery.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): # pylint: disable=unused-argument """ Schedules a periodic task for each configured endpoint task """ if conf.CELERYBEAT_LOAD_ENDPOINTS: for endpoint_name, endpoint in endpoints.items(): for task_name, task in endpoint.tasks.items(): name = f"{endpoint_name}:{task_name}" if task.enabled: logger.info("Registering periodic task: %s", name) sender.add_periodic_task( task.schedule, celery_queue.tasks.sync_endpoint.s(
endpoints = yaml.safe_load(f) if key: endpoints = endpoints[key] loaded: Dict[str, Endpoint] = {} for ep in endpoints.items(): try: new = Endpoint(name=ep[0], **ep[1]) if new.enabled or load_disabled: loaded[ep[0]] = new except Exception as e: logger.error(f"Failed to create endpoint ({ep[0]}) -> {e}") return loaded if __name__ == "__main__": from ihs import create_app app = create_app() app.app_context().push() path = "tests/data/collector.yaml" load_disabled = False endpoints = Endpoint.from_yaml(path) list(endpoints.items())[0] opts = list(endpoints["well_horizontal"].tasks["sync"].options) opts[0] # from api.models import County