Przeglądaj źródła

chore: use singular style in config class name (#5489)

tags/0.6.12
Bowen Liang 1 rok temu
rodzic
commit
8890978ad3
No account linked to committer's email address

+ 2
- 2
api/app.py Wyświetl plik

import os 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': if not os.environ.get("DEBUG") or os.environ.get("DEBUG", "false").lower() != 'true':
from gevent import monkey from gevent import monkey
""" """
dify_app = DifyApp(__name__) dify_app = DifyApp(__name__)
dify_app.config.from_object(Config()) 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 return dify_app





api/configs/app_configs.py → api/configs/app_config.py Wyświetl plik

from pydantic_settings import BaseSettings, SettingsConfigDict 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 from configs.packaging import PackagingInfo




class DifyConfigs(
class DifyConfig(
# based on pydantic-settings # based on pydantic-settings
BaseSettings, BaseSettings,


PackagingInfo, PackagingInfo,


# Deployment configs # Deployment configs
DeploymentConfigs,
DeploymentConfig,


# Feature configs # Feature configs
FeatureConfigs,
FeatureConfig,


# Middleware configs # Middleware configs
MiddlewareConfigs,
MiddlewareConfig,


# Extra service configs # Extra service configs
ExtraServiceConfigs,
ExtraServiceConfig,


# Enterprise feature configs # Enterprise feature configs
# **Before using, please contact business@dify.ai by email to inquire about licensing matters.** # **Before using, please contact business@dify.ai by email to inquire about licensing matters.**
EnterpriseFeatureConfigs,
EnterpriseFeatureConfig,
): ):


model_config = SettingsConfigDict( model_config = SettingsConfigDict(

+ 1
- 1
api/configs/deploy/__init__.py Wyświetl plik

from pydantic import BaseModel, Field from pydantic import BaseModel, Field




class DeploymentConfigs(BaseModel):
class DeploymentConfig(BaseModel):
""" """
Deployment configs Deployment configs
""" """

+ 1
- 1
api/configs/enterprise/__init__.py Wyświetl plik

from pydantic import BaseModel, Field from pydantic import BaseModel, Field




class EnterpriseFeatureConfigs(BaseModel):
class EnterpriseFeatureConfig(BaseModel):
""" """
Enterprise feature configs. Enterprise feature configs.
**Before using, please contact business@dify.ai by email to inquire about licensing matters.** **Before using, please contact business@dify.ai by email to inquire about licensing matters.**

+ 5
- 5
api/configs/extra/__init__.py Wyświetl plik

from pydantic import BaseModel 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 # place the configs in alphabet order
NotionConfigs,
SentryConfigs,
NotionConfig,
SentryConfig,
): ):
pass pass

api/configs/extra/notion_configs.py → api/configs/extra/notion_config.py Wyświetl plik

from pydantic import BaseModel, Field from pydantic import BaseModel, Field




class NotionConfigs(BaseModel):
class NotionConfig(BaseModel):
""" """
Notion integration configs Notion integration configs
""" """

api/configs/extra/sentry_configs.py → api/configs/extra/sentry_config.py Wyświetl plik

from pydantic import BaseModel, Field, NonNegativeFloat from pydantic import BaseModel, Field, NonNegativeFloat




class SentryConfigs(BaseModel):
class SentryConfig(BaseModel):
""" """
Sentry configs Sentry configs
""" """

+ 45
- 45
api/configs/feature/__init__.py Wyświetl plik

from pydantic import AliasChoices, BaseModel, Field, NonNegativeInt, PositiveInt from pydantic import AliasChoices, BaseModel, Field, NonNegativeInt, PositiveInt




class SecurityConfigs(BaseModel):
class SecurityConfig(BaseModel):
""" """
Secret Key configs Secret Key configs
""" """
) )




class AppExecutionConfigs(BaseModel):
class AppExecutionConfig(BaseModel):
""" """
App Execution configs App Execution configs
""" """
) )




class CodeExecutionSandboxConfigs(BaseModel):
class CodeExecutionSandboxConfig(BaseModel):
""" """
Code Execution Sandbox configs Code Execution Sandbox configs
""" """
) )




class EndpointConfigs(BaseModel):
class EndpointConfig(BaseModel):
""" """
Module URL configs Module URL configs
""" """
) )




class FileAccessConfigs(BaseModel):
class FileAccessConfig(BaseModel):
""" """
File Access configs File Access configs
""" """
) )




class FileUploadConfigs(BaseModel):
class FileUploadConfig(BaseModel):
""" """
File Uploading configs File Uploading configs
""" """
) )




class HttpConfigs(BaseModel):
class HttpConfig(BaseModel):
""" """
HTTP configs HTTP configs
""" """
) )




class InnerAPIConfigs(BaseModel):
class InnerAPIConfig(BaseModel):
""" """
Inner API configs Inner API configs
""" """
) )




class LoggingConfigs(BaseModel):
class LoggingConfig(BaseModel):
""" """
Logging configs Logging configs
""" """
) )




class ModelLoadBalanceConfigs(BaseModel):
class ModelLoadBalanceConfig(BaseModel):
""" """
Model load balance configs Model load balance configs
""" """
) )




class BillingConfigs(BaseModel):
class BillingConfig(BaseModel):
""" """
Platform Billing Configurations Platform Billing Configurations
""" """
) )




class UpdateConfigs(BaseModel):
class UpdateConfig(BaseModel):
""" """
Update configs Update configs
""" """
) )




class WorkflowConfigs(BaseModel):
class WorkflowConfig(BaseModel):
""" """
Workflow feature configs Workflow feature configs
""" """
) )




class OAuthConfigs(BaseModel):
class OAuthConfig(BaseModel):
""" """
oauth configs oauth configs
""" """
) )




class ModerationConfigs(BaseModel):
class ModerationConfig(BaseModel):
""" """
Moderation in app configs. Moderation in app configs.
""" """
) )




class ToolConfigs(BaseModel):
class ToolConfig(BaseModel):
""" """
Tool configs Tool configs
""" """
) )




class MailConfigs(BaseModel):
class MailConfig(BaseModel):
""" """
Mail Configurations Mail Configurations
""" """
) )




class RagEtlConfigs(BaseModel):
class RagEtlConfig(BaseModel):
""" """
RAG ETL Configurations. RAG ETL Configurations.
""" """
) )




class DataSetConfigs(BaseModel):
class DataSetConfig(BaseModel):
""" """
Dataset configs Dataset configs
""" """
) )




class WorkspaceConfigs(BaseModel):
class WorkspaceConfig(BaseModel):
""" """
Workspace configs Workspace configs
""" """
) )




class IndexingConfigs(BaseModel):
class IndexingConfig(BaseModel):
""" """
Indexing configs. Indexing configs.
""" """
) )




class ImageFormatConfigs(BaseModel):
class ImageFormatConfig(BaseModel):
MULTIMODAL_SEND_IMAGE_FORMAT: str = Field( MULTIMODAL_SEND_IMAGE_FORMAT: str = Field(
description='multi model send image format, support base64, url, default is base64', description='multi model send image format, support base64, url, default is base64',
default='base64', default='base64',
) )




class FeatureConfigs(
class FeatureConfig(
# place the configs in alphabet order # 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 pass

+ 3
- 3
api/configs/middleware/__init__.py Wyświetl plik



from pydantic import BaseModel, Field 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.chroma_configs import ChromaConfigs
from configs.middleware.vdb.milvus_configs import MilvusConfigs from configs.middleware.vdb.milvus_configs import MilvusConfigs
from configs.middleware.vdb.opensearch_configs import OpenSearchConfigs from configs.middleware.vdb.opensearch_configs import OpenSearchConfigs
) )




class MiddlewareConfigs(
class MiddlewareConfig(
# place the configs in alphabet order # place the configs in alphabet order
KeywordStoreConfigs, KeywordStoreConfigs,
RedisConfigs,
RedisConfig,
StorageConfigs, StorageConfigs,


# configs of vdb and vdb providers # configs of vdb and vdb providers

api/configs/middleware/redis_configs.py → api/configs/middleware/redis_config.py Wyświetl plik

from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt




class RedisConfigs(BaseModel):
class RedisConfig(BaseModel):
""" """
Redis configs Redis configs
""" """

api/tests/unit_tests/settings/test_dify_settings.py → api/tests/unit_tests/configs/test_dify_config.py Wyświetl plik

import pytest import pytest
from flask import Flask from flask import Flask


from configs.app_configs import DifyConfigs
from configs.app_config import DifyConfig


EXAMPLE_ENV_FILENAME = '.env' EXAMPLE_ENV_FILENAME = '.env'


return str(file_path) 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 # 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 # entries not defined in app settings
with pytest.raises(TypeError): with pytest.raises(TypeError):
# TypeError: 'AppSettings' object is not subscriptable # 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 # load dotenv file with pydantic-settings
settings = DifyConfigs(_env_file=example_env_file)
config = DifyConfig(_env_file=example_env_file)


# constant values # constant values
assert settings.COMMIT_SHA == ''
assert config.COMMIT_SHA == ''


# default values # 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): def test_flask_configs(example_env_file):
flask_app = Flask('app') 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 config = flask_app.config


# configs read from dotenv directly # configs read from dotenv directly

Ładowanie…
Anuluj
Zapisz