Skip to content

Commit b97ab8b

Browse files
committed
Disallow absolute deadlines for relative cancel scopes
1 parent 3dd35d7 commit b97ab8b

File tree

2 files changed

+15
-28
lines changed

2 files changed

+15
-28
lines changed

src/trio/_core/_run.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -807,14 +807,9 @@ def deadline(self) -> float:
807807
the :class:`~trio.CancelScope` constructor.
808808
"""
809809
if self._relative_deadline != inf:
810-
assert self._deadline == inf
811-
warnings.warn(
812-
DeprecationWarning(
813-
"unentered relative cancel scope does not have an absolute deadline. Use `.relative_deadline`",
814-
),
815-
stacklevel=2,
810+
raise RuntimeError(
811+
"Unentered relative cancel scope does not have an absolute deadline."
816812
)
817-
return current_time() + self._relative_deadline
818813
return self._deadline
819814

820815
@deadline.setter
@@ -823,13 +818,9 @@ def deadline(self, new_deadline: float) -> None:
823818
raise ValueError("deadline must not be NaN")
824819
if self._relative_deadline != inf:
825820
assert self._deadline == inf
826-
warnings.warn(
827-
DeprecationWarning(
828-
"unentered relative cancel scope does not have an absolute deadline. Transforming into an absolute cancel scope. First set `.relative_deadline = math.inf` if you do want an absolute cancel scope.",
829-
),
830-
stacklevel=2,
821+
raise RuntimeError(
822+
"Unentered relative cancel scope does not have an absolute deadline."
831823
)
832-
self._relative_deadline = inf
833824
with self._might_change_registered_deadline():
834825
self._deadline = float(new_deadline)
835826

@@ -852,7 +843,7 @@ def relative_deadline(self) -> float:
852843
elif self._deadline != inf:
853844
assert self._relative_deadline == inf
854845
raise RuntimeError(
855-
"unentered non-relative cancel scope does not have a relative deadline",
846+
"Unentered non-relative cancel scope does not have a relative deadline",
856847
)
857848
return self._relative_deadline
858849

@@ -868,7 +859,7 @@ def relative_deadline(self, new_relative_deadline: float) -> None:
868859
elif self._deadline != inf:
869860
assert self._relative_deadline == inf
870861
raise RuntimeError(
871-
"unentered non-relative cancel scope does not have a relative deadline",
862+
"Unentered non-relative cancel scope does not have a relative deadline",
872863
)
873864
else:
874865
self._relative_deadline = new_relative_deadline

src/trio/_tests/test_timeouts.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -246,26 +246,22 @@ async def test_timeout_deadline_on_entry(mock_clock: _core.MockClock) -> None:
246246
async def test_invalid_access_unentered(mock_clock: _core.MockClock) -> None:
247247
cs = move_on_after(5)
248248
mock_clock.jump(3)
249-
start = _core.current_time()
250249

251-
match_str = "^unentered relative cancel scope does not have an absolute deadline"
252-
with pytest.warns(DeprecationWarning, match=match_str):
253-
assert cs.deadline == start + 5
254-
mock_clock.jump(1)
255-
# this is hella sketchy, but they *have* been warned
256-
with pytest.warns(DeprecationWarning, match=match_str):
257-
assert cs.deadline == start + 6
250+
match_str = "^Unentered relative cancel scope does not have an absolute deadline"
251+
with pytest.raises(RuntimeError, match=match_str):
252+
print("SHOULD NOT PRINT! deadline:", cs.deadline)
258253

259-
with pytest.warns(DeprecationWarning, match=match_str):
254+
with pytest.raises(RuntimeError, match=match_str):
260255
cs.deadline = 7
261-
# now transformed into absolute
262-
assert cs.deadline == 7
263-
assert not cs.is_relative
256+
257+
# nothing happened!
258+
assert cs.relative_deadline == 5
259+
assert cs.is_relative
264260

265261
cs = move_on_at(5)
266262

267263
match_str = (
268-
"^unentered non-relative cancel scope does not have a relative deadline$"
264+
"^Unentered non-relative cancel scope does not have a relative deadline$"
269265
)
270266
with pytest.raises(RuntimeError, match=match_str):
271267
assert cs.relative_deadline

0 commit comments

Comments
 (0)