Skip to main content

A simple and easy to use library for reading and writing data streams.

Project description

datastream

PyPI - Version PyPI - License PyPI - Python Version Lint and test

Because construct was too complicated.

This is a simple and easy to use library that provides two classes. One class serializes data, and the other one deserializes. These classes behave like streams in which they have read, write, close among other stream related functions. The goal of this library is to be as simple as possible while providing flexibility.

To install the library, use the following:

python -m pip install --user -U pydatastreams

To import the library, use the following:

from datastream import SerializingStream, DeserializingStream, TwoWayStream, ByteOrder

Retrieving serialized data from a SerializingStream:

with SerializingStream() as stream:
    stream.write_int32(42)

    serialized = stream.bytes()

    # this also works
    serialized = bytes(stream)

Note: This library also contains a stream for both serializing and deserializing data. This stream is called TwoWayStream.

The stream classes support serializing/deserializing the standard data types:

Data Type Description Serializer Deserializer
int8_t Signed 8-bit number write_int8(value: int) read_int8() -> int
uint8_t Unsigned 8-bit number write_uint8(value: int) read_uint8() -> int
int16_t Signed 16-bit number write_int16(value: int) read_int16() -> int
uint16_t Unsigned 16-bit number write_uint16(value: int) read_uint16() -> int
int32_t Signed 32-bit number write_int32(value: int) read_int32() -> int
uint32_t Unsigned 32-bit number write_uint32(value: int) read_uint32() -> int
int64_t Signed 64-bit number write_int64(value: int) read_int64() -> int
uint64_t Unsigned 64-bit number write_uint64(value: int) read_uint64() -> int
float 32-bit floating point number write_float(value: float) read_float() -> float
double 64-bit floating point number write_double(value: float) read_double() -> float

Additionally, the stream classes also provide the following non-standard data types:

Data Type Description Serializer Deserializer
bool True/False value encoded as a single byte write_bool(value: bool) read_bool() -> bool
uleb128 Variable sized unsigned 128-bit number write_uleb128(value: int) read_uleb128() -> int
write_uleb128_safe(value: int, max_bytes: int = 16) read_uleb128_safe(max_bytes: int = 16) -> int
sleb128 Variable sized signed 128-bit number write_sleb128(value: int) read_sleb128() -> int
write_sleb128_safe(value: int, max_bytes: int = 16) read_sleb128_safe(max_bytes: int = 16) -> int

Finally, the stream classes also provide the following utility functions:

Function Description
set(buffer: bytes | typing.IO[bytes]) Sets the backing stream to the given buffer. DeserializingStream only.
read_until(terminator: bytes) -> bytes Reads len(terminator) bytes from the stream until terminator is found. DeserializingStream only.
read(size: int) -> bytes Reads up to size bytes from the backing stream.
write(data: bytes) Writes the given data to the backing stream.
size() -> int Returns the size of the backing stream.
seek(offset: int, whence: int = io.SEEK_SET) Change the stream position to the given offset.
tell() -> int Returns the current position of the stream.
close() Closes the backing stream.
remaining() -> int Returns the number of bytes remaining in the backing stream.
clone() -> typing.Self Returns a new instance of the same class with the same byte order and contents.
substream(start: int, end: int) -> typing.Self Returns a new instance of the same class, representing a substream of the current stream.
peek(size: int) -> bytes Returns the next size bytes from the stream without advancing the position.
seekpeek(offset: int, size: int) -> bytes Seeks to the specified offset in the data stream, reads the specified number of bytes, and then restores the original position.
search(data: bytes) -> int Searches for the given data in the backing stream.
rsearch(data: bytes) -> int Searches for the given data in the reverse order within the backing stream.
clear() Clears the backing stream by truncating it to 0 bytes and resetting the stream position to the beginning.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydatastreams-1.3.2.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

pydatastreams-1.3.2-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file pydatastreams-1.3.2.tar.gz.

File metadata

  • Download URL: pydatastreams-1.3.2.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.2

File hashes

Hashes for pydatastreams-1.3.2.tar.gz
Algorithm Hash digest
SHA256 abae910ccf743b8e91310852206f1c8e61c19fea3d8687adc8a4e1fda7f908a9
MD5 cda023af98591861d248a2e03b262cc5
BLAKE2b-256 6009b528eb424b1441634d31a0d669600d03b82c2e29dca91273901a7a88e272

See more details on using hashes here.

File details

Details for the file pydatastreams-1.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pydatastreams-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a63018e82e4c92dca35fae992c84ac52ac6a9a19ee1197fbd2ce4bab0fdce543
MD5 a9cfffd10dcd21b76839bc8b93f86682
BLAKE2b-256 972c40a7c5daa07620e1986fd4d1fe1794e46438ebd71e8b290210d614e97e57

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page