Python Stream#
pw_stream: A foundational interface for streaming data
The pw_stream
Python package provides utilities to read and write serial
interfaces.
pw_stream.stream_readers#
Serial reader utilities.
- class pw_stream.stream_readers.CancellableReader(base_obj: Any, *read_args, **read_kwargs)#
Wraps communication interfaces used for reading incoming data with the guarantee that the read request can be cancelled. Derived classes must implement the
cancel_read()
method.Cancelling a read invalidates ongoing and future reads. The
cancel_read()
method can only be called once.- __init__(base_obj: Any, *read_args, **read_kwargs)#
- Parameters:
base_obj – Object that offers a
read()
method with optional args and kwargs.read_args – Arguments for
base_obj.read()
function.read_kwargs – Keyword arguments for
base_obj.read()
function.
- abstract cancel_read() None #
Cancels a blocking read request and all future reads.
Can only be called once.
- read() bytes #
Reads bytes that contain parts of or full RPC packets.
- class pw_stream.stream_readers.DataReaderAndExecutor(
- reader: CancellableReader,
- on_read_error: Callable[[Exception], None],
- data_processor: Callable[[bytes], Iterable[FrameTypeT]],
- frame_handler: Callable[[FrameTypeT], None],
- handler_threads: int | None = 1,
Reads incoming bytes, data processor that delegates frame handling.
Executing callbacks in a
ThreadPoolExecutor
decouples reading the input stream from handling the data. That way, if a handler function takes a long time or crashes, this reading thread is not interrupted.- __init__(
- reader: CancellableReader,
- on_read_error: Callable[[Exception], None],
- data_processor: Callable[[bytes], Iterable[FrameTypeT]],
- frame_handler: Callable[[FrameTypeT], None],
- handler_threads: int | None = 1,
Creates the data reader and frame delegator.
- Parameters:
reader – Reads incoming bytes from the given transport, blocks until data is available or an exception is raised. Otherwise the reader will exit.
on_read_error – Called when there is an error reading incoming bytes.
data_processor – Processes read bytes and returns a frame-like object that the frame_handler can process.
frame_handler – Handles a received frame.
handler_threads – The number of threads in the executor pool.
- start() None #
Starts the reading process.
- stop() None #
Stops the reading process.
This requests that the reading process stop and waits for the background thread to exit.
- class pw_stream.stream_readers.SelectableReader(base_obj: Any, *read_args, **read_kwargs)#
Wraps interfaces that work with
select()
to signal when data is received.These interfaces must provide a
fileno()
method. WINDOWS ONLY: Only sockets that originate from WinSock can be wrapped. File objects are not acceptable.- __init__(base_obj: Any, *read_args, **read_kwargs)#
- Parameters:
base_obj – Object that offers a
read()
method with optional args and kwargs.read_args – Arguments for
base_obj.read()
function.read_kwargs – Keyword arguments for
base_obj.read()
function.
- cancel_read() None #
Cancels a blocking read request and all future reads.
Can only be called once.
- read() bytes #
Reads bytes that contain parts of or full RPC packets.
- class pw_stream.stream_readers.SerialReader(base_obj: Serial, *read_args, **read_kwargs)#
Wraps a
serial.Serial
object.- __init__(base_obj: Serial, *read_args, **read_kwargs)#
- Parameters:
base_obj – Object that offers a
read()
method with optional args and kwargs.read_args – Arguments for
base_obj.read()
function.read_kwargs – Keyword arguments for
base_obj.read()
function.
- cancel_read() None #
Cancels a blocking read request and all future reads.
Can only be called once.
- class pw_stream.stream_readers.SocketReader(base_obj: socket, *read_args, **read_kwargs)#
Wraps a socket
recv()
function.- __init__(base_obj: socket, *read_args, **read_kwargs)#
- Parameters:
base_obj – Object that offers a
read()
method with optional args and kwargs.read_args – Arguments for
base_obj.read()
function.read_kwargs – Keyword arguments for
base_obj.read()
function.
- read() bytes #
Reads bytes that contain parts of or full RPC packets.