Skip to content

Commit d78df7d

Browse files
dbrattligithub-actions[bot]Copilotclaude
authored
test: fix all ruff lint errors in tests/test_observable/; remove from ruff exclude (#778)
* test: fix all ruff lint errors in tests/test_observable/; remove from ruff exclude - Fix E741: rename ambiguous variable names (l -> left/items/timers) - Fix E721: use isinstance() instead of type() comparison - Fix E501: wrap/noqa long assertion lines (marble test data) - Fix UP032/UP031/UP004/UP035 etc. via auto-fix (f-strings, useless inheritance, deprecated imports, annotations) - Remove tests/test_observable from ruff exclude list in pyproject.toml - All 153 ruff errors resolved; ruff --check passes cleanly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * style: fix ruff format issues in test_observable files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: clean up review feedback for ruff fixes - Drop unnecessary `# noqa: E501` from wrapped lines in test_starmap.py that already fit within 88 chars after wrapping. - Restore docstrings in test_retry.py and test_method_chaining.py to more natural shapes, suppressing E501 on the whole docstring instead. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test: widen tolerance in test_currentthread_now to fix flake The test reads the wall clock twice with construction in between and asserts the gap is under 5ms. Under pytest-xdist on a shared CI VM, GC pauses or scheduler jitter routinely push that gap past 5ms (observed 14ms in CI). 50ms still proves the scheduler is not clearly broken without flaking on routine load. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 0415770 commit d78df7d

41 files changed

Lines changed: 201 additions & 176 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pyproject.toml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,6 @@ exclude = [
7373
"dist",
7474
"notebooks",
7575
"examples",
76-
# Test directories - remove as each stage is completed
77-
# Stage 1 complete, Stage 2 partial (test_integration complete)
78-
# test_subject and test_scheduler now pass ruff checks
79-
"tests/test_observable",
8076
]
8177

8278
[tool.ruff.lint]
@@ -109,7 +105,7 @@ asyncio_mode = "strict"
109105
include = ["reactivex", "tests"]
110106
exclude = [
111107
# Stage 1 complete, Stage 2 complete (test_subject done)
112-
# test_scheduler still has strict-mode pyright errors
108+
# test_scheduler and test_observable still have strict-mode pyright errors
113109
"tests/test_scheduler",
114110
"tests/test_observable",
115111
]

tests/test_observable/test_amb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
class TestAmb(unittest.TestCase):
1717
def test_amb_never2(self):
1818
scheduler = TestScheduler()
19-
l = reactivex.never()
19+
left = reactivex.never()
2020
r = reactivex.never()
2121

2222
def create():
23-
return l.pipe(ops.amb(r))
23+
return left.pipe(ops.amb(r))
2424

2525
results = scheduler.start(create)
2626
assert results.messages == []

tests/test_observable/test_average.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_average_int32_empty(self):
2020
res = scheduler.start(create=lambda: xs.pipe(_.average())).messages
2121

2222
assert len(res) == 1
23-
assert res[0].value.kind == "E" and res[0].value.exception != None
23+
assert res[0].value.kind == "E" and res[0].value.exception is not None
2424
assert res[0].time == 250
2525

2626
def test_average_int32_return(self):

tests/test_observable/test_catch.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ def handler(e, source):
171171
assert handler_called[0]
172172

173173
def test_catch_error_specific_caught_immediate(self):
174-
ex = "ex"
175174
handler_called = [False]
176175
scheduler = TestScheduler()
177176
msgs2 = [on_next(240, 4), on_completed(250)]

tests/test_observable/test_combination_fluent.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"""
66

77
import reactivex as rx
8-
from reactivex import Observable, operators as ops
8+
from reactivex import Observable
9+
from reactivex import operators as ops
910

1011

1112
class TestMergeMethodChaining:
@@ -164,7 +165,8 @@ def test_join_equivalence(self) -> None:
164165
right: Observable[int] = rx.of(4, 5, 6)
165166

166167
# Use rx.never() for duration to keep windows open
167-
duration_mapper = lambda _: rx.never()
168+
def duration_mapper(_):
169+
return rx.never()
168170

169171
fluent_result: Observable[tuple[int, int]] = left.join(
170172
right, duration_mapper, duration_mapper
@@ -192,7 +194,8 @@ def test_group_join_equivalence(self) -> None:
192194
right: Observable[int] = rx.of(4, 5)
193195

194196
# Use rx.never() for duration to keep windows open
195-
duration_mapper = lambda _: rx.never()
197+
def duration_mapper(_):
198+
return rx.never()
196199

197200
fluent_result: Observable[tuple[int, Observable[int]]] = left.group_join(
198201
right, duration_mapper, duration_mapper

tests/test_observable/test_conditional_fluent.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"""
66

77
import reactivex as rx
8-
from reactivex import Observable, operators as ops
8+
from reactivex import Observable
9+
from reactivex import operators as ops
910

1011

1112
class TestDefaultIfEmptyMethodChaining:

tests/test_observable/test_connectableobservable.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
class MySubject(Observable, ObserverBase):
2020
def __init__(self):
21-
super(MySubject, self).__init__()
21+
super().__init__()
2222

2323
self.dispose_on_map = {}
2424
self.subscribe_count = 0
@@ -82,7 +82,7 @@ def test_connectable_observable_connected(self):
8282
subject = MySubject()
8383

8484
conn = ConnectableObservable(xs, subject)
85-
disconnect = conn.connect(scheduler)
85+
conn.connect(scheduler)
8686

8787
res = scheduler.start(lambda: conn)
8888

tests/test_observable/test_debounce.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import unittest
22

3-
from reactivex import empty, never
3+
from reactivex import empty, never, throw
44
from reactivex import operators as _
5-
from reactivex import throw
65
from reactivex.testing import ReactiveTest, TestScheduler
76

87
on_next = ReactiveTest.on_next

tests/test_observable/test_defaultifempty.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import unittest
2-
from typing import Optional
32

43
from reactivex import Observable
54
from reactivex import operators as ops
@@ -27,7 +26,7 @@ def test_default_if_empty_non_empty1(self):
2726
on_completed(420),
2827
)
2928

30-
def create() -> Observable[Optional[int]]:
29+
def create() -> Observable[int | None]:
3130
return xs.pipe(ops.default_if_empty())
3231

3332
results = scheduler.start(create)

tests/test_observable/test_doaction.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def on_completed():
138138
# def test_do_next_error(self):
139139
# ex = 'ex'
140140
# scheduler = TestScheduler()
141-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex))
141+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex)) # noqa: E501
142142
# i = [0]
143143
# sum = [2 + 3 + 4 + 5]
144144
# saw_error = False
@@ -156,7 +156,7 @@ def on_completed():
156156

157157
# def test_do_next_error_not(self):
158158
# scheduler = TestScheduler()
159-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250))
159+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250)) # noqa: E501
160160
# i = [0]
161161
# sum = [2 + 3 + 4 + 5]
162162
# saw_error = False
@@ -175,7 +175,7 @@ def on_completed():
175175

176176
# def test_do_next_error_completed(self):
177177
# scheduler = TestScheduler()
178-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250))
178+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250)) # noqa: E501
179179
# i = [0]
180180
# sum = [2 + 3 + 4 + 5]
181181
# saw_error = False
@@ -198,7 +198,7 @@ def on_completed():
198198
# def test_do_next_error_completed_error(self):
199199
# ex = 'ex'
200200
# scheduler = TestScheduler()
201-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex))
201+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex)) # noqa: E501
202202
# i = [0]
203203
# sum = [2 + 3 + 4 + 5]
204204
# saw_error = False
@@ -238,7 +238,7 @@ def on_completed():
238238
# def test_Do_Observer_SomeDataWithError(self):
239239
# ex = 'ex'
240240
# scheduler = TestScheduler()
241-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex))
241+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_error(250, ex)) # noqa: E501
242242
# i = [0]
243243
# sum = [2 + 3 + 4 + 5]
244244
# saw_error = False
@@ -260,7 +260,7 @@ def on_completed():
260260

261261
# def test_do_observer_some_data_with_error(self):
262262
# scheduler = TestScheduler()
263-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250))
263+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_next(220, 3), on_next(230, 4), on_next(240, 5), on_completed(250)) # noqa: E501
264264
# i = [0]
265265
# sum = [2 + 3 + 4 + 5]
266266
# saw_error = False
@@ -283,7 +283,7 @@ def on_completed():
283283
# def test_do1422_next_next_throws(self):
284284
# ex = 'ex'
285285
# scheduler = TestScheduler()
286-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
286+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
287287
# results = scheduler.start(create)
288288
# return xs.do_action(function () {
289289
# raise Exception(ex)
@@ -294,7 +294,7 @@ def on_completed():
294294
# def test_do1422_next_completed_next_throws(self):
295295
# ex = 'ex'
296296
# scheduler = TestScheduler()
297-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
297+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
298298
# results = scheduler.start(create)
299299
# return xs.do_action(function () {
300300
# throw ex
@@ -305,7 +305,7 @@ def on_completed():
305305
# def test_do1422_next_completed_completed_throws(self):
306306
# ex = 'ex'
307307
# scheduler = TestScheduler()
308-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
308+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
309309
# results = scheduler.start(create)
310310
# return xs.do_action(function () { }, _undefined, function () {
311311
# throw ex
@@ -316,7 +316,7 @@ def on_completed():
316316
# def test_do1422_next_error_next_throws(self):
317317
# ex = 'ex'
318318
# scheduler = TestScheduler()
319-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
319+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
320320
# results = scheduler.start(create)
321321
# return xs.do_action(function () {
322322
# raise Exception(ex)
@@ -341,7 +341,7 @@ def on_completed():
341341
# var ex, results, scheduler, xs
342342
# ex = 'ex'
343343
# scheduler = TestScheduler()
344-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
344+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
345345
# results = scheduler.start(create)
346346
# return xs.do_action(function () {
347347
# raise Exception(ex)
@@ -365,7 +365,7 @@ def on_completed():
365365
# def test_do1422_next_error_completed_completed_throws(self):
366366
# ex = 'ex'
367367
# scheduler = TestScheduler()
368-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
368+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
369369
# results = scheduler.start(create)
370370
# return xs.do_action(function () { }, function () { }, function () {
371371
# raise Exception(ex)
@@ -376,7 +376,7 @@ def on_completed():
376376
# def test_do1422_observer_next_throws(self):
377377
# ex = 'ex'
378378
# scheduler = TestScheduler()
379-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
379+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
380380
# results = scheduler.start(create)
381381
# return xs.do_action(Observer.create(function () {
382382
# raise Exception(ex)
@@ -401,9 +401,9 @@ def on_completed():
401401
# var ex, results, scheduler, xs
402402
# ex = 'ex'
403403
# scheduler = TestScheduler()
404-
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250))
404+
# xs = scheduler.create_hot_observable(on_next(150, 1), on_next(210, 2), on_completed(250)) # noqa: E501
405405
# results = scheduler.start(create)
406-
# return xs.do_action(Observer.create(function () { }, function () { }, function () {
406+
# return xs.do_action(Observer.create(function () { }, function () { }, function () { # noqa: E501
407407
# raise Exception(ex)
408408
# }))
409409

0 commit comments

Comments
 (0)