style: 统一 Ruff 代码格式

This commit is contained in:
yml2213
2026-08-30 21:04:52 +08:00
parent c891ac982e
commit 47e19ed7b2
90 changed files with 5574 additions and 2350 deletions
+69 -52
View File
@@ -8,6 +8,7 @@
0x08 MAP 0x09 LIST 0x0a STRUCT_BEGIN 0x0b STRUCT_END
0x0c ZERO 0x0d SIMPLE_LIST
"""
import struct
import io
from typing import Any, Dict, List, Optional, Tuple
@@ -24,16 +25,17 @@ class TafType:
STRING4 = 0x07
MAP = 0x08
LIST = 0x09
STRUCT_BEGIN = 0x0a
STRUCT_END = 0x0b
ZERO = 0x0c
SIMPLE_LIST = 0x0d
STRUCT_BEGIN = 0x0A
STRUCT_END = 0x0B
ZERO = 0x0C
SIMPLE_LIST = 0x0D
# ============================================================
# 输出流(编码)
# ============================================================
class TafOutputStream:
"""TAF 编码输出流"""
@@ -46,9 +48,9 @@ class TafOutputStream:
# ---- head ----
def write_head(self, tag: int, data_type: int):
if tag < 15:
self.buf.write(struct.pack('B', (tag << 4) | data_type))
self.buf.write(struct.pack("B", (tag << 4) | data_type))
else:
self.buf.write(struct.pack('BB', 0xF0 | data_type, tag))
self.buf.write(struct.pack("BB", 0xF0 | data_type, tag))
# ---- 整数(带自动优化) ----
def write_int8(self, tag: int, value: int):
@@ -56,28 +58,28 @@ class TafOutputStream:
self.write_head(tag, TafType.ZERO)
else:
self.write_head(tag, TafType.INT8)
self.buf.write(struct.pack('b', value))
self.buf.write(struct.pack("b", value))
def write_int16(self, tag: int, value: int):
if -128 <= value <= 127:
self.write_int8(tag, value)
else:
self.write_head(tag, TafType.INT16)
self.buf.write(struct.pack('>h', value))
self.buf.write(struct.pack(">h", value))
def write_int32(self, tag: int, value: int):
if -32768 <= value <= 32767:
self.write_int16(tag, value)
else:
self.write_head(tag, TafType.INT32)
self.buf.write(struct.pack('>i', value))
self.buf.write(struct.pack(">i", value))
def write_int64(self, tag: int, value: int):
if -2147483648 <= value <= 2147483647:
self.write_int32(tag, value)
else:
self.write_head(tag, TafType.INT64)
self.buf.write(struct.pack('>q', value))
self.buf.write(struct.pack(">q", value))
def write_uint64(self, tag: int, value: int):
"""uint64:超过 int32 范围用 INT64"""
@@ -85,27 +87,27 @@ class TafOutputStream:
self.write_int32(tag, value)
else:
self.write_head(tag, TafType.INT64)
self.buf.write(struct.pack('>Q', value))
self.buf.write(struct.pack(">Q", value))
# ---- 浮点 ----
def write_float(self, tag: int, value: float):
self.write_head(tag, TafType.FLOAT)
self.buf.write(struct.pack('>f', value))
self.buf.write(struct.pack(">f", value))
def write_double(self, tag: int, value: float):
self.write_head(tag, TafType.DOUBLE)
self.buf.write(struct.pack('>d', value))
self.buf.write(struct.pack(">d", value))
# ---- 字符串 ----
def write_string(self, tag: int, value: str):
encoded = value.encode('utf-8')
encoded = value.encode("utf-8")
length = len(encoded)
if length > 255:
self.write_head(tag, TafType.STRING4)
self.buf.write(struct.pack('>I', length))
self.buf.write(struct.pack(">I", length))
else:
self.write_head(tag, TafType.STRING1)
self.buf.write(struct.pack('B', length))
self.buf.write(struct.pack("B", length))
self.buf.write(encoded)
# ---- 字节数组 ----
@@ -133,8 +135,9 @@ class TafOutputStream:
self.write_struct_end()
# ---- Map ----
def write_map(self, tag: int, value: Dict[Any, Any],
key_writer=None, val_writer=None):
def write_map(
self, tag: int, value: Dict[Any, Any], key_writer=None, val_writer=None
):
self.write_head(tag, TafType.MAP)
self.write_int32(0, len(value))
for k, v in value.items():
@@ -172,7 +175,7 @@ class TafOutputStream:
self.write_map(tag, value)
elif isinstance(value, (list, tuple)):
self.write_list(tag, list(value))
elif hasattr(value, 'write_to'):
elif hasattr(value, "write_to"):
self.write_struct(tag, value)
else:
raise TypeError(f"不支持的类型: {type(value)}")
@@ -182,6 +185,7 @@ class TafOutputStream:
# 输入流(解码)—— 完整实现,支持所有类型
# ============================================================
class TafInputStream:
"""TAF 解码输入流"""
@@ -201,14 +205,14 @@ class TafInputStream:
data = self.buf.read(1)
if not data:
raise EOFError("读取到文件末尾")
b = struct.unpack('B', data)[0]
b = struct.unpack("B", data)[0]
tag = (b >> 4) & 0x0F
data_type = b & 0x0F
if tag == 15:
data = self.buf.read(1)
if not data:
raise EOFError("读取 tag 扩展字节失败")
tag = struct.unpack('B', data)[0]
tag = struct.unpack("B", data)[0]
return tag, data_type
# ---- 跳过 ----
@@ -228,10 +232,10 @@ class TafInputStream:
elif data_type == TafType.DOUBLE:
self.buf.read(8)
elif data_type == TafType.STRING1:
length = struct.unpack('B', self.buf.read(1))[0]
length = struct.unpack("B", self.buf.read(1))[0]
self.buf.read(length)
elif data_type == TafType.STRING4:
length = struct.unpack('>I', self.buf.read(4))[0]
length = struct.unpack(">I", self.buf.read(4))[0]
self.buf.read(length)
elif data_type == TafType.MAP:
self._skip_map()
@@ -258,13 +262,13 @@ class TafInputStream:
if dtype == TafType.ZERO:
return 0
if dtype == TafType.INT8:
return struct.unpack('b', self.buf.read(1))[0]
return struct.unpack("b", self.buf.read(1))[0]
if dtype == TafType.INT16:
return struct.unpack('>h', self.buf.read(2))[0]
return struct.unpack(">h", self.buf.read(2))[0]
if dtype == TafType.INT32:
return struct.unpack('>i', self.buf.read(4))[0]
return struct.unpack(">i", self.buf.read(4))[0]
if dtype == TafType.INT64:
return struct.unpack('>q', self.buf.read(8))[0]
return struct.unpack(">q", self.buf.read(8))[0]
raise ValueError(f"期望整数, 实际 0x{dtype:02x}")
def _skip_struct(self):
@@ -335,19 +339,23 @@ class TafInputStream:
if dtype == TafType.ZERO:
return 0
if dtype == TafType.INT8:
return struct.unpack('B', self.buf.read(1))[0]
return struct.unpack("B", self.buf.read(1))[0]
if dtype == TafType.INT16:
return struct.unpack('>H', self.buf.read(2))[0]
return struct.unpack(">H", self.buf.read(2))[0]
if dtype == TafType.INT32:
return struct.unpack('>I', self.buf.read(4))[0]
return struct.unpack(">I", self.buf.read(4))[0]
if dtype == TafType.INT64:
return struct.unpack('>Q', self.buf.read(8))[0]
return struct.unpack(">Q", self.buf.read(8))[0]
raise ValueError(f"期望 uint, 实际 0x{dtype:02x}")
def read_boolean(self, tag: int, required: bool = False, default: bool = False) -> bool:
def read_boolean(
self, tag: int, required: bool = False, default: bool = False
) -> bool:
return bool(self.read_int8(tag, required, 1 if default else 0))
def read_float(self, tag: int, required: bool = False, default: float = 0.0) -> float:
def read_float(
self, tag: int, required: bool = False, default: float = 0.0
) -> float:
found = self._find_tag(tag, required)
if not found:
return default
@@ -355,12 +363,14 @@ class TafInputStream:
if dtype == TafType.ZERO:
return 0.0
if dtype == TafType.FLOAT:
return struct.unpack('>f', self.buf.read(4))[0]
return struct.unpack(">f", self.buf.read(4))[0]
if dtype == TafType.DOUBLE:
return struct.unpack('>d', self.buf.read(8))[0]
return struct.unpack(">d", self.buf.read(8))[0]
return float(self._read_int_value(dtype))
def read_double(self, tag: int, required: bool = False, default: float = 0.0) -> float:
def read_double(
self, tag: int, required: bool = False, default: float = 0.0
) -> float:
return self.read_float(tag, required, default)
def read_string(self, tag: int, required: bool = False, default: str = "") -> str:
@@ -369,14 +379,16 @@ class TafInputStream:
return default
dtype = found[1]
if dtype == TafType.STRING1:
length = struct.unpack('B', self.buf.read(1))[0]
length = struct.unpack("B", self.buf.read(1))[0]
elif dtype == TafType.STRING4:
length = struct.unpack('>I', self.buf.read(4))[0]
length = struct.unpack(">I", self.buf.read(4))[0]
else:
raise ValueError(f"期望 string, 实际 0x{dtype:02x}")
return self.buf.read(length).decode('utf-8', errors='replace')
return self.buf.read(length).decode("utf-8", errors="replace")
def read_bytes(self, tag: int, required: bool = False, default: bytes = b'') -> bytes:
def read_bytes(
self, tag: int, required: bool = False, default: bytes = b""
) -> bytes:
found = self._find_tag(tag, required)
if not found:
return default
@@ -388,8 +400,9 @@ class TafInputStream:
return self.buf.read(length)
# ---- 复合类型 ----
def read_map(self, tag: int, required: bool = False,
key_reader=None, val_reader=None) -> Dict:
def read_map(
self, tag: int, required: bool = False, key_reader=None, val_reader=None
) -> Dict:
found = self._find_tag(tag, required)
if not found:
return {}
@@ -405,8 +418,7 @@ class TafInputStream:
result[k] = v
return result
def read_list(self, tag: int, required: bool = False,
item_reader=None) -> List:
def read_list(self, tag: int, required: bool = False, item_reader=None) -> List:
found = self._find_tag(tag, required)
if not found:
return []
@@ -439,13 +451,18 @@ class TafInputStream:
return reader(self, 0)
# 自动推断
if dtype == TafType.STRING1:
length = struct.unpack('B', self.buf.read(1))[0]
return self.buf.read(length).decode('utf-8', errors='replace')
length = struct.unpack("B", self.buf.read(1))[0]
return self.buf.read(length).decode("utf-8", errors="replace")
if dtype == TafType.STRING4:
length = struct.unpack('>I', self.buf.read(4))[0]
return self.buf.read(length).decode('utf-8', errors='replace')
if dtype in (TafType.ZERO, TafType.INT8, TafType.INT16,
TafType.INT32, TafType.INT64):
length = struct.unpack(">I", self.buf.read(4))[0]
return self.buf.read(length).decode("utf-8", errors="replace")
if dtype in (
TafType.ZERO,
TafType.INT8,
TafType.INT16,
TafType.INT32,
TafType.INT64,
):
return self._read_int_value(dtype)
if dtype == TafType.STRUCT_BEGIN:
# 未知 struct,跳过
@@ -459,6 +476,7 @@ class TafInputStream:
# 结构体基类
# ============================================================
class TafStruct:
"""TAF 结构体基类:子类实现 write_to / read_from"""
@@ -470,8 +488,7 @@ class TafStruct:
def to_dict(self) -> Dict[str, Any]:
"""调试用:转字典"""
return {k: v for k, v in self.__dict__.items()
if not k.startswith('_')}
return {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
def __repr__(self):
return f"{self.__class__.__name__}({self.to_dict()})"