[PR #30607] refactor: refactor workflow context #32895

Closed
opened 2026-02-21 20:52:17 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/30607

State: closed
Merged: Yes


Important

  1. Make sure you have read our contribution guidelines
  2. Ensure there is an associated issue and you have been assigned to it
  3. Use the correct syntax to link this PR: Fixes #<issue number>.

Summary

resolve #30595

  • not use flask context directly in workflow
  • use di to pass the flask context
  • use register model

add method register_context_capturer to register context, later call capture_current_context to fetch the context, register_context_capturer can register many context, so workflow can use different context, to decouple the flask context, the workflow can not see the flask context.

# Usage Flow

# 1. Flask app initialization (app_factory.py)
init_flask_context()  # Registers Flask capturer

# 2. Workflow execution (framework-agnostic)
from core.context import capture_current_context
ctx = capture_current_context()  # Uses registered capturer

# This achieves true architectural decoupling - the workflow layer is completely unaware of Flask's existence.

Screenshots

Before After
... ...

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint and make type-check (backend) and cd web && npx lint-staged (frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/30607 **State:** closed **Merged:** Yes --- > [!IMPORTANT] > > 1. Make sure you have read our [contribution guidelines](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) > 1. Ensure there is an associated issue and you have been assigned to it > 1. Use the correct syntax to link this PR: `Fixes #<issue number>`. ## Summary resolve #30595 - not use flask context directly in workflow - use di to pass the flask context - use register model add method `register_context_capturer` to register context, later call `capture_current_context` to fetch the context, `register_context_capturer` can register many context, so workflow can use different context, to decouple the flask context, the workflow can not see the flask context. ``` # Usage Flow # 1. Flask app initialization (app_factory.py) init_flask_context() # Registers Flask capturer # 2. Workflow execution (framework-agnostic) from core.context import capture_current_context ctx = capture_current_context() # Uses registered capturer # This achieves true architectural decoupling - the workflow layer is completely unaware of Flask's existence. ``` ## Screenshots | Before | After | |--------|-------| | ... | ... | ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `make lint` and `make type-check` (backend) and `cd web && npx lint-staged` (frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:52:17 -05:00
yindo closed this issue 2026-02-21 20:52:17 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#32895