kkprotocol 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
kkprotocol/__init__.py ADDED
@@ -0,0 +1,105 @@
1
+ # -*- coding: utf-8 -*-
2
+ """kkprotocol —— 可自定义数据帧的 TCP 流式解析器。
3
+
4
+ 快速上手::
5
+
6
+ from kkprotocol import AbstractFrameCodec, Field, LENGTH_FRAMING, crc16_modbus
7
+
8
+ class MyCodec(AbstractFrameCodec):
9
+ framing = LENGTH_FRAMING # 长度定界(默认)
10
+ device_field = "dev_id" # 可选:自动学习/校验设备号
11
+ def rules(self):
12
+ return [
13
+ Field.u8("header", fixed=0x55),
14
+ Field.u8("len"),
15
+ Field.raw("dev_id", 4),
16
+ Field.raw("data", "{len.val}-7"),
17
+ Field.checksum("crc", 2, group="{len}{dev_id}{data}"),
18
+ ]
19
+ def crc_imp(self, data):
20
+ return crc16_modbus(data)
21
+
22
+ codec = MyCodec() # 每个连接一个实例
23
+ for frame in codec.feed(chunk): # 任意切分的 TCP 数据块
24
+ handle(frame)
25
+
26
+ 帧首不是固定帧头而是设备号、且设备号首帧未知时,直接参考
27
+ :class:`HeadDeviceFrameCodec`(学到设备号后自动把它当同步字用)。
28
+ """
29
+
30
+ from .builder import BuildResult, FrameBuilder, Protocol
31
+ from .codec import AbstractFrameCodec, CodecStats
32
+ from .compiler import CompiledField, compile_rules
33
+ from .crc import crc16_ccitt, crc16_modbus, crc16_x25, crc8, sum8, xor8
34
+ from .errors import FrameBuildError, FrameCodecError, FrameRuleError
35
+ from .fields import Field
36
+ from .frame import FieldValue, Frame
37
+ from .pack import Data, pack
38
+ from .spec import AutoField, ChecksumRule, FrameSpec, LengthRule, Pdu, SeqPolicy
39
+ from .framing import (
40
+ AUTO_FRAMING,
41
+ DELIMITER_FRAMING,
42
+ LENGTH_FRAMING,
43
+ DelimiterFraming,
44
+ escape_bytes,
45
+ find_end_delimiter,
46
+ unescape_bytes,
47
+ wrap_frame,
48
+ )
49
+ from .length import LengthExpr
50
+ from .example_device import (
51
+ DeviceFrameCodec,
52
+ HeadDeviceFrameCodec,
53
+ PppFrameCodec,
54
+ build_device_frame,
55
+ build_head_device_frame,
56
+ build_ppp_frame,
57
+ )
58
+
59
+ __version__ = "0.1.0"
60
+
61
+ __all__ = [
62
+ "__version__",
63
+ "AbstractFrameCodec",
64
+ "AUTO_FRAMING",
65
+ "BuildResult",
66
+ "ChecksumRule",
67
+ "CodecStats",
68
+ "CompiledField",
69
+ "DELIMITER_FRAMING",
70
+ "DelimiterFraming",
71
+ "DeviceFrameCodec",
72
+ "Field",
73
+ "FieldValue",
74
+ "Frame",
75
+ "FrameBuildError",
76
+ "FrameBuilder",
77
+ "FrameCodecError",
78
+ "FrameRuleError",
79
+ "FrameSpec",
80
+ "HeadDeviceFrameCodec",
81
+ "LENGTH_FRAMING",
82
+ "LengthExpr",
83
+ "LengthRule",
84
+ "Pdu",
85
+ "PppFrameCodec",
86
+ "Protocol",
87
+ "SeqPolicy",
88
+ "AutoField",
89
+ "Data",
90
+ "pack",
91
+ "build_device_frame",
92
+ "build_head_device_frame",
93
+ "build_ppp_frame",
94
+ "compile_rules",
95
+ "crc16_ccitt",
96
+ "crc16_modbus",
97
+ "crc16_x25",
98
+ "crc8",
99
+ "escape_bytes",
100
+ "find_end_delimiter",
101
+ "sum8",
102
+ "unescape_bytes",
103
+ "wrap_frame",
104
+ "xor8",
105
+ ]