143 lines
5.0 KiB
Python
143 lines
5.0 KiB
Python
|
|
'''数据模型定义'''
|
||
|
|
import json
|
||
|
|
import datetime
|
||
|
|
from dataclasses import dataclass, field
|
||
|
|
from typing import Any, Dict, List, Optional, Tuple
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class ConfigField:
|
||
|
|
"""配置项元数据类"""
|
||
|
|
name: str
|
||
|
|
value: Any
|
||
|
|
category: str = "未分类"
|
||
|
|
display_name: str = ""
|
||
|
|
field_type: str = "auto"
|
||
|
|
decimals: Optional[int] = None
|
||
|
|
tooltip: str = ""
|
||
|
|
hidden: bool = False
|
||
|
|
encrypted: bool = False # 是否加密
|
||
|
|
line_number: Optional[int] = None
|
||
|
|
original_lines: List[str] = field(default_factory=list)
|
||
|
|
validation: Dict = field(default_factory=dict)
|
||
|
|
last_saved_value: Any = None
|
||
|
|
|
||
|
|
def __post_init__(self):
|
||
|
|
if not self.display_name:
|
||
|
|
self.display_name = self.name
|
||
|
|
|
||
|
|
def get_actual_field_type(self) -> str:
|
||
|
|
"""获取实际的字段类型"""
|
||
|
|
if self.field_type != "auto":
|
||
|
|
return self.field_type
|
||
|
|
|
||
|
|
if isinstance(self.value, bool):
|
||
|
|
return "bool"
|
||
|
|
elif isinstance(self.value, int):
|
||
|
|
return "int"
|
||
|
|
elif isinstance(self.value, float):
|
||
|
|
return "float"
|
||
|
|
elif isinstance(self.value, (list, dict)):
|
||
|
|
return "json"
|
||
|
|
else:
|
||
|
|
return "str"
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class EditorRules:
|
||
|
|
"""编辑器规则数据类"""
|
||
|
|
categories: Dict[str, List[str]] = field(default_factory=lambda: {"未分类": []})
|
||
|
|
display_names: Dict[str, str] = field(default_factory=dict)
|
||
|
|
tooltips: Dict[str, str] = field(default_factory=dict)
|
||
|
|
field_types: Dict[str, str] = field(default_factory=dict)
|
||
|
|
field_decimals: Dict[str, int] = field(default_factory=dict)
|
||
|
|
hidden: List[str] = field(default_factory=list)
|
||
|
|
encrypted_fields: List[str] = field(default_factory=list) # 加密字段列表
|
||
|
|
validations: Dict[str, Dict] = field(default_factory=dict)
|
||
|
|
field_order: Dict[str, List[str]] = field(default_factory=dict)
|
||
|
|
last_saved_values: Dict[str, Any] = field(default_factory=dict)
|
||
|
|
|
||
|
|
def to_dict(self) -> Dict:
|
||
|
|
"""转换为字典"""
|
||
|
|
return {
|
||
|
|
"categories": self.categories,
|
||
|
|
"display_names": self.display_names,
|
||
|
|
"tooltips": self.tooltips,
|
||
|
|
"field_types": self.field_types,
|
||
|
|
"field_decimals": self.field_decimals,
|
||
|
|
"hidden": self.hidden,
|
||
|
|
"encrypted_fields": self.encrypted_fields,
|
||
|
|
"validations": self.validations,
|
||
|
|
"field_order": self.field_order,
|
||
|
|
"last_saved_values": self.last_saved_values
|
||
|
|
}
|
||
|
|
|
||
|
|
@classmethod
|
||
|
|
def from_dict(cls, data: Dict) -> 'EditorRules':
|
||
|
|
"""从字典创建实例"""
|
||
|
|
return cls(
|
||
|
|
categories=data.get("categories", {"未分类": []}),
|
||
|
|
display_names=data.get("display_names", {}),
|
||
|
|
tooltips=data.get("tooltips", {}),
|
||
|
|
field_types=data.get("field_types", {}),
|
||
|
|
field_decimals=data.get("field_decimals", {}),
|
||
|
|
hidden=data.get("hidden", []),
|
||
|
|
encrypted_fields=data.get("encrypted_fields", []),
|
||
|
|
validations=data.get("validations", {}),
|
||
|
|
field_order=data.get("field_order", {}),
|
||
|
|
last_saved_values=data.get("last_saved_values", {})
|
||
|
|
)
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class UserSettings:
|
||
|
|
"""用户设置数据类"""
|
||
|
|
config_file_path: str = ""
|
||
|
|
last_used: str = ""
|
||
|
|
use_relative_path: bool = True
|
||
|
|
|
||
|
|
def to_dict(self) -> Dict:
|
||
|
|
return {
|
||
|
|
"config_file_path": self.config_file_path,
|
||
|
|
"last_used": self.last_used
|
||
|
|
}
|
||
|
|
|
||
|
|
@classmethod
|
||
|
|
def from_dict(cls, data: Dict) -> 'UserSettings':
|
||
|
|
return cls(
|
||
|
|
config_file_path=data.get("config_file_path", ""),
|
||
|
|
last_used=data.get("last_used", "")
|
||
|
|
)
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class ExportInfo:
|
||
|
|
"""导出信息数据类"""
|
||
|
|
export_time: str = ""
|
||
|
|
export_version: str = "1.0"
|
||
|
|
note: str = "配置文件编辑器规则文件"
|
||
|
|
|
||
|
|
def to_dict(self) -> Dict:
|
||
|
|
return {
|
||
|
|
"export_time": self.export_time or datetime.datetime.now().strftime("%Y-%m-d %H:%M:%S"),
|
||
|
|
"export_version": self.export_version,
|
||
|
|
"note": self.note
|
||
|
|
}
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class Statistics:
|
||
|
|
"""统计信息数据类"""
|
||
|
|
total_fields: int = 0
|
||
|
|
display_names_count: int = 0
|
||
|
|
categories_count: int = 0
|
||
|
|
hidden_fields_count: int = 0
|
||
|
|
encrypted_fields_count: int = 0 # 加密字段计数
|
||
|
|
field_types_count: int = 0
|
||
|
|
validations_count: int = 0
|
||
|
|
|
||
|
|
def to_dict(self) -> Dict:
|
||
|
|
return {
|
||
|
|
"total_fields": self.total_fields,
|
||
|
|
"display_names_count": self.display_names_count,
|
||
|
|
"categories_count": self.categories_count,
|
||
|
|
"hidden_fields_count": self.hidden_fields_count,
|
||
|
|
"encrypted_fields_count": self.encrypted_fields_count,
|
||
|
|
"field_types_count": self.field_types_count,
|
||
|
|
"validations_count": self.validations_count
|
||
|
|
}
|