0.1.0a14
Pre-release
Pre-release
Immutable
release. Only release title and notes can be modified.
Added
Bpodpublishes live trial events over the PUB/SUB channel as a tagged union of
typed messages.RemoteBpodaccepts anevent_callbackthat receives each live trial-event
message.ServiceHost.get_metadatafor accessing per-request connection metadata from within
a request handler.ServiceHost.publishfor broadcasting events over the PUB/SUB channel;
ServiceClientdecodes them per its newevent_typeparameter.ServiceHostremembers the TCP ports last bound for a caller-supplieduuid
(stored in the user state directory) and reuses them on restart; explicit
port_rep/port_pubarguments take precedence.
ServiceHost.has_subscribers: the host tracks PUB/SUB subscriptions and
publishdrops messages before encoding while nobody is listening.ServiceClient.requestaccepts an optionaltimeout; the client recovers cleanly
after a timed-out request.
Changed
- Add UTC timezone to trial DataFrame timestamps.
ServiceClientadopts the host's serialization format during the
handshake, replacing the per-request trial-and-error fallback.- the WELCOME handshake carries the PUB channel's TCP port instead of full TCP
addresses. - errors raised by
bpod_core.ipcare now uniformlyServiceErrorsubclasses - remote method calls (
BpodRequestCall/BpodRequestData) are validated against
an explicit allowlist instead of dispatching to arbitrary attributes.
Fixed
ServiceClientno longer blocks indefinitely when the host dies mid-request.- exceptions with non-serializable attributes no longer break error replies from
ServiceHost. - resolved several shutdown races between
close()and the event threads /publish(). ServiceIterator.close()now terminates an iteration blocked in__next__
(e.g., withtimeout=None) instead of leaving the consumer waiting forever.
Full Changelog: 0.1.0a13...0.1.0a14