| last_commit_released | b286407307ace6670f6f0072a8438bc912165d43 | |||
|---|---|---|---|---|
| name | reactivex | |||
| updaters |
|
All notable changes to this project will be documented in this file. Starting with version 5.0.0-rc.1, entries are generated automatically by EasyBuild.ShipIt from conventional-commit messages.
PyPI uses PEP 440 (5.0.0rc1), while ShipIt records SemVer (5.0.0-rc.1) in
this file; the release script normalizes between them.
- (operators) Add tap as an alias for do_action (#804) (95c54ac3)
- (gtk) Call gi.require_version before importing gi.repository (#749) (2b9e3f33)
- (operators) Accept concurrent.futures.Future wherever futures are accepted (#806) (19da6ac1)
- (scheduler) Use wall clock time for now() in event loop schedulers (#809) (361951c7)
- (scripts) Keep uv.lock in sync and scope the version sed to [project] (#802) (10ccc0a3)
- (operators) Reset retry budget per subscription to fix retry+repeat (#765) (c3f19d5e)
- Typing: Added
ActionandStartableFactorytoreactivex.typing.__all__, making them part of the explicit public API surface. - Docs: Added missing docstring to
on_error_resume_nextoperator. - Operators: Fixed scheduler forwarding in
pairwise,to_marbles, anddelay_with_mapper(subscription-delay path). These operators now pass theschedulerargument through tosource.subscribe(...)and, in the case ofdelay_with_mapper, to the subscription-delay observable, consistent with all other pipeable operators. Closes #480 (partial — the operators listed in the issue that were not yet fixed). - CI: Skip
tests/test_scheduler/test_mainloop/test_tkinterscheduler.pyon PyPy (all platforms). The module creates a Tk root at import time; PyPy's_tkinterfinalizer callsthreading.notify_allduring interpreter shutdown and aborts the xdist worker, failing whichever unrelated test was running. Previously guarded only on macOS+PyPy. - Fix:
reactivex.timer(duetime, period)now correctly resets the initial delay on each resubscription (e.g. viarepeat()). Previouslynonlocal duetimein the subscribe closure mutated the shared outer variable so subsequent subscriptions would use the stale absolute time computed by the first subscription, causing the timer to fire immediately instead of waiting forduetime. Fixes #697. - Testing: Fixed pyright strict-mode type errors in
tests/test_subject/(added type annotations to closure containers, callback function parameters, and narrowedNonechecks). Removedtests/test_subject/from the pyright exclude list. - Testing: Fixed ruff lint issues in
tests/test_scheduler/(import ordering, f-string upgrades,objectbase class removal) and removed it from the ruff exclude list.tests/test_subject/also removed from the ruff exclude list as it already passed all checks. - Testing: Fixed pyright (standard-mode) type errors in
tests/test_scheduler/: corrected@classmethodoverrides ofVirtualTimeScheduler.add, fixed[None]-typed list variables, updated optional-import suppression comments (# type: ignore[import-untyped]), narrowed callback parameter types, and alignedScheduledItemTestSchedulermethod signatures with theSchedulerbase class. - CI: Standardised
actions/setup-pythonto@v5across all workflow jobs.
- Documentation header formatting fixes.
- Fluent method chaining — operators are now available as methods on
Observablein addition to the existingpipe()style. Both work interchangeably and can be mixed freely. Implemented via eleven category mixins (transformation, filtering, combination, error handling, windowing/buffering, multicasting, etc.). Zero breaking changes from 4.x — all existingpipe()-based code continues to work. (#743) - Migrated project tooling from Poetry to
uv. - Replaced Black + isort with Ruff for formatting and linting.
- Dropped Python 3.8; added support for Python 3.11, 3.12, 3.13.
- Added
schedulerparameter torun()for consistent scheduling control. - Fixed
subscribe_onnot forwarding scheduler to the source. Thanks to @MainRo - Minor internal: renamed
ReplaySubject.windowtoReplaySubject._windowto free thewindowname for the new method.
- Renamed the distribution from
rxtoreactivex(pip install reactivex). - Flattened the package:
Observableand operators now live at the top level (rx.coregone). - Raised minimum Python to 3.7.
- Full pyright-strict type coverage;
disallow_untyped_defsenforced. - Migrated from
setup.pyto Poetry. - Improved scheduler type annotations and asyncio thread-safety.
- Internal operators renamed with a leading underscore (
_map,_filter, etc.). - Marble-diagram documentation added for every operator.
- Test scheduler and marble-testing improvements. Thanks to @MainRo
- Replaced method chaining with a pipe-based functional API as the recommended style.
- Dropped Python 2 support; Python 3.6+ only.
- Renamed the
concurrencypackage toscheduler; split mainloop and eventloop schedulers into their own modules. - Simplified variadic operator signatures (
amb,combine_latest,concat,merge,on_error_resume_next,catch,zip) — the leadingIterableargument is gone. - Removed
result_mapperfromjoin,group_join,zip,generate. - Added comprehensive type hints and a
py.typedmarker (PEP 561). - Collapsed
AnonymousObservableintoObservable. - Renamed
catch_exceptiontocatch. - Added
TrampolineSchedulerand priority-queue scheduler improvements. - Replaced the blocking observable with a single
run()function.
- Extension methods and extension class methods have been removed. This makes it much easier for editors and IDEs to validate the code and perform code completion.
- Python 3.6+ only with type hints
- Google docstring style.
- Refactored virtual time scheduling. Fixes #95. Thanks to @djarb
- Fixed Visual Studio project files and moved to ide folder.
- Remove timer operations from base
SchedulerBaseclass. - Scheduler.now is now a property to align with Rx.NET
- Bugfix for periodic scheduling. Fixes #91. Thanks to @frederikaalund
- Demonize all threads in
TimeoutScheduler. Fixes #90 - Enable subscription with duck-typed observer.
- Added new core module. Observable, Observer, Scheduler and Disposable are now ABCs.
- Synced backpressure with RxJS to fix #87
- Do not overwrite scheduler keyword arg. Fixes #85. Thanks to @rjayatilleka
- Added async iterator example.
- Added support for awaiting observables
- Fixed issue #83 with
int + datetime.datetimein timer.py. Thanks to @AlexMost
- Fixes for TwistedScheduler raising AlreadyCalled error #78. Thanks to @mchen402 and @jcwilson.
- Use CurrentThreadScheduler as default for just/return_value. Fixes #76
- Added wxscheduler.py for use with wxPython applications thanks to @bosonogi
- Added eventletscheduler.py for use with Eventlet thanks to @jalandip
- Protect generators that are not thread safe. Fixes #71
- Threads are now daemonic by default. Thus they will exit if parent thread exits which should probably be what most people want.
- Fix for recursive scheduling, thanks to @smeder
- Fix for NewThreadScheduler. Now uses EventLoopScheduler to make sure scheduled actions by scheduled actions happens on the same thread.
- Uses shields.io to uniformize and fix the badges, thanks to @DavidJFelix
- Fix optional parameter in
delay_subscription. Thanks to @angelsanz. - Simplified
adapt_callinutil.pywhich makes higher order functions accept more forms of callables. - Fix for Python 2.7 in
timeflies_qt.py.
- Added Qt mainloop scheduler thanks to @jdreaver.
- Bugfix, wse
threading.RLockinstead ofthreading.LocksinceBehaviorSubjectmay share lock with "child" operator at subscribe time. Fixes #50
- Fix to preserve the original error message for exceptions #44, thanks to @hangtwenty
- Fixed bug in
combine_latest(). Fixes #48. - Added
to_marbles()andfrom_marbles(). Available from modulerx.testing.marbles. - Added Getting Started IPython Notebook.
- Added
share()as alias forpublish().ref_count(). - Added error handling example at https://github.com/ReactiveX/RxPY/blob/master/examples/errors/failing.py
- Removed impl. of
merge_observableand made it an alias ofmerge_all - Bugfix for #40. Every subscription needs it's own iterator in
from_(). Thanks to @hangtwenty. - Bugfix in
from_string()debug method. - Added
TkInterScheduler.schedule_periodic()thanks to @pillmuncher. #39 - Bugfix for #35. Refactored
zip_arrayto usezipinstead. - AsyncIOScheduler now works with Python-2.7 and Trollius. Fixes #37 thanks to @hangtwenty.
- Added
with_latest_fromextension method #34. Thanks to @pillmuncher.
- Transducers via
Observable.transduce() adapt_callno longer requires the inspect module- Support callable instance, instance method, and class method for
adapt_callthanks to @succhiello. - Added example using concurrent futures for compute-intensive task parallelization, thanks to @38elements.
- Got chess example working again under Python 2.7 thansks to @enobayram.
- Added example for async generator.
- Many PEP 8 fixes.
- Fixed bug in ScheduledDisposable#dispose. Only dispose if not disposed
- Fixed typo in
Pattern#_and. Should bePattern#and_ - Fixed bug. Replaced push with append in controlledsubject.py
- Refeactored
observer_from_notifiertoObserver.from_notification - Added missing rx.linq.observable.blocking from setup.py
- Added missing rx.joins from setup.py
- Removed some non git files files that were added to the package by accident
- Added
Observable#to_iterable() - Fixed examples. Use
debounceinstead ofthrottle - Fixed wrong aliases for
select_switch. - Added join patterns.
Observable.whenandObservable#and_ - Added
BlockingObservableand operatorsfor_eachandto_iterable - Started adding docstrings as reStructuredText in order for PyCharm to infer types. Operators will eventually be converted to new syntax
- Refactored operators to use C# like extensionmethods using function decorators
- More PEP8 alignment
- Python slicing and indexing of observables. Thus you can write xs[1:-1:2]
- Aligned backpressure with RxJS
- Renamed all
select()tomap()andwhere()tomap() from_is now an alias forfrom_iterable. Removedfrom_array- Fixes for
flat_map/flat_map. Selector may return iterable
- Made
ScheduledObserverthread safe - Thread safe handling for
take_whileandgroup_join - Removed dependecy on six (https://pythonhosted.org/six/)
- Added support for IronPython (by removing six)
- Aggregate is now an alias for reduce
- Aligning throttle type operator naming with RxJS and RxJava
- Added
throttle_last()as alias forsample() - Renamed
throttle()todebounce()and addedthrottle_with_timeout()as alias - Renamed
any()tosome() - Simplified
sequence_equal() - Bugfix for
take()when no count given - Removed internal operator
final_value()which did exactly the same aslast() - Added
to_iterable()as alias toto_list() - Added
throttle_first()