| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- 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
 
 
  |