Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

test_dify_config.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import os
  2. from flask import Flask
  3. from packaging.version import Version
  4. from yarl import URL
  5. from configs.app_config import DifyConfig
  6. def test_dify_config(monkeypatch):
  7. # clear system environment variables
  8. os.environ.clear()
  9. # Set environment variables using monkeypatch
  10. monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
  11. monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
  12. monkeypatch.setenv("HTTP_REQUEST_MAX_WRITE_TIMEOUT", "30")
  13. monkeypatch.setenv("DB_USERNAME", "postgres")
  14. monkeypatch.setenv("DB_PASSWORD", "postgres")
  15. monkeypatch.setenv("DB_HOST", "localhost")
  16. monkeypatch.setenv("DB_PORT", "5432")
  17. monkeypatch.setenv("DB_DATABASE", "dify")
  18. monkeypatch.setenv("HTTP_REQUEST_MAX_READ_TIMEOUT", "600")
  19. # load dotenv file with pydantic-settings
  20. config = DifyConfig()
  21. # constant values
  22. assert config.COMMIT_SHA == ""
  23. # default values
  24. assert config.EDITION == "SELF_HOSTED"
  25. assert config.API_COMPRESSION_ENABLED is False
  26. assert config.SENTRY_TRACES_SAMPLE_RATE == 1.0
  27. # annotated field with default value
  28. assert config.HTTP_REQUEST_MAX_READ_TIMEOUT == 600
  29. # annotated field with configured value
  30. assert config.HTTP_REQUEST_MAX_WRITE_TIMEOUT == 30
  31. assert config.WORKFLOW_PARALLEL_DEPTH_LIMIT == 3
  32. # values from pyproject.toml
  33. assert Version(config.project.version) >= Version("1.0.0")
  34. # NOTE: If there is a `.env` file in your Workspace, this test might not succeed as expected.
  35. # This is due to `pymilvus` loading all the variables from the `.env` file into `os.environ`.
  36. def test_flask_configs(monkeypatch):
  37. flask_app = Flask("app")
  38. # clear system environment variables
  39. os.environ.clear()
  40. # Set environment variables using monkeypatch
  41. monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
  42. monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
  43. monkeypatch.setenv("HTTP_REQUEST_MAX_WRITE_TIMEOUT", "30")
  44. monkeypatch.setenv("DB_USERNAME", "postgres")
  45. monkeypatch.setenv("DB_PASSWORD", "postgres")
  46. monkeypatch.setenv("DB_HOST", "localhost")
  47. monkeypatch.setenv("DB_PORT", "5432")
  48. monkeypatch.setenv("DB_DATABASE", "dify")
  49. monkeypatch.setenv("WEB_API_CORS_ALLOW_ORIGINS", "http://127.0.0.1:3000,*")
  50. monkeypatch.setenv("CODE_EXECUTION_ENDPOINT", "http://127.0.0.1:8194/")
  51. flask_app.config.from_mapping(DifyConfig().model_dump()) # pyright: ignore
  52. config = flask_app.config
  53. # configs read from pydantic-settings
  54. assert config["LOG_LEVEL"] == "INFO"
  55. assert config["COMMIT_SHA"] == ""
  56. assert config["EDITION"] == "SELF_HOSTED"
  57. assert config["API_COMPRESSION_ENABLED"] is False
  58. assert config["SENTRY_TRACES_SAMPLE_RATE"] == 1.0
  59. # value from env file
  60. assert config["CONSOLE_API_URL"] == "https://example.com"
  61. # fallback to alias choices value as CONSOLE_API_URL
  62. assert config["FILES_URL"] == "https://example.com"
  63. assert config["SQLALCHEMY_DATABASE_URI"] == "postgresql://postgres:postgres@localhost:5432/dify"
  64. assert config["SQLALCHEMY_ENGINE_OPTIONS"] == {
  65. "connect_args": {
  66. "options": "-c timezone=UTC",
  67. },
  68. "max_overflow": 10,
  69. "pool_pre_ping": False,
  70. "pool_recycle": 3600,
  71. "pool_size": 30,
  72. "pool_use_lifo": False,
  73. }
  74. assert config["CONSOLE_WEB_URL"] == "https://example.com"
  75. assert config["CONSOLE_CORS_ALLOW_ORIGINS"] == ["https://example.com"]
  76. assert config["WEB_API_CORS_ALLOW_ORIGINS"] == ["http://127.0.0.1:3000", "*"]
  77. assert str(config["CODE_EXECUTION_ENDPOINT"]) == "http://127.0.0.1:8194/"
  78. assert str(URL(str(config["CODE_EXECUTION_ENDPOINT"])) / "v1") == "http://127.0.0.1:8194/v1"
  79. def test_inner_api_config_exist(monkeypatch):
  80. # Set environment variables using monkeypatch
  81. monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
  82. monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
  83. monkeypatch.setenv("HTTP_REQUEST_MAX_WRITE_TIMEOUT", "30")
  84. monkeypatch.setenv("DB_USERNAME", "postgres")
  85. monkeypatch.setenv("DB_PASSWORD", "postgres")
  86. monkeypatch.setenv("DB_HOST", "localhost")
  87. monkeypatch.setenv("DB_PORT", "5432")
  88. monkeypatch.setenv("DB_DATABASE", "dify")
  89. monkeypatch.setenv("INNER_API_KEY", "test-inner-api-key")
  90. config = DifyConfig()
  91. assert config.INNER_API is False
  92. assert isinstance(config.INNER_API_KEY, str)
  93. assert len(config.INNER_API_KEY) > 0
  94. def test_db_extras_options_merging(monkeypatch):
  95. """Test that DB_EXTRAS options are properly merged with default timezone setting"""
  96. # Set environment variables
  97. monkeypatch.setenv("DB_USERNAME", "postgres")
  98. monkeypatch.setenv("DB_PASSWORD", "postgres")
  99. monkeypatch.setenv("DB_HOST", "localhost")
  100. monkeypatch.setenv("DB_PORT", "5432")
  101. monkeypatch.setenv("DB_DATABASE", "dify")
  102. monkeypatch.setenv("DB_EXTRAS", "options=-c search_path=myschema")
  103. # Create config
  104. config = DifyConfig()
  105. # Get engine options
  106. engine_options = config.SQLALCHEMY_ENGINE_OPTIONS
  107. # Verify options contains both search_path and timezone
  108. options = engine_options["connect_args"]["options"]
  109. assert "search_path=myschema" in options
  110. assert "timezone=UTC" in options