Releases: frequenz-floss/frequenz-channels-python
v1.2.0
Frequenz channels Release Notes
Upgrading
FileWatcher: The file polling mechanism is now forced by default. This provides reliable and consistent file monitoring on network file systems (e.g., CIFS). However, it may have a performance impact on local file systems or when monitoring a large number of files.- To disable file polling, set the
force_pollingparameter toFalse. - The
polling_intervalparameter defines the interval for polling changes. This is relevant only when polling is enabled and defaults to 1 second.
- To disable file polling, set the
New Features
Timer.reset()now supports setting the interval and will restart the timer with the new interval.
Bug Fixes
-
FileWatcher:- Fixed
ready()method to return False when an error occurs. Before this fix,select()(and other code usingready()) never detected theFileWatcherwas stopped and theselect()loop was continuously waking up to inform the receiver was ready. - Reports file events correctly on network file systems like CIFS.
- Fixed
-
Timer.stop()andTimer.reset()now immediately stop the timer if it is running. Before this fix, the timer would continue to run until the next interval.
What's Changed
- Timer: Add support for rearming timer with new interval by @Marenz in #321
- Enable polling in file watcher by @daniel-zullo-frequenz in #322
Full Changelog: v1.1.2...v1.2.0
v1.1.2
Frequenz channels Release Notes
Bug Fixes
FileWatcher: Fixedready()method to return False when an error occurs. Before this fix,select()(and other code usingready()) never detected theFileWatcherwas stopped and theselect()loop was continuously waking up to inform the receiver was ready.
What's Changed
- Clear release notes by @llucax in #314
- Bump the required group across 1 directory with 19 updates by @dependabot in #316
- Fix ready() method in FileWatcher by @daniel-zullo-frequenz in #318
- Update release notes for release 1.1.2 by @llucax in #319
Full Changelog: v1.1.1...v1.1.2
v1.1.1
v1.1.0
Frequenz channels Release Notes
Summary
In addition to the new LatestValueCache and the ability to filter messages on Receivers, this release introduces two "Experimental" features for providing interconnections between channels.
New Features
-
The
LatestValueCacheclass, which used to be internal to the Frequenz SDK, is now available through the channels package. -
Experimental:
RelaySender, which is aSenderthat forwards the messages sent to it, to multiple senders. -
Experimental:
Pipe, which provides a pipe between two channels, by connecting aReceiverto aSender. -
Receivers now have afiltermethod that applies a filter function on the messages on a receiver.
What's Changed
- Clear release notes by @llucax in #296
- Bump the required group with 10 updates by @dependabot in #299
- Bump markdown-svgbob from 202112.1022 to 202406.1023 by @dependabot in #305
- Bump the required group with 10 updates by @dependabot in #304
- Import the
LatestValueCacheimplementation from the Frequenz SDK by @shsms in #302 - Bump the required group with 2 updates by @dependabot in #309
- Bump brettcannon/check-for-changed-files from 1.2.0 to 1.2.1 by @dependabot in #308
- Bump docker/build-push-action from 5 to 6 by @dependabot in #307
- Add abstractions for sharing messages between channels by @shsms in #301
- Support filtering the messages on a receiver by @shsms in #303
- Prepare for release v1.1.0 by @shsms in #311
Full Changelog: v1.0.1...v1.1.0
v1.0.1
Frequenz channels Release Notes
Enhancements
- The API documentation now shows the type of symbol in the table of contents.
Bug Fixes
- Fix logger for the
Broadcastchannel (the log messages were missing the level, timestamp, etc.).
What's Changed
- Clear release notes by @llucax in #291
- Update project status classifier by @llucax in #292
- Bump the required group with 7 updates by @dependabot in #293
- Bump the required group with 4 updates by @dependabot in #294
- Fix the logger for the
Broadcastchannel by @llucax in #295 - Fix the CI and add the symbol type to the docs ToC by @llucax in #298
Full Changelog: v1.0.0...v1.0.1
v1.0.0
Frequenz channels Release Notes
Summary
This is the first stable release of the Frequenz channels library.
If you are upgrading from the previous 1.0.0 pre-releases, please look into the release notes for those versions to see the changes and upgrade instructions:
There were no changes between 1.0.0-rc.1 and this 1.0.0 final release.
If you are upgrading from v0.16.x, please keep reading these release notes.
Upgrading
-
The following symbols were moved to the top-level
frequenz.channelspackage:SelectedSelectErrorUnhandledSelectedErrorselectselected_from
-
utilThe entire
utilpackage was removed and its symbols were either moved to the top-level package or to their own public modules (as noted above). -
All exceptions that took
Anyas themessageargument now takestrinstead.If you were passing a non-
strvalue to an exception, you should convert it usingstr(value)before passing it to the exception. -
Anycast-
__init__: Themaxsizeargument was renamed tolimitand made keyword-only and a new keyword-onlyname(required) argument was added.You should instantiate using
Anycast(name=..., limit=...)(orAnycast(name=...)if the defaultlimitis enough) instead ofAnycast(...)orAnycast(maxsize=...). -
The following properties were changed:
limit: is now read-only.closed: is now namedis_closedand read-only.
-
new_senderandnew_receiver: They now return a baseSenderandReceiverclass (respectively) instead of a channel-specificSenderorReceiversubclass.This means users now don't have access to the internals to the channel-specific
SenderandReceiversubclasses.
-
-
Broadcast-
__init__: Thenameandresend_latestarguments were made keyword-only.You should instantiate using
Broadcast(name=name, resend_latest=resend_latest)(orBroadcast()if the defaults are enough) instead ofBroadcast(name)orBroadcast(name, resend_latest). -
The following properties were changed:
limit: is now read-only.closed: is now namedis_closedand read-only.
-
new_receiver: Themaxsizeargument was renamed tolimitand made keyword-only; thenameargument was also made keyword-only. If anameis not specified, it will be generated from theid()of the instance instead of a random UUID.You should use
.new_receiver(name=name, limit=limit)(or.new_receiver()if the defaults are enough) instead of.new_receiver(name)or.new_receiver(name, maxsize). -
new_senderandnew_receivernow return a baseSenderandReceiverclass (respectively) instead of a channel-specificSenderorReceiversubclass.This means users now don't have access to the internals to the channel-specific
SenderandReceiversubclasses.
-
-
Event-
Moved from
frequenz.channels.utiltofrequenz.channels.event. -
__init__: Thenameargument was made keyword-only. The default was changed to a more readable version ofid(self).You should instantiate using
Event(name=...)instead ofEvent(...).
-
-
FileWatcher-
Moved from
frequenz.channels.utiltofrequenz.channels.file_watcher. -
Support classes are no longer nested inside
FileWatcher. They are now top-level classes within the newfrequenz.channels.file_watchermodule (e.g.,frequenz.channels.util.FileWatcher.EventType->frequenz.channels.file_watcher.EventType,frequenz.channels.util.FileWatcher.Event->frequenz.channels.file_watcher.Event).
-
-
Receiver- The
map()function now takes a positional-only argument, if you were usingreceiver.map(call=fun)you should replace it withreceiver.map(func).
- The
-
SelectErrornow inherits fromchannels.Errorinstead ofBaseException, so you should be able to catch it withexcept Exception:orexcept channels.Error:. -
Selected- The
valueproperty was renamed tomessage. was_stoppedis now a property, you need to replaceselected.was_stopped()withselected.was_stopped.
- The
-
Sender- The
sendmethod now takes a positional-only argument, if you were usingsender.send(msg=message)you should replace it withsender.send(message).
- The
-
Timerand support classes- Moved from
frequenz.channels.utiltofrequenz.channels.timer.
- Moved from
Removals
-
Anycast- The following public properties were removed (made private):
deque,send_cv,recv_cv.
- The following public properties were removed (made private):
-
BidirectionalThis channel was removed as it is not recommended practice and was a niche use case. If you need to use it, you can set up two channels or copy the
Bidirectionalclass from the previous version to your project. -
Broadcast- The following public properties were removed (made private):
recv_cv,receivers. new_peekable()was removed becausePeekablewas removed.
- The following public properties were removed (made private):
-
MergeReplaced by the new
merge()function. When replacingMergewithmerge()please keep in mind that this new function will raise aValueErrorif no receivers are passed to it.Please note that the old
Mergeclass is still also available but it was renamed toMergerto avoid confusion with the newmerge()function, but it is only present for typing reasons and should not be used directly. -
MergeNamedThis class was redundant, use either the new
merge()function orselect()instead. -
PeekableThis class was removed because it was merely a shortcut to a receiver that caches the last message received. It did not fit the channel abstraction well and was infrequently used.
You can replace it with a task that receives and retains the last message.
-
Receiver.into_peekable()was removed becausePeekablewas removed. -
ReceiverInvalidatedErrorwas removed because it was only used when converting to aPeekableandPeekablewas removed. -
SelectErrorGroupwas removed, a Python built-inBaseExceptionGroupis raised instead in case of unexpected errors while finalizing aselect()loop, which will be automatically converted to a simpleExceptionGroupwhen no exception in the groups is aBaseException.
-
Timer:-
periodic()andtimeout(): The names proved to be too confusing, please useTimer()and pass a missing ticks policy explicitly instead. In general you can update your code by doing:Timer.periodic(interval)/Timer.periodic(interval, skip_missed_ticks=True)->Timer(interval, TriggerAllMissed())Timer.periodic(interval, skip_missed_ticks=False)->Timer(interval, SkipMissedAndResync())Timer.timeout(interval)->Timer(interval, SkipMissedAndDrift())
-
New Features
-
A new
Broadcast.resend_latestread-write property was added to get/set whether the latest message should be resent to new receivers. -
Timer()andTimer.reset()now take an optionalstart_delayoption to make the timer start after some delay.This can be useful, for example, if the timer needs to be aligned to a particular time. The alternative to this would be to
sleep()for the time needed to align the timer, but if thesleep()call gets delayed because the event loop is busy, then a re-alignment is needed and this could go on for a while. The only way to guarantee a certain alignment (with a reasonable precision) is to delay the timer start.
Improvements
-
The arm64 architecture is now officially supported.
-
A new User's Guide was added to the documentation and the documentation was greately improved in general.
-
A new
merge()function was added to replaceMerge. -
A warning will be logged by
Anycastchannels if senders are blocked because the channel buffer is full. -
Receiver,merge/Merger,Errorand its derived classes now use a covariant generic type, which allows the generic type to be broader than the actual type. -
Sendernow uses a contravariant generic type, which allows the generic type to be narrower than the required type. -
ChannelErroris now generic, so when accessing thechannelattribute, the type of the channel is preserved. -
Most classes have now a better implementation of
__str__and__repr__.
Bug Fixes
Timer: Fix bug that was causing calls toreset()to not reset the timer, if the timer was already being awaited.
What's Changed
- Migrate to use repo-config by @llucax in #124
- Bump pylint from 2.17.3 to 2.17.4 by @dependabot in #125
- Bump pytest-mock from 3.10.0 to 3.11.1 by @dependabot in #126
- Bump mkdocs-material from 9.1.17 to 9.1.18 by @dependabot in #128
- Bump pytest from 7.3.1 to 7.4.0 by @dependabot in #127
- Bump mypy from 1.2.0 to 1.4.1 by @dependabot in #129
- Bump hypothesis from 6.80.0 to 6.80.1 by @dependabot in #130
- Bump actions/labeler from 4.2.0 to 4.3.0 by @dependabot in #131
- Bump black from 23.3.0 to 23.7.0 by @dependabot in #132
- Bump hypothesis from 6.80.1 to 6.81.1 by @dependabot in #133
- Bump pytest-asyncio from 0.21.0 to 0.21.1 by @dependabot in https:...
v1.0.0-rc.1
Frequenz channels Release Notes
Summary
This is the first release candidate for version 1.0. It includes few new features and a lot of cleanups and API improvements and polishing. Because of this, there are a lot of breaking changes too, but they should be easy to fix, as they ae mostly renames and reorganizations.
We hope this is the final pre-release before the final 1.0 release, and we don't expect to introduce any further breaking changes. Because of this we encourage you to test it and report any issues you find. You can also use a version constraint like >= 1.0.0-rc.1, < 2.0.0 as the final version should be compatible.
Upgrading
-
Anycast-
__init__: Themaxsizeargument was renamed tolimitand made keyword-only and a new keyword-onlynameargument was added.You should instantiate using
Anycast(name=..., limit=...)(orAnycast(name=...)if the defaultlimitis enough) instead ofAnycast(...)orAnycast(maxsize=...). -
new_senderandnew_receiver: They now return a baseSenderandReceiverclass (respectively) instead of a channel-specificSenderorReceiversubclass.This means users now don't have access to the internals to the channel-specific
SenderandReceiversubclasses.
-
-
Broadcast-
__init__: Thenameargument was made optional and keyword-only;resend_latestwas also made keyword-only. If anameis not specified, it will be generated from theid()of the instance.You should instantiate using
Broadcast(name=name, resend_latest=resend_latest)(orBroadcast()if the defaults are enough) instead ofBroadcast(name)orBroadcast(name, resend_latest). -
new_receiver: Themaxsizeargument was renamed tolimitand made keyword-only; thenameargument was also made keyword-only. If anameis not specified, it will be generated from theid()of the instance instead of a random UUID.You should use
.new_receiver(name=name, limit=limit)(or.new_receiver()if the defaults are enough) instead of.new_receiver(name)or.new_receiver(name, maxsize). -
new_senderandnew_receivernow return a baseSenderandReceiverclass (respectively) instead of a channel-specificSenderorReceiversubclass.This means users now don't have access to the internals to the channel-specific
SenderandReceiversubclasses.
-
-
Event-
__init__: Thenameargument was made keyword-only. The default was changed to a more readable version ofid(self).You should instantiate using
Event(name=...)instead ofEvent(...). -
Moved from
frequenz.channels.utiltofrequenz.channels.event.
-
-
FileWatcher-
Moved from
frequenz.channels.utiltofrequenz.channels.file_watcher. -
Support classes are no longer nested inside
FileWatcher. They are now top-level classes within the newfrequenz.channels.file_watchermodule (e.g.,frequenz.channels.util.FileWatcher.EventType->frequenz.channels.file_watcher.EventType,frequenz.channels.util.FileWatcher.Event->frequenz.channels.file_watcher.Event).
-
-
Receiver- The
map()function now takes a positional-only argument, if you were usingreceiver.map(call=fun)you should replace it withreceiver.map(func).
- The
-
SelectErrornow inherits fromchannels.Errorinstead ofBaseException, so you should be able to catch it withexcept Exception:orexcept channels.Error:. -
Selected- The
valueproperty was renamed tomessage. was_stoppedis now a property, you need to replaceselected.was_stopped()withselected.was_stopped.
- The
-
Sender- The
sendmethod now takes a positional-only argument, if you were usingsender.send(msg=message)you should replace it withsender.send(message).
- The
-
Timerand support classes- Moved from
frequenz.channels.utiltofrequenz.channels.timer.
- Moved from
-
All exceptions that took
Anyas themessageargument now takestrinstead.If you were passing a non-
strvalue to an exception, you should convert it usingstr(value)before passing it to the exception. -
The following symbols were moved to the top-level
frequenz.channelspackage:SelectedSelectErrorUnhandledSelectedErrorselectselected_from
Removals
-
BidirectionalThis channel was removed as it is not recommended practice and was a niche use case. If you need to use it, you can set up two channels or copy the
Bidirectionalclass from the previous version to your project. -
MergeReplaced by the new
merge()function. When replacingMergewithmerge()please keep in mind that this new function will raise aValueErrorif no receivers are passed to it.Please note that the old
Mergeclass is still also available but it was renamed toMergerto avoid confusion with the newmerge()function, but it is only present for typing reasons and should not be used directly. -
MergeNamedThis class was redundant, use either the new
merge()function orselect()instead. -
PeekableThis class was removed because it was merely a shortcut to a receiver that caches the last message received. It did not fit the channel abstraction well and was infrequently used.
You can replace it with a task that receives and retains the last message.
-
Broadcast.new_peekable()This was removed alongside
Peekable. -
Receiver.into_peekable()This was removed alongside
Peekable. -
ReceiverInvalidatedErrorThis was removed alongside
Peekable(it was only raised when using aReceiverthat was converted into aPeekable). -
SelectErrorGroupwas removed, a Python built-inBaseExceptionGroupis raised instead in case of unexpected errors while finalizing aselect()loop, which will be automatically converted to a simpleExceptionGroupwhen no exception in the groups is aBaseException.
-
Timer:-
periodic()andtimeout(): The names proved to be too confusing, please useTimer()and pass a missing ticks policy explicitly instead. In general you can update your code by doing:Timer.periodic(interval)/Timer.periodic(interval, skip_missed_ticks=True)->Timer(interval, TriggerAllMissed())Timer.periodic(interval, skip_missed_ticks=False)->Timer(interval, SkipMissedAndResync())Timer.timeout(interval)->Timer(interval, SkipMissedAndDrift())
-
-
utilThe entire
utilpackage was removed and its symbols were either moved to the top-level package or to their own public modules (as noted above).
New Features
-
A new User's Guide was added to the documentation and the documentation was greately improved in general.
-
A new
merge()function was added to replaceMerge. -
Anycast-
The following new read-only properties were added:
name: The name of the channel.limit: The maximum number of messages that can be sent to the channel.is_closed: Whether the channel is closed.
-
A more useful implementation of
__str__ andrepr` were added for the channel and its senders and receivers. -
A warning will be logged if senders are blocked because the channel buffer is full.
-
-
Bidirectional-
The following new read-only properties were added:
name: The name of the channel (read-only).is_closed: Whether the channel is closed (read-only).
-
A more useful implementation of
__str__ andrepr` were added for the channel and the client and service handles.
-
-
Broadcast-
The following new read-only properties were added:
name: The name of the channel.is_closed: Whether the channel is closed.
-
A more useful implementation of
__str__ andrepr` were added for the channel and the client and service handles.
-
-
FileWatcher- A more useful implementation of
__str__ andrepr` were added.
- A more useful implementation of
-
Peekable- A more useful implementation of
__str__ andrepr` were added.
- A more useful implementation of
-
Receivermap(): The returned map object now has a more useful implementation of__str__ andrepr`.
Improvements
-
Receiver,merge/Merger,Errorand its derived classes now use a covariant generic type, which allows the generic type to be broader than the actual type. -
Sendernow uses a contravariant generic type, which allows the generic type to be narrower than the required type. -
ChannelErroris now generic, so when accessing thechannelattribute, the type of the channel is preserved. -
The generated documentation / website was greatly improved, both in content and looks.
Bug Fixes
Timer: Fix bug that was causing calls toreset()to not reset the timer, if the timer was already being awaited.
What's Changed
- Update to repo-config v0.7.2 by @llucax in #230
- Bump the optional group with 5 updates by @dependabot in #229
- Clean up and improve the code and public interface by @llucax in #231
- Revamp modules structure by @llucax in #235
- Replace
MergeandMergeNamedwithmerge()by @llucax in #238 - Clear release notes by @llucax in #240
- Fix timer
reset()while it is being waited on by @llucax in #241 - Fix typo in comment by @llucax in #247
- Make
Mergepublic again and rename it toMergerby @llucax in h...
v0.16.1
Frequenz Channels Release Notes
Bug Fixes
Timer: Fix bug that was causing calls toreset()to not reset the timer, if the timer was already being awaited.
What's Changed
Full Changelog: v0.16.0...v0.16.1
v1.0.0-beta.2
Frequenz channels Release Notes
Summary
This release only have a CI fix that prevented v1.0.0-beta.1 to be automatically published. There are no user-visible changes.
What's Changed
Full Changelog: v1.0.0-beta.1...v1.0.0-beta.2
v1.0.0-beta.1
Frequenz channels Release Notes
Summary
The Timer now can be started with a delay and some channel attributes were made private.
Upgrading
-
Anycast- The following public properties were removed (made private):
limit,closed,deque,send_cv,recv_cv.
- The following public properties were removed (made private):
-
Broadcast- The following public properties were removed (made private):
name,closed,recv_cv,receivers.
- The following public properties were removed (made private):
New Features
-
The arm64 architecture is now officially supported.
-
The documentation was improved to:
- Show signatures with types.
- Show the inherited members.
- Documentation for pre-releases are now published.
- Show the full tag name as the documentation version.
- All development branches now have their documentation published (there is no
nextversion anymore). - Fix the order of the documentation versions.
-
Broadcast- Added a
resend_latestread-write property to get/set whether the latest message should be resent to new receivers.
- Added a
-
Timer-
Timer(),Timer.timeout(),Timer.periodic()andTimer.reset()now take an optionalstart_delayoption to make the timer start after some delay.This can be useful, for example, if the timer needs to be aligned to a particular time. The alternative to this would be to
sleep()for the time needed to align the timer, but if thesleep()call gets delayed because the event loop is busy, then a re-alignment is needed and this could go on for a while. The only way to guarantee a certain alignment (with a reasonable precision) is to delay the timer start.
-
What's Changed
- Migrate to use repo-config by @llucax in #124
- Bump pylint from 2.17.3 to 2.17.4 by @dependabot in #125
- Bump pytest-mock from 3.10.0 to 3.11.1 by @dependabot in #126
- Bump mkdocs-material from 9.1.17 to 9.1.18 by @dependabot in #128
- Bump pytest from 7.3.1 to 7.4.0 by @dependabot in #127
- Bump mypy from 1.2.0 to 1.4.1 by @dependabot in #129
- Bump hypothesis from 6.80.0 to 6.80.1 by @dependabot in #130
- Bump actions/labeler from 4.2.0 to 4.3.0 by @dependabot in #131
- Bump black from 23.3.0 to 23.7.0 by @dependabot in #132
- Bump hypothesis from 6.80.1 to 6.81.1 by @dependabot in #133
- Bump pytest-asyncio from 0.21.0 to 0.21.1 by @dependabot in #135
- Improve documentation by @llucax in #136
- Bump sybil from 5.0.2 to 5.0.3 by @dependabot in #137
- Bump hypothesis from 6.81.1 to 6.81.2 by @dependabot in #138
- Bump mkdocs-material from 9.1.18 to 9.1.19 by @dependabot in #140
- Fix typo recever -> receiver by @Marenz in #139
- Bump hypothesis from 6.81.2 to 6.82.0 by @dependabot in #141
- Bump pylint from 2.17.4 to 2.17.5 by @dependabot in #143
- Bump mkdocs-material from 9.1.19 to 9.1.21 by @dependabot in #144
- Update to repo-config 0.4.0 by @Marenz in #142
- Bump hypothesis from 6.82.0 to 6.82.2 by @dependabot in #147
- Add optional start delay to
Timerby @llucax in #145 - Bump hypothesis from 6.82.2 to 6.82.3 by @dependabot in #148
- Bump mypy from 1.4.1 to 1.5.0 by @dependabot in #149
- Bump hypothesis from 6.82.3 to 6.82.4 by @dependabot in #150
- Bump mypy from 1.5.0 to 1.5.1 by @dependabot in #152
- Bump hypothesis from 6.82.4 to 6.82.5 by @dependabot in #155
- Bump hypothesis from 6.82.5 to 6.82.6 by @dependabot in #157
- Bump mkdocs-material from 9.1.21 to 9.2.1 by @dependabot in #158
- Bump mkdocs-material from 9.2.1 to 9.2.3 by @dependabot in #159
- Update watchfiles requirement from <0.20.0,>=0.15.0 to >=0.15.0,<0.21.0 by @dependabot in #160
- Bump mkdocs-material from 9.2.3 to 9.2.5 by @dependabot in #161
- Bump hypothesis from 6.82.6 to 6.84.0 by @dependabot in #171
- Bump mkdocstrings[python] from 0.22.0 to 0.23.0 by @dependabot in #167
- Bump mkdocs-material from 9.2.5 to 9.2.8 by @dependabot in #172
- Bump hypothesis from 6.84.0 to 6.84.1 by @dependabot in #173
- Bump mkdocs-section-index from 0.3.5 to 0.3.6 by @dependabot in #174
- Bump actions/checkout from 3 to 4 by @dependabot in #170
- Bump pytest from 7.4.0 to 7.4.1 by @dependabot in #169
- Bump hypothesis from 6.84.1 to 6.84.2 by @dependabot in #175
- Replace obsolete types by @daniel-zullo-frequenz in #176
- Upgrade to repo-config v0.5.2 by @llucax in #153
- Bump mkdocs-literate-nav from 0.6.0 to 0.6.1 by @dependabot in #179
- Bump pytest from 7.4.1 to 7.4.2 by @dependabot in #178
- Bump mkdocs-material from 9.2.8 to 9.3.1 by @dependabot in #183
- Bump hypothesis from 6.84.2 to 6.84.3 by @dependabot in #181
- Bump black from 23.7.0 to 23.9.1 by @dependabot in #180
- Bump mkdocs-section-index from 0.3.6 to 0.3.7 by @dependabot in #184
- docs: Improve README and intro by @llucax in #189
- Document class and module attributes by @daniel-zullo-frequenz in #185
- Bump hypothesis from 6.84.3 to 6.86.2 by @dependabot in #192
- Bump mkdocs-material from 9.3.1 to 9.3.2 by @dependabot in #191
- Bump hypothesis from 6.86.2 to 6.87.1 by @dependabot in #200
- Bump pylint from 2.17.5 to 2.17.7 by @dependabot in #201
- Bump hypothesis from 6.87.1 to 6.87.3 by @dependabot in #206
- Make internal variable names private by @shsms in #213
- Bump hypothesis from 6.87.3 to 6.88.0 by @dependabot in #210
- Update watchfiles requirement from <0.21.0,>=0.15.0 to >=0.15.0,<0.22.0 by @dependabot in #211
- Bump mypy from 1.5.1 to 1.6.0 by @dependabot in #208
- Bump mypy from 1.6.0 to 1.6.1 by @dependabot in #216
- Bump pytest from 7.4.2 to 7.4.3 by @dependabot in #220
- Bump hypothesis from 6.88.0 to 6.88.1 by @dependabot in #214
- Bump pytest-mock from 3.11.1 to 3.12.0 by @dependabot in #217
- Bump mkdocs-section-index from 0.3.7 to 0.3.8 by @dependabot in #196
- Bump black from 23.9.1 to 23.10.1 by @dependabot in #219
- Make
resend_latesta public attribute forBroadcastchannels by @shsms in #221 - ...