Set up the background callback and manage jobs.
(
kwargs, background, background_key, func, func_args, func_kwargs, callback_ctx
)
| 415 | |
| 416 | |
| 417 | def _setup_background_callback( |
| 418 | kwargs, background, background_key, func, func_args, func_kwargs, callback_ctx |
| 419 | ): |
| 420 | """Set up the background callback and manage jobs.""" |
| 421 | callback_manager = _get_callback_manager(kwargs, background) |
| 422 | if not callback_manager: |
| 423 | return to_json({"error": "No background callback manager configured"}) |
| 424 | |
| 425 | progress_outputs = background.get("progress") |
| 426 | |
| 427 | cache_ignore_triggered = background.get("cache_ignore_triggered", True) |
| 428 | |
| 429 | cache_key = callback_manager.build_cache_key( |
| 430 | func, |
| 431 | func_args if func_args else func_kwargs, |
| 432 | background.get("cache_args_to_ignore", []), |
| 433 | None if cache_ignore_triggered else callback_ctx.get("triggered_inputs", []), |
| 434 | ) |
| 435 | job_fn = callback_manager.func_registry.get(background_key) |
| 436 | ctx_value = AttributeDict(**context_value.get()) |
| 437 | ctx_value.ignore_register_page = True |
| 438 | ctx_value.pop("background_callback_manager") |
| 439 | ctx_value.pop("dash_response") |
| 440 | |
| 441 | args_value = ctx_value.get("args") |
| 442 | if args_value is not None and not isinstance(args_value, dict): |
| 443 | ctx_value["args"] = dict(args_value) |
| 444 | |
| 445 | job = callback_manager.call_job_fn( |
| 446 | cache_key, |
| 447 | job_fn, |
| 448 | func_args if func_args else func_kwargs, |
| 449 | ctx_value, |
| 450 | ) |
| 451 | |
| 452 | data = { |
| 453 | "cacheKey": cache_key, |
| 454 | "job": job, |
| 455 | } |
| 456 | |
| 457 | cancel = background.get("cancel") |
| 458 | if cancel: |
| 459 | data["cancel"] = cancel |
| 460 | |
| 461 | progress_default = background.get("progressDefault") |
| 462 | if progress_default: |
| 463 | data["progressDefault"] = { |
| 464 | str(o): x for o, x in zip(progress_outputs, progress_default) |
| 465 | } |
| 466 | return to_json(data) |
| 467 | |
| 468 | |
| 469 | def _progress_background_callback( |
searching dependent graphs…