Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

app_factory.py 2.9KB

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