app_factory.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import logging
  2. import time
  3. from configs import dify_config
  4. from dify_app import DifyApp
  5. # ----------------------------
  6. # Application Factory Function
  7. # ----------------------------
  8. def create_flask_app_with_configs() -> DifyApp:
  9. """
  10. create a raw flask app
  11. with configs loaded from .env file
  12. """
  13. dify_app = DifyApp(__name__)
  14. dify_app.config.from_mapping(dify_config.model_dump())
  15. return dify_app
  16. def create_app() -> DifyApp:
  17. start_time = time.perf_counter()
  18. app = create_flask_app_with_configs()
  19. initialize_extensions(app)
  20. end_time = time.perf_counter()
  21. if dify_config.DEBUG:
  22. logging.info(f"Finished create_app ({round((end_time - start_time) * 1000, 2)} ms)")
  23. return app
  24. def initialize_extensions(app: DifyApp):
  25. from extensions import (
  26. ext_app_metrics,
  27. ext_blueprints,
  28. ext_celery,
  29. ext_code_based_extension,
  30. ext_commands,
  31. ext_compress,
  32. ext_database,
  33. ext_hosting_provider,
  34. ext_import_modules,
  35. ext_logging,
  36. ext_login,
  37. ext_mail,
  38. ext_migrate,
  39. ext_proxy_fix,
  40. ext_redis,
  41. ext_sentry,
  42. ext_set_secretkey,
  43. ext_storage,
  44. ext_timezone,
  45. ext_warnings,
  46. )
  47. extensions = [
  48. ext_timezone,
  49. ext_logging,
  50. ext_warnings,
  51. ext_import_modules,
  52. ext_set_secretkey,
  53. ext_compress,
  54. ext_code_based_extension,
  55. ext_database,
  56. ext_app_metrics,
  57. ext_migrate,
  58. ext_redis,
  59. ext_storage,
  60. ext_celery,
  61. ext_login,
  62. ext_mail,
  63. ext_hosting_provider,
  64. ext_sentry,
  65. ext_proxy_fix,
  66. ext_blueprints,
  67. ext_commands,
  68. ]
  69. for ext in extensions:
  70. short_name = ext.__name__.split(".")[-1]
  71. is_enabled = ext.is_enabled() if hasattr(ext, "is_enabled") else True
  72. if not is_enabled:
  73. if dify_config.DEBUG:
  74. logging.info(f"Skipped {short_name}")
  75. continue
  76. start_time = time.perf_counter()
  77. ext.init_app(app)
  78. end_time = time.perf_counter()
  79. if dify_config.DEBUG:
  80. logging.info(f"Loaded {short_name} ({round((end_time - start_time) * 1000, 2)} ms)")
  81. def create_migrations_app():
  82. app = create_flask_app_with_configs()
  83. from extensions import ext_database, ext_migrate
  84. # Initialize only required extensions
  85. ext_database.init_app(app)
  86. ext_migrate.init_app(app)
  87. return app