Skip to content

Commit ef54ef3

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

File tree

3 files changed

+18
-27
lines changed

3 files changed

+18
-27
lines changed

newsfragments/3403.deprecated.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Trying to use absolute deadlines on a `trio.CancelScope` constructed
2+
with a relative deadline now raises, after being deprecated since Trio
3+
0.27.0.

src/trio/_core/_run.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -808,13 +808,9 @@ def deadline(self) -> float:
808808
"""
809809
if self._relative_deadline != inf:
810810
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,
811+
raise RuntimeError(
812+
"Unentered relative cancel scope does not have an absolute deadline."
816813
)
817-
return current_time() + self._relative_deadline
818814
return self._deadline
819815

820816
@deadline.setter
@@ -823,13 +819,9 @@ def deadline(self, new_deadline: float) -> None:
823819
raise ValueError("deadline must not be NaN")
824820
if self._relative_deadline != inf:
825821
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,
822+
raise RuntimeError(
823+
"Unentered relative cancel scope does not have an absolute deadline."
831824
)
832-
self._relative_deadline = inf
833825
with self._might_change_registered_deadline():
834826
self._deadline = float(new_deadline)
835827

@@ -852,7 +844,7 @@ def relative_deadline(self) -> float:
852844
elif self._deadline != inf:
853845
assert self._relative_deadline == inf
854846
raise RuntimeError(
855-
"unentered non-relative cancel scope does not have a relative deadline",
847+
"Unentered non-relative cancel scope does not have a relative deadline",
856848
)
857849
return self._relative_deadline
858850

@@ -868,7 +860,7 @@ def relative_deadline(self, new_relative_deadline: float) -> None:
868860
elif self._deadline != inf:
869861
assert self._relative_deadline == inf
870862
raise RuntimeError(
871-
"unentered non-relative cancel scope does not have a relative deadline",
863+
"Unentered non-relative cancel scope does not have a relative deadline",
872864
)
873865
else:
874866
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)