| @@ -1,6 +1,6 @@ | |||
| import os | |||
| from configs.app_configs import DifyConfigs | |||
| from configs.app_config import DifyConfig | |||
| if not os.environ.get("DEBUG") or os.environ.get("DEBUG", "false").lower() != 'true': | |||
| from gevent import monkey | |||
| @@ -83,7 +83,7 @@ def create_flask_app_with_configs() -> Flask: | |||
| """ | |||
| dify_app = DifyApp(__name__) | |||
| dify_app.config.from_object(Config()) | |||
| dify_app.config.from_mapping(DifyConfigs().model_dump()) | |||
| dify_app.config.from_mapping(DifyConfig().model_dump()) | |||
| return dify_app | |||
| @@ -1,14 +1,14 @@ | |||
| from pydantic_settings import BaseSettings, SettingsConfigDict | |||
| from configs.deploy import DeploymentConfigs | |||
| from configs.enterprise import EnterpriseFeatureConfigs | |||
| from configs.extra import ExtraServiceConfigs | |||
| from configs.feature import FeatureConfigs | |||
| from configs.middleware import MiddlewareConfigs | |||
| from configs.deploy import DeploymentConfig | |||
| from configs.enterprise import EnterpriseFeatureConfig | |||
| from configs.extra import ExtraServiceConfig | |||
| from configs.feature import FeatureConfig | |||
| from configs.middleware import MiddlewareConfig | |||
| from configs.packaging import PackagingInfo | |||
| class DifyConfigs( | |||
| class DifyConfig( | |||
| # based on pydantic-settings | |||
| BaseSettings, | |||
| @@ -16,20 +16,20 @@ class DifyConfigs( | |||
| PackagingInfo, | |||
| # Deployment configs | |||
| DeploymentConfigs, | |||
| DeploymentConfig, | |||
| # Feature configs | |||
| FeatureConfigs, | |||
| FeatureConfig, | |||
| # Middleware configs | |||
| MiddlewareConfigs, | |||
| MiddlewareConfig, | |||
| # Extra service configs | |||
| ExtraServiceConfigs, | |||
| ExtraServiceConfig, | |||
| # Enterprise feature configs | |||
| # **Before using, please contact business@dify.ai by email to inquire about licensing matters.** | |||
| EnterpriseFeatureConfigs, | |||
| EnterpriseFeatureConfig, | |||
| ): | |||
| model_config = SettingsConfigDict( | |||
| @@ -1,7 +1,7 @@ | |||
| from pydantic import BaseModel, Field | |||
| class DeploymentConfigs(BaseModel): | |||
| class DeploymentConfig(BaseModel): | |||
| """ | |||
| Deployment configs | |||
| """ | |||
| @@ -1,7 +1,7 @@ | |||
| from pydantic import BaseModel, Field | |||
| class EnterpriseFeatureConfigs(BaseModel): | |||
| class EnterpriseFeatureConfig(BaseModel): | |||
| """ | |||
| Enterprise feature configs. | |||
| **Before using, please contact business@dify.ai by email to inquire about licensing matters.** | |||
| @@ -1,12 +1,12 @@ | |||
| from pydantic import BaseModel | |||
| from configs.extra.notion_configs import NotionConfigs | |||
| from configs.extra.sentry_configs import SentryConfigs | |||
| from configs.extra.notion_config import NotionConfig | |||
| from configs.extra.sentry_config import SentryConfig | |||
| class ExtraServiceConfigs( | |||
| class ExtraServiceConfig( | |||
| # place the configs in alphabet order | |||
| NotionConfigs, | |||
| SentryConfigs, | |||
| NotionConfig, | |||
| SentryConfig, | |||
| ): | |||
| pass | |||
| @@ -3,7 +3,7 @@ from typing import Optional | |||
| from pydantic import BaseModel, Field | |||
| class NotionConfigs(BaseModel): | |||
| class NotionConfig(BaseModel): | |||
| """ | |||
| Notion integration configs | |||
| """ | |||
| @@ -3,7 +3,7 @@ from typing import Optional | |||
| from pydantic import BaseModel, Field, NonNegativeFloat | |||
| class SentryConfigs(BaseModel): | |||
| class SentryConfig(BaseModel): | |||
| """ | |||
| Sentry configs | |||
| """ | |||
| @@ -3,7 +3,7 @@ from typing import Optional | |||
| from pydantic import AliasChoices, BaseModel, Field, NonNegativeInt, PositiveInt | |||
| class SecurityConfigs(BaseModel): | |||
| class SecurityConfig(BaseModel): | |||
| """ | |||
| Secret Key configs | |||
| """ | |||
| @@ -16,7 +16,7 @@ class SecurityConfigs(BaseModel): | |||
| ) | |||
| class AppExecutionConfigs(BaseModel): | |||
| class AppExecutionConfig(BaseModel): | |||
| """ | |||
| App Execution configs | |||
| """ | |||
| @@ -26,7 +26,7 @@ class AppExecutionConfigs(BaseModel): | |||
| ) | |||
| class CodeExecutionSandboxConfigs(BaseModel): | |||
| class CodeExecutionSandboxConfig(BaseModel): | |||
| """ | |||
| Code Execution Sandbox configs | |||
| """ | |||
| @@ -41,7 +41,7 @@ class CodeExecutionSandboxConfigs(BaseModel): | |||
| ) | |||
| class EndpointConfigs(BaseModel): | |||
| class EndpointConfig(BaseModel): | |||
| """ | |||
| Module URL configs | |||
| """ | |||
| @@ -70,7 +70,7 @@ class EndpointConfigs(BaseModel): | |||
| ) | |||
| class FileAccessConfigs(BaseModel): | |||
| class FileAccessConfig(BaseModel): | |||
| """ | |||
| File Access configs | |||
| """ | |||
| @@ -89,7 +89,7 @@ class FileAccessConfigs(BaseModel): | |||
| ) | |||
| class FileUploadConfigs(BaseModel): | |||
| class FileUploadConfig(BaseModel): | |||
| """ | |||
| File Uploading configs | |||
| """ | |||
| @@ -114,7 +114,7 @@ class FileUploadConfigs(BaseModel): | |||
| ) | |||
| class HttpConfigs(BaseModel): | |||
| class HttpConfig(BaseModel): | |||
| """ | |||
| HTTP configs | |||
| """ | |||
| @@ -124,7 +124,7 @@ class HttpConfigs(BaseModel): | |||
| ) | |||
| class InnerAPIConfigs(BaseModel): | |||
| class InnerAPIConfig(BaseModel): | |||
| """ | |||
| Inner API configs | |||
| """ | |||
| @@ -139,7 +139,7 @@ class InnerAPIConfigs(BaseModel): | |||
| ) | |||
| class LoggingConfigs(BaseModel): | |||
| class LoggingConfig(BaseModel): | |||
| """ | |||
| Logging configs | |||
| """ | |||
| @@ -171,7 +171,7 @@ class LoggingConfigs(BaseModel): | |||
| ) | |||
| class ModelLoadBalanceConfigs(BaseModel): | |||
| class ModelLoadBalanceConfig(BaseModel): | |||
| """ | |||
| Model load balance configs | |||
| """ | |||
| @@ -181,7 +181,7 @@ class ModelLoadBalanceConfigs(BaseModel): | |||
| ) | |||
| class BillingConfigs(BaseModel): | |||
| class BillingConfig(BaseModel): | |||
| """ | |||
| Platform Billing Configurations | |||
| """ | |||
| @@ -191,7 +191,7 @@ class BillingConfigs(BaseModel): | |||
| ) | |||
| class UpdateConfigs(BaseModel): | |||
| class UpdateConfig(BaseModel): | |||
| """ | |||
| Update configs | |||
| """ | |||
| @@ -201,7 +201,7 @@ class UpdateConfigs(BaseModel): | |||
| ) | |||
| class WorkflowConfigs(BaseModel): | |||
| class WorkflowConfig(BaseModel): | |||
| """ | |||
| Workflow feature configs | |||
| """ | |||
| @@ -222,7 +222,7 @@ class WorkflowConfigs(BaseModel): | |||
| ) | |||
| class OAuthConfigs(BaseModel): | |||
| class OAuthConfig(BaseModel): | |||
| """ | |||
| oauth configs | |||
| """ | |||
| @@ -252,7 +252,7 @@ class OAuthConfigs(BaseModel): | |||
| ) | |||
| class ModerationConfigs(BaseModel): | |||
| class ModerationConfig(BaseModel): | |||
| """ | |||
| Moderation in app configs. | |||
| """ | |||
| @@ -264,7 +264,7 @@ class ModerationConfigs(BaseModel): | |||
| ) | |||
| class ToolConfigs(BaseModel): | |||
| class ToolConfig(BaseModel): | |||
| """ | |||
| Tool configs | |||
| """ | |||
| @@ -275,7 +275,7 @@ class ToolConfigs(BaseModel): | |||
| ) | |||
| class MailConfigs(BaseModel): | |||
| class MailConfig(BaseModel): | |||
| """ | |||
| Mail Configurations | |||
| """ | |||
| @@ -331,7 +331,7 @@ class MailConfigs(BaseModel): | |||
| ) | |||
| class RagEtlConfigs(BaseModel): | |||
| class RagEtlConfig(BaseModel): | |||
| """ | |||
| RAG ETL Configurations. | |||
| """ | |||
| @@ -357,7 +357,7 @@ class RagEtlConfigs(BaseModel): | |||
| ) | |||
| class DataSetConfigs(BaseModel): | |||
| class DataSetConfig(BaseModel): | |||
| """ | |||
| Dataset configs | |||
| """ | |||
| @@ -368,7 +368,7 @@ class DataSetConfigs(BaseModel): | |||
| ) | |||
| class WorkspaceConfigs(BaseModel): | |||
| class WorkspaceConfig(BaseModel): | |||
| """ | |||
| Workspace configs | |||
| """ | |||
| @@ -379,7 +379,7 @@ class WorkspaceConfigs(BaseModel): | |||
| ) | |||
| class IndexingConfigs(BaseModel): | |||
| class IndexingConfig(BaseModel): | |||
| """ | |||
| Indexing configs. | |||
| """ | |||
| @@ -390,36 +390,36 @@ class IndexingConfigs(BaseModel): | |||
| ) | |||
| class ImageFormatConfigs(BaseModel): | |||
| class ImageFormatConfig(BaseModel): | |||
| MULTIMODAL_SEND_IMAGE_FORMAT: str = Field( | |||
| description='multi model send image format, support base64, url, default is base64', | |||
| default='base64', | |||
| ) | |||
| class FeatureConfigs( | |||
| class FeatureConfig( | |||
| # place the configs in alphabet order | |||
| AppExecutionConfigs, | |||
| BillingConfigs, | |||
| CodeExecutionSandboxConfigs, | |||
| DataSetConfigs, | |||
| EndpointConfigs, | |||
| FileAccessConfigs, | |||
| FileUploadConfigs, | |||
| HttpConfigs, | |||
| ImageFormatConfigs, | |||
| InnerAPIConfigs, | |||
| IndexingConfigs, | |||
| LoggingConfigs, | |||
| MailConfigs, | |||
| ModelLoadBalanceConfigs, | |||
| ModerationConfigs, | |||
| OAuthConfigs, | |||
| RagEtlConfigs, | |||
| SecurityConfigs, | |||
| ToolConfigs, | |||
| UpdateConfigs, | |||
| WorkflowConfigs, | |||
| WorkspaceConfigs, | |||
| AppExecutionConfig, | |||
| BillingConfig, | |||
| CodeExecutionSandboxConfig, | |||
| DataSetConfig, | |||
| EndpointConfig, | |||
| FileAccessConfig, | |||
| FileUploadConfig, | |||
| HttpConfig, | |||
| ImageFormatConfig, | |||
| InnerAPIConfig, | |||
| IndexingConfig, | |||
| LoggingConfig, | |||
| MailConfig, | |||
| ModelLoadBalanceConfig, | |||
| ModerationConfig, | |||
| OAuthConfig, | |||
| RagEtlConfig, | |||
| SecurityConfig, | |||
| ToolConfig, | |||
| UpdateConfig, | |||
| WorkflowConfig, | |||
| WorkspaceConfig, | |||
| ): | |||
| pass | |||
| @@ -2,7 +2,7 @@ from typing import Optional | |||
| from pydantic import BaseModel, Field | |||
| from configs.middleware.redis_configs import RedisConfigs | |||
| from configs.middleware.redis_config import RedisConfig | |||
| from configs.middleware.vdb.chroma_configs import ChromaConfigs | |||
| from configs.middleware.vdb.milvus_configs import MilvusConfigs | |||
| from configs.middleware.vdb.opensearch_configs import OpenSearchConfigs | |||
| @@ -44,10 +44,10 @@ class KeywordStoreConfigs(BaseModel): | |||
| ) | |||
| class MiddlewareConfigs( | |||
| class MiddlewareConfig( | |||
| # place the configs in alphabet order | |||
| KeywordStoreConfigs, | |||
| RedisConfigs, | |||
| RedisConfig, | |||
| StorageConfigs, | |||
| # configs of vdb and vdb providers | |||
| @@ -3,7 +3,7 @@ from typing import Optional | |||
| from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt | |||
| class RedisConfigs(BaseModel): | |||
| class RedisConfig(BaseModel): | |||
| """ | |||
| Redis configs | |||
| """ | |||
| @@ -3,7 +3,7 @@ from textwrap import dedent | |||
| import pytest | |||
| from flask import Flask | |||
| from configs.app_configs import DifyConfigs | |||
| from configs.app_config import DifyConfig | |||
| EXAMPLE_ENV_FILENAME = '.env' | |||
| @@ -19,32 +19,32 @@ def example_env_file(tmp_path, monkeypatch) -> str: | |||
| return str(file_path) | |||
| def test_dify_configs_undefined_entry(example_env_file): | |||
| def test_dify_config_undefined_entry(example_env_file): | |||
| # load dotenv file with pydantic-settings | |||
| settings = DifyConfigs(_env_file=example_env_file) | |||
| config = DifyConfig(_env_file=example_env_file) | |||
| # entries not defined in app settings | |||
| with pytest.raises(TypeError): | |||
| # TypeError: 'AppSettings' object is not subscriptable | |||
| assert settings['LOG_LEVEL'] == 'INFO' | |||
| assert config['LOG_LEVEL'] == 'INFO' | |||
| def test_dify_configs(example_env_file): | |||
| def test_dify_config(example_env_file): | |||
| # load dotenv file with pydantic-settings | |||
| settings = DifyConfigs(_env_file=example_env_file) | |||
| config = DifyConfig(_env_file=example_env_file) | |||
| # constant values | |||
| assert settings.COMMIT_SHA == '' | |||
| assert config.COMMIT_SHA == '' | |||
| # default values | |||
| assert settings.EDITION == 'SELF_HOSTED' | |||
| assert settings.API_COMPRESSION_ENABLED is False | |||
| assert settings.SENTRY_TRACES_SAMPLE_RATE == 1.0 | |||
| assert config.EDITION == 'SELF_HOSTED' | |||
| assert config.API_COMPRESSION_ENABLED is False | |||
| assert config.SENTRY_TRACES_SAMPLE_RATE == 1.0 | |||
| def test_flask_configs(example_env_file): | |||
| flask_app = Flask('app') | |||
| flask_app.config.from_mapping(DifyConfigs(_env_file=example_env_file).model_dump()) | |||
| flask_app.config.from_mapping(DifyConfig(_env_file=example_env_file).model_dump()) | |||
| config = flask_app.config | |||
| # configs read from dotenv directly | |||