Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/hypothesis/utils/dynamicvariables.py: 96%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

23 statements  

1# This file is part of Hypothesis, which may be found at 

2# https://github.com/HypothesisWorks/hypothesis/ 

3# 

4# Copyright the Hypothesis Authors. 

5# Individual contributors are listed in AUTHORS.rst and the git log. 

6# 

7# This Source Code Form is subject to the terms of the Mozilla Public License, 

8# v. 2.0. If a copy of the MPL was not distributed with this file, You can 

9# obtain one at https://mozilla.org/MPL/2.0/. 

10 

11import threading 

12from collections.abc import Generator 

13from contextlib import contextmanager 

14from typing import Generic, TypeVar 

15 

16T = TypeVar("T") 

17 

18 

19class DynamicVariable(Generic[T]): 

20 def __init__(self, default: T) -> None: 

21 self.default = default 

22 self.data = threading.local() 

23 

24 @property 

25 def value(self) -> T: 

26 return getattr(self.data, "value", self.default) 

27 

28 @value.setter 

29 def value(self, value: T) -> None: 

30 self.data.value = value 

31 

32 @contextmanager 

33 def with_value(self, value: T) -> Generator[None, None, None]: 

34 old_value = self.value 

35 try: 

36 self.data.value = value 

37 yield 

38 finally: 

39 self.data.value = old_value