mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import logging
 | |
| import time
 | |
| 
 | |
| from configs import dify_config
 | |
| from contexts.wrapper import RecyclableContextVar
 | |
| from dify_app import DifyApp
 | |
| 
 | |
| 
 | |
| # ----------------------------
 | |
| # Application Factory Function
 | |
| # ----------------------------
 | |
| def create_flask_app_with_configs() -> DifyApp:
 | |
|     """
 | |
|     create a raw flask app
 | |
|     with configs loaded from .env file
 | |
|     """
 | |
|     dify_app = DifyApp(__name__)
 | |
|     dify_app.config.from_mapping(dify_config.model_dump())
 | |
| 
 | |
|     # add before request hook
 | |
|     @dify_app.before_request
 | |
|     def before_request():
 | |
|         # add an unique identifier to each request
 | |
|         RecyclableContextVar.increment_thread_recycles()
 | |
| 
 | |
|     return dify_app
 | |
| 
 | |
| 
 | |
| def create_app() -> DifyApp:
 | |
|     start_time = time.perf_counter()
 | |
|     app = create_flask_app_with_configs()
 | |
|     initialize_extensions(app)
 | |
|     end_time = time.perf_counter()
 | |
|     if dify_config.DEBUG:
 | |
|         logging.info(f"Finished create_app ({round((end_time - start_time) * 1000, 2)} ms)")
 | |
|     return app
 | |
| 
 | |
| 
 | |
| def initialize_extensions(app: DifyApp):
 | |
|     from extensions import (
 | |
|         ext_app_metrics,
 | |
|         ext_blueprints,
 | |
|         ext_celery,
 | |
|         ext_code_based_extension,
 | |
|         ext_commands,
 | |
|         ext_compress,
 | |
|         ext_database,
 | |
|         ext_hosting_provider,
 | |
|         ext_import_modules,
 | |
|         ext_logging,
 | |
|         ext_login,
 | |
|         ext_mail,
 | |
|         ext_migrate,
 | |
|         ext_proxy_fix,
 | |
|         ext_redis,
 | |
|         ext_sentry,
 | |
|         ext_set_secretkey,
 | |
|         ext_storage,
 | |
|         ext_timezone,
 | |
|         ext_warnings,
 | |
|     )
 | |
| 
 | |
|     extensions = [
 | |
|         ext_timezone,
 | |
|         ext_logging,
 | |
|         ext_warnings,
 | |
|         ext_import_modules,
 | |
|         ext_set_secretkey,
 | |
|         ext_compress,
 | |
|         ext_code_based_extension,
 | |
|         ext_database,
 | |
|         ext_app_metrics,
 | |
|         ext_migrate,
 | |
|         ext_redis,
 | |
|         ext_storage,
 | |
|         ext_celery,
 | |
|         ext_login,
 | |
|         ext_mail,
 | |
|         ext_hosting_provider,
 | |
|         ext_sentry,
 | |
|         ext_proxy_fix,
 | |
|         ext_blueprints,
 | |
|         ext_commands,
 | |
|     ]
 | |
|     for ext in extensions:
 | |
|         short_name = ext.__name__.split(".")[-1]
 | |
|         is_enabled = ext.is_enabled() if hasattr(ext, "is_enabled") else True
 | |
|         if not is_enabled:
 | |
|             if dify_config.DEBUG:
 | |
|                 logging.info(f"Skipped {short_name}")
 | |
|             continue
 | |
| 
 | |
|         start_time = time.perf_counter()
 | |
|         ext.init_app(app)
 | |
|         end_time = time.perf_counter()
 | |
|         if dify_config.DEBUG:
 | |
|             logging.info(f"Loaded {short_name} ({round((end_time - start_time) * 1000, 2)} ms)")
 | |
| 
 | |
| 
 | |
| def create_migrations_app():
 | |
|     app = create_flask_app_with_configs()
 | |
|     from extensions import ext_database, ext_migrate
 | |
| 
 | |
|     # Initialize only required extensions
 | |
|     ext_database.init_app(app)
 | |
|     ext_migrate.init_app(app)
 | |
| 
 | |
|     return app
 | 
