reactivex 4.0.0b5__tar.gz → 5.0.0a2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of reactivex might be problematic. Click here for more details.

Files changed (314) hide show
  1. reactivex-5.0.0a2/.gitignore +85 -0
  2. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/PKG-INFO +67 -30
  3. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/README.rst +53 -16
  4. reactivex-5.0.0a2/pyproject.toml +121 -0
  5. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/__init__.py +39 -48
  6. reactivex-5.0.0a2/reactivex/_version.py +1 -0
  7. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/disposable.py +3 -4
  8. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/observable.py +13 -6
  9. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/observer.py +2 -1
  10. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/periodicscheduler.py +7 -6
  11. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/scheduler.py +10 -9
  12. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/subject.py +5 -5
  13. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/compositedisposable.py +4 -4
  14. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/disposable.py +1 -2
  15. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/multipleassignmentdisposable.py +3 -4
  16. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/refcountdisposable.py +1 -2
  17. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/serialdisposable.py +5 -6
  18. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/singleassignmentdisposable.py +3 -4
  19. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/__init__.py +2 -0
  20. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/basic.py +4 -4
  21. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/concurrency.py +2 -1
  22. reactivex-5.0.0a2/reactivex/internal/constants.py +4 -0
  23. reactivex-5.0.0a2/reactivex/internal/curry.py +59 -0
  24. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/exceptions.py +7 -12
  25. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/priorityqueue.py +2 -2
  26. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/internal/utils.py +6 -5
  27. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/notification.py +23 -22
  28. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/case.py +5 -6
  29. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/catch.py +3 -3
  30. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/combinelatest.py +4 -5
  31. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/concat.py +3 -2
  32. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/connectableobservable.py +7 -7
  33. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/defer.py +4 -3
  34. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/empty.py +3 -4
  35. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/forkjoin.py +5 -5
  36. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/fromcallback.py +4 -3
  37. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/fromfuture.py +3 -3
  38. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/fromiterable.py +4 -3
  39. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/generate.py +2 -2
  40. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/generatewithrelativetime.py +4 -3
  41. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/groupedobservable.py +5 -5
  42. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/ifthen.py +3 -2
  43. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/interval.py +1 -4
  44. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/marbles.py +18 -17
  45. reactivex-5.0.0a2/reactivex/observable/mixins/__init__.py +32 -0
  46. reactivex-5.0.0a2/reactivex/observable/mixins/combination.py +481 -0
  47. reactivex-5.0.0a2/reactivex/observable/mixins/conditional.py +135 -0
  48. reactivex-5.0.0a2/reactivex/observable/mixins/error_handling.py +130 -0
  49. reactivex-5.0.0a2/reactivex/observable/mixins/filtering.py +1119 -0
  50. reactivex-5.0.0a2/reactivex/observable/mixins/mathematical.py +277 -0
  51. reactivex-5.0.0a2/reactivex/observable/mixins/multicasting.py +306 -0
  52. reactivex-5.0.0a2/reactivex/observable/mixins/testing.py +193 -0
  53. reactivex-5.0.0a2/reactivex/observable/mixins/time_based.py +209 -0
  54. reactivex-5.0.0a2/reactivex/observable/mixins/transformation.py +632 -0
  55. reactivex-5.0.0a2/reactivex/observable/mixins/utility.py +811 -0
  56. reactivex-5.0.0a2/reactivex/observable/mixins/windowing.py +688 -0
  57. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/never.py +2 -2
  58. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/observable.py +97 -52
  59. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/onerrorresumenext.py +7 -6
  60. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/range.py +6 -6
  61. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/repeat.py +2 -2
  62. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/returnvalue.py +6 -5
  63. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/start.py +3 -2
  64. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/startasync.py +2 -1
  65. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/throw.py +3 -3
  66. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/timer.py +12 -12
  67. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/toasync.py +3 -2
  68. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/using.py +5 -4
  69. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/withlatestfrom.py +4 -5
  70. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/zip.py +7 -6
  71. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observer/autodetachobserver.py +4 -4
  72. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observer/observer.py +6 -7
  73. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observer/scheduledobserver.py +2 -2
  74. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/__init__.py +322 -282
  75. reactivex-5.0.0a2/reactivex/operators/_all.py +41 -0
  76. reactivex-5.0.0a2/reactivex/operators/_amb.py +105 -0
  77. reactivex-5.0.0a2/reactivex/operators/_asobservable.py +34 -0
  78. reactivex-5.0.0a2/reactivex/operators/_average.py +65 -0
  79. reactivex-5.0.0a2/reactivex/operators/_buffer.py +126 -0
  80. reactivex-5.0.0a2/reactivex/operators/_bufferwithtime.py +44 -0
  81. reactivex-5.0.0a2/reactivex/operators/_bufferwithtimeorcount.py +40 -0
  82. reactivex-5.0.0a2/reactivex/operators/_catch.py +79 -0
  83. reactivex-5.0.0a2/reactivex/operators/_combinelatest.py +38 -0
  84. reactivex-5.0.0a2/reactivex/operators/_concat.py +29 -0
  85. reactivex-5.0.0a2/reactivex/operators/_contains.py +44 -0
  86. reactivex-5.0.0a2/reactivex/operators/_count.py +43 -0
  87. reactivex-5.0.0a2/reactivex/operators/_debounce.py +177 -0
  88. reactivex-5.0.0a2/reactivex/operators/_defaultifempty.py +55 -0
  89. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_delay.py +24 -23
  90. reactivex-5.0.0a2/reactivex/operators/_delaysubscription.py +40 -0
  91. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_delaywithmapper.py +10 -11
  92. reactivex-5.0.0a2/reactivex/operators/_dematerialize.py +40 -0
  93. reactivex-5.0.0a2/reactivex/operators/_distinct.py +88 -0
  94. reactivex-5.0.0a2/reactivex/operators/_distinctuntilchanged.py +83 -0
  95. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_do.py +126 -118
  96. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_dowhile.py +3 -2
  97. reactivex-5.0.0a2/reactivex/operators/_elementatordefault.py +75 -0
  98. reactivex-5.0.0a2/reactivex/operators/_exclusive.py +80 -0
  99. reactivex-5.0.0a2/reactivex/operators/_expand.py +107 -0
  100. reactivex-5.0.0a2/reactivex/operators/_filter.py +93 -0
  101. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_finallyaction.py +3 -2
  102. reactivex-5.0.0a2/reactivex/operators/_find.py +63 -0
  103. reactivex-5.0.0a2/reactivex/operators/_first.py +47 -0
  104. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_firstordefault.py +5 -4
  105. reactivex-5.0.0a2/reactivex/operators/_flatmap.py +135 -0
  106. reactivex-5.0.0a2/reactivex/operators/_forkjoin.py +33 -0
  107. reactivex-5.0.0a2/reactivex/operators/_groupby.py +51 -0
  108. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_groupbyuntil.py +13 -10
  109. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_groupjoin.py +7 -6
  110. reactivex-5.0.0a2/reactivex/operators/_ignoreelements.py +37 -0
  111. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_isempty.py +15 -4
  112. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_join.py +6 -5
  113. reactivex-5.0.0a2/reactivex/operators/_last.py +49 -0
  114. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_lastordefault.py +8 -8
  115. reactivex-5.0.0a2/reactivex/operators/_map.py +86 -0
  116. reactivex-5.0.0a2/reactivex/operators/_materialize.py +47 -0
  117. reactivex-5.0.0a2/reactivex/operators/_max.py +44 -0
  118. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_maxby.py +5 -5
  119. reactivex-5.0.0a2/reactivex/operators/_merge.py +156 -0
  120. reactivex-5.0.0a2/reactivex/operators/_min.py +50 -0
  121. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_minby.py +9 -8
  122. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_multicast.py +9 -9
  123. reactivex-5.0.0a2/reactivex/operators/_observeon.py +47 -0
  124. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_onerrorresumenext.py +2 -1
  125. reactivex-5.0.0a2/reactivex/operators/_pairwise.py +57 -0
  126. reactivex-5.0.0a2/reactivex/operators/_partition.py +95 -0
  127. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_pluck.py +4 -3
  128. reactivex-5.0.0a2/reactivex/operators/_publish.py +81 -0
  129. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_publishvalue.py +9 -5
  130. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_reduce.py +17 -13
  131. reactivex-5.0.0a2/reactivex/operators/_repeat.py +45 -0
  132. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_replay.py +9 -9
  133. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_retry.py +12 -10
  134. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_sample.py +31 -27
  135. reactivex-5.0.0a2/reactivex/operators/_scan.py +62 -0
  136. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_sequenceequal.py +9 -8
  137. reactivex-5.0.0a2/reactivex/operators/_single.py +46 -0
  138. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_singleordefault.py +6 -5
  139. reactivex-5.0.0a2/reactivex/operators/_skip.py +53 -0
  140. reactivex-5.0.0a2/reactivex/operators/_skiplast.py +56 -0
  141. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_skiplastwithtime.py +5 -4
  142. reactivex-5.0.0a2/reactivex/operators/_skipuntil.py +77 -0
  143. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_skipuntilwithtime.py +4 -3
  144. reactivex-5.0.0a2/reactivex/operators/_skipwhile.py +99 -0
  145. reactivex-5.0.0a2/reactivex/operators/_skipwithtime.py +70 -0
  146. reactivex-5.0.0a2/reactivex/operators/_slice.py +80 -0
  147. reactivex-5.0.0a2/reactivex/operators/_some.py +60 -0
  148. reactivex-5.0.0a2/reactivex/operators/_startswith.py +30 -0
  149. reactivex-5.0.0a2/reactivex/operators/_subscribeon.py +60 -0
  150. reactivex-5.0.0a2/reactivex/operators/_sum.py +37 -0
  151. reactivex-5.0.0a2/reactivex/operators/_switchlatest.py +92 -0
  152. reactivex-5.0.0a2/reactivex/operators/_take.py +57 -0
  153. reactivex-5.0.0a2/reactivex/operators/_takelast.py +56 -0
  154. reactivex-5.0.0a2/reactivex/operators/_takelastbuffer.py +56 -0
  155. reactivex-5.0.0a2/reactivex/operators/_takelastwithtime.py +72 -0
  156. reactivex-5.0.0a2/reactivex/operators/_takeuntil.py +52 -0
  157. reactivex-5.0.0a2/reactivex/operators/_takeuntilwithtime.py +56 -0
  158. reactivex-5.0.0a2/reactivex/operators/_takewhile.py +129 -0
  159. reactivex-5.0.0a2/reactivex/operators/_takewithtime.py +58 -0
  160. reactivex-5.0.0a2/reactivex/operators/_throttlefirst.py +64 -0
  161. reactivex-5.0.0a2/reactivex/operators/_timeinterval.py +57 -0
  162. reactivex-5.0.0a2/reactivex/operators/_timeout.py +103 -0
  163. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_timeoutwithmapper.py +6 -5
  164. reactivex-5.0.0a2/reactivex/operators/_timestamp.py +51 -0
  165. reactivex-5.0.0a2/reactivex/operators/_todict.py +72 -0
  166. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_tofuture.py +24 -15
  167. reactivex-5.0.0a2/reactivex/operators/_toiterable.py +50 -0
  168. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_tomarbles.py +5 -5
  169. reactivex-5.0.0a2/reactivex/operators/_toset.py +47 -0
  170. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_whiledo.py +2 -1
  171. reactivex-5.0.0a2/reactivex/operators/_window.py +178 -0
  172. reactivex-5.0.0a2/reactivex/operators/_windowwithcount.py +94 -0
  173. reactivex-5.0.0a2/reactivex/operators/_windowwithtime.py +137 -0
  174. reactivex-5.0.0a2/reactivex/operators/_windowwithtimeorcount.py +112 -0
  175. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/_withlatestfrom.py +13 -9
  176. reactivex-5.0.0a2/reactivex/operators/_zip.py +87 -0
  177. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/connectable/_refcount.py +4 -3
  178. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/pipe.py +30 -43
  179. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/run.py +8 -4
  180. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/catchscheduler.py +11 -10
  181. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/currentthreadscheduler.py +7 -8
  182. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/asyncioscheduler.py +7 -6
  183. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/asynciothreadsafescheduler.py +12 -14
  184. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/eventletscheduler.py +4 -4
  185. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/geventscheduler.py +4 -4
  186. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/ioloopscheduler.py +4 -4
  187. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/twistedscheduler.py +4 -4
  188. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloopscheduler.py +9 -12
  189. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/historicalscheduler.py +1 -2
  190. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/immediatescheduler.py +5 -4
  191. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/gtkscheduler.py +6 -7
  192. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/pygamescheduler.py +4 -4
  193. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/qtscheduler.py +6 -7
  194. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/tkinterscheduler.py +4 -4
  195. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/wxscheduler.py +7 -7
  196. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/newthreadscheduler.py +6 -8
  197. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/periodicscheduler.py +4 -4
  198. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/scheduleditem.py +6 -8
  199. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/scheduler.py +7 -7
  200. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/threadpoolscheduler.py +3 -3
  201. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/timeoutscheduler.py +5 -4
  202. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/trampoline.py +1 -2
  203. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/trampolinescheduler.py +5 -6
  204. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/virtualtimescheduler.py +9 -9
  205. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/asyncsubject.py +2 -2
  206. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/behaviorsubject.py +2 -2
  207. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/innersubscription.py +2 -2
  208. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/replaysubject.py +11 -10
  209. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/subject.py +4 -4
  210. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/coldobservable.py +5 -5
  211. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/hotobservable.py +6 -6
  212. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/marbles.py +23 -22
  213. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/mockdisposable.py +1 -3
  214. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/mockobserver.py +2 -2
  215. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/reactivetest.py +4 -2
  216. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/recorded.py +1 -1
  217. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/subscription.py +3 -3
  218. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/testscheduler.py +15 -15
  219. reactivex-5.0.0a2/reactivex/typing.py +68 -0
  220. ReactiveX-4.0.0b5/pyproject.toml +0 -78
  221. ReactiveX-4.0.0b5/reactivex/_version.py +0 -1
  222. ReactiveX-4.0.0b5/reactivex/internal/constants.py +0 -4
  223. ReactiveX-4.0.0b5/reactivex/operators/_all.py +0 -24
  224. ReactiveX-4.0.0b5/reactivex/operators/_amb.py +0 -92
  225. ReactiveX-4.0.0b5/reactivex/operators/_asobservable.py +0 -31
  226. ReactiveX-4.0.0b5/reactivex/operators/_average.py +0 -62
  227. ReactiveX-4.0.0b5/reactivex/operators/_buffer.py +0 -80
  228. ReactiveX-4.0.0b5/reactivex/operators/_bufferwithtime.py +0 -24
  229. ReactiveX-4.0.0b5/reactivex/operators/_bufferwithtimeorcount.py +0 -21
  230. ReactiveX-4.0.0b5/reactivex/operators/_catch.py +0 -78
  231. ReactiveX-4.0.0b5/reactivex/operators/_combinelatest.py +0 -30
  232. ReactiveX-4.0.0b5/reactivex/operators/_concat.py +0 -26
  233. ReactiveX-4.0.0b5/reactivex/operators/_contains.py +0 -25
  234. ReactiveX-4.0.0b5/reactivex/operators/_count.py +0 -27
  235. ReactiveX-4.0.0b5/reactivex/operators/_debounce.py +0 -174
  236. ReactiveX-4.0.0b5/reactivex/operators/_defaultifempty.py +0 -52
  237. ReactiveX-4.0.0b5/reactivex/operators/_delaysubscription.py +0 -38
  238. ReactiveX-4.0.0b5/reactivex/operators/_dematerialize.py +0 -36
  239. ReactiveX-4.0.0b5/reactivex/operators/_distinct.py +0 -83
  240. ReactiveX-4.0.0b5/reactivex/operators/_distinctuntilchanged.py +0 -80
  241. ReactiveX-4.0.0b5/reactivex/operators/_elementatordefault.py +0 -51
  242. ReactiveX-4.0.0b5/reactivex/operators/_exclusive.py +0 -74
  243. ReactiveX-4.0.0b5/reactivex/operators/_expand.py +0 -102
  244. ReactiveX-4.0.0b5/reactivex/operators/_filter.py +0 -98
  245. ReactiveX-4.0.0b5/reactivex/operators/_find.py +0 -46
  246. ReactiveX-4.0.0b5/reactivex/operators/_first.py +0 -40
  247. ReactiveX-4.0.0b5/reactivex/operators/_flatmap.py +0 -131
  248. ReactiveX-4.0.0b5/reactivex/operators/_forkjoin.py +0 -28
  249. ReactiveX-4.0.0b5/reactivex/operators/_groupby.py +0 -30
  250. ReactiveX-4.0.0b5/reactivex/operators/_ignoreelements.py +0 -32
  251. ReactiveX-4.0.0b5/reactivex/operators/_last.py +0 -44
  252. ReactiveX-4.0.0b5/reactivex/operators/_map.py +0 -72
  253. ReactiveX-4.0.0b5/reactivex/operators/_materialize.py +0 -48
  254. ReactiveX-4.0.0b5/reactivex/operators/_max.py +0 -37
  255. ReactiveX-4.0.0b5/reactivex/operators/_merge.py +0 -153
  256. ReactiveX-4.0.0b5/reactivex/operators/_min.py +0 -44
  257. ReactiveX-4.0.0b5/reactivex/operators/_observeon.py +0 -43
  258. ReactiveX-4.0.0b5/reactivex/operators/_pairwise.py +0 -53
  259. ReactiveX-4.0.0b5/reactivex/operators/_partition.py +0 -88
  260. ReactiveX-4.0.0b5/reactivex/operators/_publish.py +0 -66
  261. ReactiveX-4.0.0b5/reactivex/operators/_repeat.py +0 -46
  262. ReactiveX-4.0.0b5/reactivex/operators/_scan.py +0 -60
  263. ReactiveX-4.0.0b5/reactivex/operators/_single.py +0 -36
  264. ReactiveX-4.0.0b5/reactivex/operators/_skip.py +0 -50
  265. ReactiveX-4.0.0b5/reactivex/operators/_skiplast.py +0 -52
  266. ReactiveX-4.0.0b5/reactivex/operators/_skipuntil.py +0 -72
  267. ReactiveX-4.0.0b5/reactivex/operators/_skipwhile.py +0 -78
  268. ReactiveX-4.0.0b5/reactivex/operators/_skipwithtime.py +0 -66
  269. ReactiveX-4.0.0b5/reactivex/operators/_slice.py +0 -75
  270. ReactiveX-4.0.0b5/reactivex/operators/_some.py +0 -59
  271. ReactiveX-4.0.0b5/reactivex/operators/_startswith.py +0 -28
  272. ReactiveX-4.0.0b5/reactivex/operators/_subscribeon.py +0 -57
  273. ReactiveX-4.0.0b5/reactivex/operators/_sum.py +0 -20
  274. ReactiveX-4.0.0b5/reactivex/operators/_switchlatest.py +0 -90
  275. ReactiveX-4.0.0b5/reactivex/operators/_take.py +0 -53
  276. ReactiveX-4.0.0b5/reactivex/operators/_takelast.py +0 -55
  277. ReactiveX-4.0.0b5/reactivex/operators/_takelastbuffer.py +0 -55
  278. ReactiveX-4.0.0b5/reactivex/operators/_takelastwithtime.py +0 -68
  279. ReactiveX-4.0.0b5/reactivex/operators/_takeuntil.py +0 -51
  280. ReactiveX-4.0.0b5/reactivex/operators/_takeuntilwithtime.py +0 -53
  281. ReactiveX-4.0.0b5/reactivex/operators/_takewhile.py +0 -121
  282. ReactiveX-4.0.0b5/reactivex/operators/_takewithtime.py +0 -53
  283. ReactiveX-4.0.0b5/reactivex/operators/_throttlefirst.py +0 -57
  284. ReactiveX-4.0.0b5/reactivex/operators/_timeinterval.py +0 -53
  285. ReactiveX-4.0.0b5/reactivex/operators/_timeout.py +0 -101
  286. ReactiveX-4.0.0b5/reactivex/operators/_timestamp.py +0 -49
  287. ReactiveX-4.0.0b5/reactivex/operators/_todict.py +0 -64
  288. ReactiveX-4.0.0b5/reactivex/operators/_toiterable.py +0 -44
  289. ReactiveX-4.0.0b5/reactivex/operators/_toset.py +0 -37
  290. ReactiveX-4.0.0b5/reactivex/operators/_window.py +0 -177
  291. ReactiveX-4.0.0b5/reactivex/operators/_windowwithcount.py +0 -92
  292. ReactiveX-4.0.0b5/reactivex/operators/_windowwithtime.py +0 -121
  293. ReactiveX-4.0.0b5/reactivex/operators/_windowwithtimeorcount.py +0 -96
  294. ReactiveX-4.0.0b5/reactivex/operators/_zip.py +0 -83
  295. ReactiveX-4.0.0b5/reactivex/typing.py +0 -57
  296. ReactiveX-4.0.0b5/setup.py +0 -45
  297. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/LICENSE +0 -0
  298. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/__init__.py +0 -0
  299. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/abc/startable.py +0 -0
  300. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/__init__.py +0 -0
  301. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/booleandisposable.py +0 -0
  302. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/disposable/scheduleddisposable.py +0 -0
  303. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/__init__.py +0 -0
  304. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/amb.py +0 -0
  305. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observable/merge.py +0 -0
  306. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observer/__init__.py +0 -0
  307. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/observer/observeonobserver.py +0 -0
  308. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/operators/connectable/__init__.py +0 -0
  309. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/py.typed +0 -0
  310. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/__init__.py +0 -0
  311. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/eventloop/__init__.py +0 -0
  312. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/scheduler/mainloop/__init__.py +0 -0
  313. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/subject/__init__.py +0 -0
  314. {ReactiveX-4.0.0b5 → reactivex-5.0.0a2}/reactivex/testing/__init__.py +0 -0
@@ -0,0 +1,85 @@
1
+ *.py[cod]
2
+
3
+ # C extensions
4
+ *.so
5
+
6
+ # Packages
7
+ *.egg
8
+ *.egg-info
9
+ dist
10
+ build
11
+ eggs
12
+ .eggs
13
+ parts
14
+ bin
15
+ var
16
+ sdist
17
+ develop-eggs
18
+ .installed.cfg
19
+ lib
20
+ lib64
21
+ *tmp_dir
22
+
23
+ # Installer logs
24
+ pip-log.txt
25
+
26
+ # Unit test / coverage reports
27
+ .coverage
28
+ .tox
29
+ nosetests.xml
30
+ coverage.xml
31
+ htmlcov
32
+ .mypy_cache
33
+ .pytest_cache
34
+
35
+ # Virtual env
36
+ venv
37
+
38
+ # Translations
39
+ *.mo
40
+
41
+ # Mr Developer
42
+ .mr.developer.cfg
43
+ .project
44
+ .pydevproject
45
+
46
+ # Visual studio
47
+ *.suo
48
+ *.DotSettings.user
49
+ TestResults/
50
+
51
+ # Log files
52
+ *.log
53
+ Rx.pyperf
54
+ *.coverage
55
+ UpgradeLog.htm
56
+ TestResults/Rx.TE.Tests.mdf
57
+ TestResults/Rx.TE.Tests_log.ldf
58
+ *.user
59
+
60
+ # Cloud9
61
+ .c9
62
+
63
+ # PyCharm
64
+ .idea
65
+ .zedstate
66
+
67
+ # Spyder IDE
68
+ .spyproject/
69
+
70
+ .ipynb_checkpoints
71
+ .cache/
72
+ .vscode/
73
+ .noseids
74
+ _build
75
+
76
+ # Mac OS
77
+ .DS_Store
78
+
79
+ # Type checkers
80
+ .pyre
81
+
82
+ .ionide/
83
+
84
+ .python-version
85
+ __pycache__
@@ -1,12 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: reactivex
3
- Version: 4.0.0b5
3
+ Version: 5.0.0a2
4
4
  Summary: ReactiveX (Rx) for Python
5
- Home-page: http://reactivex.io
6
- License: MIT
7
- Author: Dag Brattli
8
- Author-email: dag@brattli.net
9
- Requires-Python: >=3.7,<3.11
5
+ Project-URL: Homepage, http://reactivex.io
6
+ Project-URL: Repository, https://github.com/ReactiveX/RxPY
7
+ Project-URL: Documentation, https://rxpy.readthedocs.io/en/latest/
8
+ Author-email: Dag Brattli <dag@brattli.net>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
10
11
  Classifier: Development Status :: 5 - Production/Stable
11
12
  Classifier: Environment :: Other Environment
12
13
  Classifier: Intended Audience :: Developers
@@ -14,14 +15,14 @@ Classifier: License :: OSI Approved :: MIT License
14
15
  Classifier: Operating System :: OS Independent
15
16
  Classifier: Programming Language :: Python :: 3
16
17
  Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.7
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
20
22
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
23
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
- Requires-Dist: typing-extensions (>=4.1.1,<5.0.0)
23
- Project-URL: Documentation, https://rxpy.readthedocs.io/en/latest/
24
- Project-URL: Repository, https://github.com/ReactiveX/RxPY
24
+ Requires-Python: <4.0,>=3.10
25
+ Requires-Dist: typing-extensions<5,>=4.15.0
25
26
  Description-Content-Type: text/x-rst
26
27
 
27
28
  ===============================
@@ -54,12 +55,12 @@ ReactiveX for Python v4
54
55
  For v3.X please go to the `v3 branch
55
56
  <https://github.com/ReactiveX/RxPY/tree/release/v3.2.x>`_.
56
57
 
57
- ReactiveX for Python v4.x runs on `Python <http://www.python.org/>`_ 3.7 or above. To
58
+ ReactiveX for Python v4.x runs on `Python <http://www.python.org/>`_ 3.9 or above. To
58
59
  install:
59
60
 
60
61
  .. code:: console
61
62
 
62
- pip3 install reactivex --pre
63
+ pip3 install reactivex
63
64
 
64
65
 
65
66
  About ReactiveX
@@ -85,6 +86,43 @@ Schedulers.
85
86
  composed.subscribe(lambda value: print("Received {0}".format(value)))
86
87
 
87
88
 
89
+ Fluent and Functional Syntax
90
+ -----------------------------
91
+
92
+ RxPY supports both **fluent** (method chaining) and **functional** (pipe-based) syntax,
93
+ giving you the flexibility to choose the style that works best for your codebase:
94
+
95
+ **Fluent style** - Method chaining for a more Pythonic feel:
96
+
97
+ .. code:: python
98
+
99
+ import reactivex as rx
100
+
101
+ result = (rx.of(1, 2, 3, 4, 5)
102
+ .map(lambda x: x * 2)
103
+ .filter(lambda x: x > 5)
104
+ .reduce(lambda acc, x: acc + x, 0)
105
+ )
106
+ result.subscribe(print) # Output: 24
107
+
108
+ **Functional style** - Pipe-based for functional composition:
109
+
110
+ .. code:: python
111
+
112
+ import reactivex as rx
113
+ from reactivex import operators as ops
114
+
115
+ result = rx.of(1, 2, 3, 4, 5).pipe(
116
+ ops.map(lambda x: x * 2),
117
+ ops.filter(lambda x: x > 5),
118
+ ops.reduce(lambda acc, x: acc + x, 0)
119
+ )
120
+ result.subscribe(print) # Output: 24
121
+
122
+ Both styles are **fully supported** and can even be mixed in the same pipeline.
123
+ Choose the style that best fits your team's preferences and coding standards.
124
+
125
+
88
126
  Learning ReactiveX
89
127
  ------------------
90
128
 
@@ -132,8 +170,12 @@ need to be written with an ``_`` in Python:
132
170
 
133
171
  .. code:: python
134
172
 
173
+ # Functional style
135
174
  group = source.pipe(ops.group_by(lambda i: i % 3))
136
175
 
176
+ # Or fluent style
177
+ group = source.group_by(lambda i: i % 3)
178
+
137
179
  With ReactiveX for Python you should use `named keyword arguments
138
180
  <https://docs.python.org/3/glossary.html>`_ instead of positional arguments when an
139
181
  operator has multiple optional arguments. RxPY will not try to detect which arguments
@@ -142,35 +184,30 @@ you are giving to the operator (or not).
142
184
  Development
143
185
  -----------
144
186
 
145
- This project is managed using `Poetry <https://python-poetry.org/>`_. Code is formatted
146
- using `Black <https://github.com/psf/black>`_, `isort
147
- <https://github.com/PyCQA/isort>`_. Code is statically type checked using `pyright
148
- <https://github.com/microsoft/pyright>`_ and `mypy <http://mypy-lang.org/>`_.
187
+ This project is managed using `uv <https://docs.astral.sh/uv/>`_. Code is formatted
188
+ using `Ruff <https://github.com/astral-sh/ruff>`_. Code is statically type checked
189
+ using `pyright <https://github.com/microsoft/pyright>`_.
149
190
 
150
- If you want to take advantage of the default VSCode integration, then
151
- first configure Poetry to make its virtual environment in the
152
- repository:
191
+ After cloning the repository, install dependencies:
153
192
 
154
193
  .. code:: console
155
194
 
156
- poetry config virtualenvs.in-project true
195
+ uv sync
157
196
 
158
- After cloning the repository, activate the tooling:
197
+ Run unit tests:
159
198
 
160
199
  .. code:: console
161
200
 
162
- poetry install
163
- poetry run pre-commit install
201
+ uv run pytest
164
202
 
165
- Run unit tests:
203
+ Run type checking:
166
204
 
167
205
  .. code:: console
168
206
 
169
- poetry run pytest
207
+ uv run pyright
170
208
 
171
209
  Run code checks (manually):
172
210
 
173
211
  .. code:: console
174
212
 
175
- poetry run pre-commit run --all-files
176
-
213
+ uv run pre-commit run --all-files
@@ -28,12 +28,12 @@ ReactiveX for Python v4
28
28
  For v3.X please go to the `v3 branch
29
29
  <https://github.com/ReactiveX/RxPY/tree/release/v3.2.x>`_.
30
30
 
31
- ReactiveX for Python v4.x runs on `Python <http://www.python.org/>`_ 3.7 or above. To
31
+ ReactiveX for Python v4.x runs on `Python <http://www.python.org/>`_ 3.9 or above. To
32
32
  install:
33
33
 
34
34
  .. code:: console
35
35
 
36
- pip3 install reactivex --pre
36
+ pip3 install reactivex
37
37
 
38
38
 
39
39
  About ReactiveX
@@ -59,6 +59,43 @@ Schedulers.
59
59
  composed.subscribe(lambda value: print("Received {0}".format(value)))
60
60
 
61
61
 
62
+ Fluent and Functional Syntax
63
+ -----------------------------
64
+
65
+ RxPY supports both **fluent** (method chaining) and **functional** (pipe-based) syntax,
66
+ giving you the flexibility to choose the style that works best for your codebase:
67
+
68
+ **Fluent style** - Method chaining for a more Pythonic feel:
69
+
70
+ .. code:: python
71
+
72
+ import reactivex as rx
73
+
74
+ result = (rx.of(1, 2, 3, 4, 5)
75
+ .map(lambda x: x * 2)
76
+ .filter(lambda x: x > 5)
77
+ .reduce(lambda acc, x: acc + x, 0)
78
+ )
79
+ result.subscribe(print) # Output: 24
80
+
81
+ **Functional style** - Pipe-based for functional composition:
82
+
83
+ .. code:: python
84
+
85
+ import reactivex as rx
86
+ from reactivex import operators as ops
87
+
88
+ result = rx.of(1, 2, 3, 4, 5).pipe(
89
+ ops.map(lambda x: x * 2),
90
+ ops.filter(lambda x: x > 5),
91
+ ops.reduce(lambda acc, x: acc + x, 0)
92
+ )
93
+ result.subscribe(print) # Output: 24
94
+
95
+ Both styles are **fully supported** and can even be mixed in the same pipeline.
96
+ Choose the style that best fits your team's preferences and coding standards.
97
+
98
+
62
99
  Learning ReactiveX
63
100
  ------------------
64
101
 
@@ -106,8 +143,12 @@ need to be written with an ``_`` in Python:
106
143
 
107
144
  .. code:: python
108
145
 
146
+ # Functional style
109
147
  group = source.pipe(ops.group_by(lambda i: i % 3))
110
148
 
149
+ # Or fluent style
150
+ group = source.group_by(lambda i: i % 3)
151
+
111
152
  With ReactiveX for Python you should use `named keyword arguments
112
153
  <https://docs.python.org/3/glossary.html>`_ instead of positional arguments when an
113
154
  operator has multiple optional arguments. RxPY will not try to detect which arguments
@@ -116,34 +157,30 @@ you are giving to the operator (or not).
116
157
  Development
117
158
  -----------
118
159
 
119
- This project is managed using `Poetry <https://python-poetry.org/>`_. Code is formatted
120
- using `Black <https://github.com/psf/black>`_, `isort
121
- <https://github.com/PyCQA/isort>`_. Code is statically type checked using `pyright
122
- <https://github.com/microsoft/pyright>`_ and `mypy <http://mypy-lang.org/>`_.
160
+ This project is managed using `uv <https://docs.astral.sh/uv/>`_. Code is formatted
161
+ using `Ruff <https://github.com/astral-sh/ruff>`_. Code is statically type checked
162
+ using `pyright <https://github.com/microsoft/pyright>`_.
123
163
 
124
- If you want to take advantage of the default VSCode integration, then
125
- first configure Poetry to make its virtual environment in the
126
- repository:
164
+ After cloning the repository, install dependencies:
127
165
 
128
166
  .. code:: console
129
167
 
130
- poetry config virtualenvs.in-project true
168
+ uv sync
131
169
 
132
- After cloning the repository, activate the tooling:
170
+ Run unit tests:
133
171
 
134
172
  .. code:: console
135
173
 
136
- poetry install
137
- poetry run pre-commit install
174
+ uv run pytest
138
175
 
139
- Run unit tests:
176
+ Run type checking:
140
177
 
141
178
  .. code:: console
142
179
 
143
- poetry run pytest
180
+ uv run pyright
144
181
 
145
182
  Run code checks (manually):
146
183
 
147
184
  .. code:: console
148
185
 
149
- poetry run pre-commit run --all-files
186
+ uv run pre-commit run --all-files
@@ -0,0 +1,121 @@
1
+ [project]
2
+ name = "reactivex"
3
+ version = "5.0.0a2"
4
+ description = "ReactiveX (Rx) for Python"
5
+ authors = [{ name = "Dag Brattli", email = "dag@brattli.net" }]
6
+ requires-python = ">= 3.10, < 4.0"
7
+ readme = "README.rst"
8
+ license = "MIT"
9
+ classifiers = [
10
+ "Development Status :: 5 - Production/Stable",
11
+ "Environment :: Other Environment",
12
+ "Intended Audience :: Developers",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Operating System :: OS Independent",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.10",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ "Programming Language :: Python :: 3.14",
21
+ "Programming Language :: Python :: Implementation :: CPython",
22
+ "Topic :: Software Development :: Libraries :: Python Modules",
23
+ ]
24
+ dependencies = ["typing-extensions>=4.15.0,<5"]
25
+
26
+ [project.urls]
27
+ Homepage = "http://reactivex.io"
28
+ Repository = "https://github.com/ReactiveX/RxPY"
29
+ Documentation = "https://rxpy.readthedocs.io/en/latest/"
30
+
31
+ [dependency-groups]
32
+ test = [
33
+ "pyyaml>=6.0.3,<7",
34
+ "pytest-asyncio>=1.2.0,<1.3.0",
35
+ "pytest>=8.4.1,<9",
36
+ "coverage>=6.3.2,<7",
37
+ "pytest-xdist>=3.8.0,<4",
38
+ "ruff>=0.14.0,<1",
39
+ "pyright>=1.1.407,<1.2.0",
40
+ "mypy>=1.18.2,<1.19.0",
41
+ "coveralls>=4.0.2,<5",
42
+ "pre-commit>=4.3.0,<5",
43
+ "dunamai>=1.25.0,<2",
44
+ ]
45
+
46
+ [tool.uv]
47
+ default-groups = ["test"]
48
+
49
+ [tool.hatch.build.targets.sdist]
50
+ include = [
51
+ "reactivex",
52
+ "reactivex/py.typed",
53
+ ]
54
+
55
+ [tool.hatch.build.targets.wheel]
56
+ include = [
57
+ "reactivex",
58
+ "reactivex/py.typed",
59
+ ]
60
+
61
+ [build-system]
62
+ requires = ["hatchling"]
63
+ build-backend = "hatchling.build"
64
+
65
+ [tool.ruff]
66
+ line-length = 88
67
+ target-version = "5.0.0a2"
68
+ exclude = [
69
+ ".git",
70
+ "__pycache__",
71
+ "docs/source/conf.py",
72
+ "old",
73
+ "build",
74
+ "dist",
75
+ "notebooks",
76
+ "examples",
77
+ # Test directories - remove as each stage is completed
78
+ # Stage 1 complete, Stage 2 partial (test_integration complete)
79
+ "tests/test_subject",
80
+ "tests/test_scheduler",
81
+ "tests/test_observable",
82
+ ]
83
+
84
+ [tool.ruff.lint]
85
+ select = [
86
+ "E", # pycodestyle errors
87
+ "W", # pycodestyle warnings
88
+ "F", # pyflakes
89
+ "I", # isort
90
+ "UP", # pyupgrade
91
+ ]
92
+
93
+ [tool.ruff.lint.pydocstyle]
94
+ convention = "google"
95
+
96
+ [tool.ruff.lint.isort]
97
+ known-first-party = ["reactivex"]
98
+
99
+ [tool.mypy]
100
+ python_version = "5.0.0a2"
101
+ follow_imports = "silent"
102
+ files = ["reactivex"]
103
+ disallow_any_generics = true
104
+ disallow_untyped_defs = true
105
+
106
+ [tool.pytest.ini_options]
107
+ testpaths = ["tests"]
108
+ asyncio_mode = "strict"
109
+
110
+ [tool.pyright]
111
+ include = ["reactivex", "tests"]
112
+ exclude = [
113
+ # Stage 1 complete, Stage 2 partial (test_integration complete)
114
+ "tests/test_subject",
115
+ "tests/test_scheduler",
116
+ "tests/test_observable",
117
+ ]
118
+ reportImportCycles = false
119
+ reportMissingImports = false
120
+ pythonVersion = "3.10"
121
+ typeCheckingMode = "strict"