| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 
							- import os
 
- from textwrap import dedent
 
- import pytest
 
- from flask import Flask
 
- from yarl import URL
 
- from configs.app_config import DifyConfig
 
- EXAMPLE_ENV_FILENAME = ".env"
 
- @pytest.fixture
 
- def example_env_file(tmp_path, monkeypatch) -> str:
 
-     monkeypatch.chdir(tmp_path)
 
-     file_path = tmp_path.joinpath(EXAMPLE_ENV_FILENAME)
 
-     file_path.write_text(
 
-         dedent(
 
-             """
 
-         CONSOLE_API_URL=https://example.com
 
-         CONSOLE_WEB_URL=https://example.com
 
-         HTTP_REQUEST_MAX_WRITE_TIMEOUT=30
 
-         """
 
-         )
 
-     )
 
-     return str(file_path)
 
- def test_dify_config_undefined_entry(example_env_file):
 
-     # NOTE: See https://github.com/microsoft/pylance-release/issues/6099 for more details about this type error.
 
-     # load dotenv file with pydantic-settings
 
-     config = DifyConfig(_env_file=example_env_file)
 
-     # entries not defined in app settings
 
-     with pytest.raises(TypeError):
 
-         # TypeError: 'AppSettings' object is not subscriptable
 
-         assert config["LOG_LEVEL"] == "INFO"
 
- def test_dify_config(example_env_file):
 
-     # load dotenv file with pydantic-settings
 
-     config = DifyConfig(_env_file=example_env_file)
 
-     # constant values
 
-     assert config.COMMIT_SHA == ""
 
-     # default values
 
-     assert config.EDITION == "SELF_HOSTED"
 
-     assert config.API_COMPRESSION_ENABLED is False
 
-     assert config.SENTRY_TRACES_SAMPLE_RATE == 1.0
 
-     # annotated field with default value
 
-     assert config.HTTP_REQUEST_MAX_READ_TIMEOUT == 60
 
-     # annotated field with configured value
 
-     assert config.HTTP_REQUEST_MAX_WRITE_TIMEOUT == 30
 
- # NOTE: If there is a `.env` file in your Workspace, this test might not succeed as expected.
 
- # This is due to `pymilvus` loading all the variables from the `.env` file into `os.environ`.
 
- def test_flask_configs(example_env_file):
 
-     flask_app = Flask("app")
 
-     # clear system environment variables
 
-     os.environ.clear()
 
-     flask_app.config.from_mapping(DifyConfig(_env_file=example_env_file).model_dump())  # pyright: ignore
 
-     config = flask_app.config
 
-     # configs read from pydantic-settings
 
-     assert config["LOG_LEVEL"] == "INFO"
 
-     assert config["COMMIT_SHA"] == ""
 
-     assert config["EDITION"] == "SELF_HOSTED"
 
-     assert config["API_COMPRESSION_ENABLED"] is False
 
-     assert config["SENTRY_TRACES_SAMPLE_RATE"] == 1.0
 
-     assert config["TESTING"] == False
 
-     # value from env file
 
-     assert config["CONSOLE_API_URL"] == "https://example.com"
 
-     # fallback to alias choices value as CONSOLE_API_URL
 
-     assert config["FILES_URL"] == "https://example.com"
 
-     assert config["SQLALCHEMY_DATABASE_URI"] == "postgresql://postgres:@localhost:5432/dify"
 
-     assert config["SQLALCHEMY_ENGINE_OPTIONS"] == {
 
-         "connect_args": {
 
-             "options": "-c timezone=UTC",
 
-         },
 
-         "max_overflow": 10,
 
-         "pool_pre_ping": False,
 
-         "pool_recycle": 3600,
 
-         "pool_size": 30,
 
-     }
 
-     assert config["CONSOLE_WEB_URL"] == "https://example.com"
 
-     assert config["CONSOLE_CORS_ALLOW_ORIGINS"] == ["https://example.com"]
 
-     assert config["WEB_API_CORS_ALLOW_ORIGINS"] == ["*"]
 
-     assert str(config["CODE_EXECUTION_ENDPOINT"]) == "http://sandbox:8194/"
 
-     assert str(URL(str(config["CODE_EXECUTION_ENDPOINT"])) / "v1") == "http://sandbox:8194/v1"
 
 
  |