style: format all Python files with Black
Apply Black formatter to the entire codebase for consistent code style. Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
定义所有配置项的默认值,从环境变量加载。
|
||||
"""
|
||||
|
||||
from config.schema import (
|
||||
ERPConfig,
|
||||
DatabaseConfig,
|
||||
@@ -17,7 +18,6 @@ from config.schema import (
|
||||
DatabaseType,
|
||||
)
|
||||
|
||||
|
||||
# 默认配置 - 从环境变量加载
|
||||
DEFAULT_APP_CONFIG = AppConfig.from_env()
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
使用 python-dotenv 加载 .env 文件,并提供类型转换功能。
|
||||
"""
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Any, Optional, Type, TypeVar
|
||||
@@ -111,7 +112,9 @@ def set_env(key: str, value: Any) -> None:
|
||||
os.environ[key] = str(value)
|
||||
|
||||
|
||||
def save_env_file(env_file: Optional[str] = None, env_dict: Optional[dict] = None) -> bool:
|
||||
def save_env_file(
|
||||
env_file: Optional[str] = None, env_dict: Optional[dict] = None
|
||||
) -> bool:
|
||||
"""
|
||||
保存环境变量到 .env 文件
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
负责加载、合并和验证配置,优先从环境变量加载。
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
from typing import Any, Dict
|
||||
@@ -27,7 +28,9 @@ class ConfigLoader:
|
||||
"""配置加载器"""
|
||||
|
||||
@staticmethod
|
||||
def load(config_file: str = "config/user_settings.json", use_env: bool = True) -> AppConfig:
|
||||
def load(
|
||||
config_file: str = "config/user_settings.json", use_env: bool = True
|
||||
) -> AppConfig:
|
||||
"""
|
||||
加载配置
|
||||
|
||||
@@ -111,18 +114,36 @@ class ConfigLoader:
|
||||
"ERP_IGNORE_HTTPS_ERRORS": config.erp.ignore_https_errors,
|
||||
"ERP_AUTO_CLOSE_BROWSER": config.erp.auto_close_browser,
|
||||
# 数据库配置
|
||||
"DB_TYPE": config.database.db_type.value if isinstance(config.database.db_type, DatabaseType) else config.database.db_type,
|
||||
"DB_TYPE": (
|
||||
config.database.db_type.value
|
||||
if isinstance(config.database.db_type, DatabaseType)
|
||||
else config.database.db_type
|
||||
),
|
||||
"DB_SERVER": config.database.server,
|
||||
"DB_NAME": config.database.database,
|
||||
"DB_USERNAME": config.database.username,
|
||||
"DB_PASSWORD": config.database.password,
|
||||
# SQL Server 特定配置
|
||||
"DB_SQLSERVER_DRIVER": config.database.sqlserver.driver if config.database.sqlserver else "ODBC Driver 18 for SQL Server",
|
||||
"DB_TRUST_SERVER_CERTIFICATE": config.database.sqlserver.trust_server_certificate if config.database.sqlserver else "yes",
|
||||
"DB_SQLSERVER_DRIVER": (
|
||||
config.database.sqlserver.driver
|
||||
if config.database.sqlserver
|
||||
else "ODBC Driver 18 for SQL Server"
|
||||
),
|
||||
"DB_TRUST_SERVER_CERTIFICATE": (
|
||||
config.database.sqlserver.trust_server_certificate
|
||||
if config.database.sqlserver
|
||||
else "yes"
|
||||
),
|
||||
# MySQL 特定配置
|
||||
"DB_MYSQL_HOST": config.database.mysql.host if config.database.mysql else "",
|
||||
"DB_MYSQL_PORT": config.database.mysql.port if config.database.mysql else 3306,
|
||||
"DB_MYSQL_CHARSET": config.database.mysql.charset if config.database.mysql else "utf8mb4",
|
||||
"DB_MYSQL_HOST": (
|
||||
config.database.mysql.host if config.database.mysql else ""
|
||||
),
|
||||
"DB_MYSQL_PORT": (
|
||||
config.database.mysql.port if config.database.mysql else 3306
|
||||
),
|
||||
"DB_MYSQL_CHARSET": (
|
||||
config.database.mysql.charset if config.database.mysql else "utf8mb4"
|
||||
),
|
||||
# 路径配置
|
||||
"PATH_DATA_DIR": config.paths.data_dir,
|
||||
"PATH_PRODUCTION_ID_FILE": config.paths.production_id_file,
|
||||
@@ -199,7 +220,9 @@ class ConfigLoader:
|
||||
sqlserver_dict = database_dict.get("sqlserver", {})
|
||||
sqlserver_config = SQLServerConfig(
|
||||
driver=sqlserver_dict.get("driver", "ODBC Driver 18 for SQL Server"),
|
||||
trust_server_certificate=sqlserver_dict.get("trust_server_certificate", "yes"),
|
||||
trust_server_certificate=sqlserver_dict.get(
|
||||
"trust_server_certificate", "yes"
|
||||
),
|
||||
)
|
||||
|
||||
# 解析 MySQL 配置
|
||||
@@ -243,16 +266,18 @@ class ConfigLoader:
|
||||
verbose=extraction_dict.get("verbose", True),
|
||||
auto_convert=extraction_dict.get("auto_convert", True),
|
||||
merge_batches=extraction_dict.get("merge_batches", True),
|
||||
enable_db_persistence=extraction_dict.get("enable_db_persistence", False),
|
||||
enable_db_persistence=extraction_dict.get(
|
||||
"enable_db_persistence", False
|
||||
),
|
||||
),
|
||||
validation=ValidationConfig(
|
||||
data_source=validation_dict.get("data_source", "database_full"),
|
||||
use_database=validation_dict.get("use_database", True),
|
||||
batch_size=validation_dict.get("batch_size", 2000),
|
||||
enable_crud_operations=validation_dict.get("enable_crud_operations", False),
|
||||
enable_crud_operations=validation_dict.get(
|
||||
"enable_crud_operations", False
|
||||
),
|
||||
default_manager=validation_dict.get("default_manager", ""),
|
||||
match_mode=validation_dict.get("match_mode", "substring"),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
使用 dataclass 定义所有配置项的结构和类型。
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Optional
|
||||
from pathlib import Path
|
||||
@@ -13,6 +14,7 @@ from enum import Enum
|
||||
|
||||
class DatabaseType(str, Enum):
|
||||
"""数据库类型枚举"""
|
||||
|
||||
SQLSERVER = "sqlserver"
|
||||
MYSQL = "mysql"
|
||||
|
||||
@@ -57,6 +59,7 @@ class ERPConfig:
|
||||
@dataclass
|
||||
class SQLServerConfig:
|
||||
"""SQL Server 特定配置"""
|
||||
|
||||
driver: str = "ODBC Driver 18 for SQL Server"
|
||||
trust_server_certificate: str = "yes"
|
||||
|
||||
@@ -74,6 +77,7 @@ class SQLServerConfig:
|
||||
@dataclass
|
||||
class MySQLConfig:
|
||||
"""MySQL 特定配置"""
|
||||
|
||||
host: str = ""
|
||||
port: int = 3306
|
||||
charset: str = "utf8mb4"
|
||||
@@ -167,7 +171,9 @@ class PathConfig:
|
||||
data_dir=get_env("PATH_DATA_DIR", "D:/python/playwrite/data/"),
|
||||
production_id_file=get_env("PATH_PRODUCTION_ID_FILE", "ProductionID.txt"),
|
||||
default_output=get_env("PATH_DEFAULT_OUTPUT", "离散备料计划维护_合并.xlsx"),
|
||||
validation_output=get_env("PATH_VALIDATION_OUTPUT", "物料状态校验结果.xlsx"),
|
||||
validation_output=get_env(
|
||||
"PATH_VALIDATION_OUTPUT", "物料状态校验结果.xlsx"
|
||||
),
|
||||
)
|
||||
|
||||
def validate(self) -> list[str]:
|
||||
@@ -200,7 +206,9 @@ class ExtractionConfig:
|
||||
verbose=get_env_bool("EXTRACTION_VERBOSE", True),
|
||||
auto_convert=get_env_bool("EXTRACTION_AUTO_CONVERT", True),
|
||||
merge_batches=get_env_bool("EXTRACTION_MERGE_BATCHES", True),
|
||||
enable_db_persistence=get_env_bool("EXTRACTION_ENABLE_DB_PERSISTENCE", False),
|
||||
enable_db_persistence=get_env_bool(
|
||||
"EXTRACTION_ENABLE_DB_PERSISTENCE", False
|
||||
),
|
||||
)
|
||||
|
||||
def validate(self) -> list[str]:
|
||||
@@ -246,7 +254,7 @@ class ValidationConfig:
|
||||
"database_full",
|
||||
"database_filtered",
|
||||
"excel_existing",
|
||||
"excel_full"
|
||||
"excel_full",
|
||||
]
|
||||
if self.data_source not in valid_sources:
|
||||
errors.append(
|
||||
@@ -281,6 +289,7 @@ class UIConfig:
|
||||
def from_env(cls) -> "UIConfig":
|
||||
"""从环境变量创建配置"""
|
||||
from config.env_loader import get_env, get_env_int
|
||||
|
||||
return cls(
|
||||
font_family=get_env("UI_FONT_FAMILY", "Microsoft YaHei UI"),
|
||||
font_size=get_env_int("UI_FONT_SIZE", 10),
|
||||
@@ -366,19 +375,35 @@ class AppConfig:
|
||||
"auto_close_browser": self.erp.auto_close_browser,
|
||||
},
|
||||
"database": {
|
||||
"db_type": self.database.db_type if isinstance(self.database.db_type, str) else self.database.db_type.value,
|
||||
"db_type": (
|
||||
self.database.db_type
|
||||
if isinstance(self.database.db_type, str)
|
||||
else self.database.db_type.value
|
||||
),
|
||||
"server": self.database.server,
|
||||
"database": self.database.database,
|
||||
"username": self.database.username,
|
||||
"password": self.database.password,
|
||||
"sqlserver": {
|
||||
"driver": self.database.sqlserver.driver if self.database.sqlserver else "ODBC Driver 18 for SQL Server",
|
||||
"trust_server_certificate": self.database.sqlserver.trust_server_certificate if self.database.sqlserver else "yes",
|
||||
"driver": (
|
||||
self.database.sqlserver.driver
|
||||
if self.database.sqlserver
|
||||
else "ODBC Driver 18 for SQL Server"
|
||||
),
|
||||
"trust_server_certificate": (
|
||||
self.database.sqlserver.trust_server_certificate
|
||||
if self.database.sqlserver
|
||||
else "yes"
|
||||
),
|
||||
},
|
||||
"mysql": {
|
||||
"host": self.database.mysql.host if self.database.mysql else "",
|
||||
"port": self.database.mysql.port if self.database.mysql else 3306,
|
||||
"charset": self.database.mysql.charset if self.database.mysql else "utf8mb4",
|
||||
"charset": (
|
||||
self.database.mysql.charset
|
||||
if self.database.mysql
|
||||
else "utf8mb4"
|
||||
),
|
||||
},
|
||||
},
|
||||
"paths": {
|
||||
|
||||
Reference in New Issue
Block a user