65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
"""
|
|
核心基类和工具函数模块
|
|
"""
|
|
import uuid
|
|
import re
|
|
import xml.dom.minidom as Dom
|
|
from dataclasses import dataclass, field
|
|
from typing import Optional, List
|
|
|
|
from .constants import UUID, SHORT_NAME
|
|
from .enums import Category, Encoding, CalibrationAccess, UpperSts, LowerSts
|
|
|
|
|
|
def create_uuid() -> str:
|
|
"""生成 UUID"""
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
def create_text_element(doc: Dom.Document, tag: str, text: str) -> Dom.Element:
|
|
"""创建文本元素"""
|
|
element = doc.createElement(tag)
|
|
node = doc.createTextNode(text)
|
|
element.appendChild(node)
|
|
return element
|
|
|
|
|
|
@dataclass
|
|
class Base:
|
|
"""所有类的基类,提供名称和层级结构支持"""
|
|
name: str
|
|
id: Optional[int] = field(default=None)
|
|
parent: Optional['Base'] = field(default=None, repr=False)
|
|
description: Optional[str] = field(default=None)
|
|
_uuid: Optional[str] = field(default=None, repr=False)
|
|
|
|
@property
|
|
def uuid(self) -> str:
|
|
"""获取 UUID,延迟生成,仅在首次访问时生成"""
|
|
if self._uuid is None:
|
|
self._uuid = create_uuid()
|
|
return self._uuid
|
|
|
|
@property
|
|
def class_name(self) -> str:
|
|
"""获取类型名称"""
|
|
return self.__class__.__name__
|
|
|
|
@property
|
|
def parent_id(self) -> Optional[int]:
|
|
"""获取父类ID"""
|
|
return self.parent.id if self.parent is not None else None
|
|
|
|
@property
|
|
def package_path(self) -> str:
|
|
"""获取完整路径(包路径+名称)"""
|
|
path = []
|
|
current = self
|
|
while current is not None:
|
|
path.append(current.name)
|
|
current = current.parent
|
|
return '/' + '/'.join(reversed(path))
|
|
|
|
def to_arxml(self, doc: Dom.Document) -> Dom.Element:
|
|
"""转换为 ARXML 元素"""
|
|
raise NotImplementedError("to_arxml method must be implemented by subclass") |