bytespec¶
Опишите данные Python-классом, сохраните их в байты и прочитайте обратно.
bytespec сам определяет, где заканчивается одно поле и начинается следующее.
from bytespec import ProtoModel
class User(ProtoModel):
name: str
active: bool
user = User(name="Anna", active=True)
encoded = user.encode()
decoded = User.decode(encoded)
print(decoded.name, decoded.active)
assert decoded == user
Anna True
Это новый User с теми же значениями. В байты можно записывать и списки,
и вложенные модели. Для существующего бинарного формата вы явно задаёте
размеры и порядок полей — без отдельного языка схем и генерации кода.
pip install bytespec
или
uv add bytespec
Python 3.10+. Начните с первой модели или выберите нужную задачу:
Первая модель
От Python-класса до разбора полученных байтов. Знание протоколов не нужно.
Зачем bytespec?
Один пакет в bytespec, struct и Construct. Когда подходит каждый инструмент.
Практические задачи
Прочитать TCP-пакет, разобрать несколько сообщений, настроить порядок байтов.
Справочник API
Сигнатуры, параметры и точные правила чтения и записи.