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:
Misaka
2026-02-26 22:44:03 +08:00
parent 1b16842a2c
commit 3b7c00377f
46 changed files with 1488 additions and 974 deletions

View File

@@ -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()

View File

@@ -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 文件

View File

@@ -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"),
),
)

View File

@@ -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": {