mirror of
https://github.com/jxxghp/MoviePilot-Plugins.git
synced 2026-05-24 23:16:49 +00:00
- 数据模型重构: 全面引入 Pydantic 模型(ClashConfig, Proxy, ProxyGroup 等)替代原有字典结构,提供更严格的数据验证与类型安全。 - 数据迁移机制: 新增 v2.1.0 数据升级脚本,支持将旧版代理、策略组及规则数据自动迁移至新架构。 - 配置补丁系统: 实现基于 JSON Patch 的细粒度配置修补机制,替代旧版覆盖逻辑,提升配置修改的灵活性。 - 服务层优化: 重写 ClashRuleProviderService 以适配新对象模型,增强代码可维护性与扩展性。 - API模型同步: 更新相关 API 数据模型以保持与内部数据结构的一致性。 - 用户界面: 批量规则管理和数据项隐藏支持
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from pydantic import BaseModel, Field, field_validator, field_serializer
|
|
|
|
from .metadata import Metadata
|
|
from .rule import RuleType
|
|
from .rule import RoutingRuleType, Action, AdditionalParam
|
|
from ..helper.clashruleparser import ClashRuleParser
|
|
|
|
|
|
class RuleItem(BaseModel):
|
|
"""Clash rule item"""
|
|
rule: RuleType
|
|
meta: Metadata = Field(default_factory=Metadata)
|
|
|
|
@field_serializer("rule")
|
|
def serialize_rule(self, v: RuleType, _info):
|
|
return str(v)
|
|
|
|
@field_validator("rule", mode="before")
|
|
@classmethod
|
|
def validate_rule(cls, v):
|
|
if isinstance(v, str):
|
|
return ClashRuleParser.parse(v)
|
|
return v
|
|
|
|
|
|
class RuleData(BaseModel):
|
|
priority: int
|
|
rule_string: str
|
|
type: RoutingRuleType
|
|
payload: str | None = None
|
|
action: Action | str
|
|
additional_params: AdditionalParam | None = None
|
|
conditions: list[str] | None = None
|
|
condition: str | None = None
|
|
meta: Metadata = Field(default_factory=Metadata)
|
|
|
|
@classmethod
|
|
def from_rule_item(cls, item: RuleItem, priority: int) -> 'RuleData':
|
|
fields = item.rule.to_dict()
|
|
return cls(priority=priority, meta=item.meta, **fields)
|