]>
jfr.im git - dlqueue.git/blob - venv/lib/python3.11/site-packages/pip/_vendor/tenacity/tornadoweb.py
1 # Copyright 2017 Elisey Zanko
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
18 from pip
._vendor
.tenacity
import BaseRetrying
19 from pip
._vendor
.tenacity
import DoAttempt
20 from pip
._vendor
.tenacity
import DoSleep
21 from pip
._vendor
.tenacity
import RetryCallState
23 from tornado
import gen
25 if typing
.TYPE_CHECKING
:
26 from tornado
.concurrent
import Future
28 _RetValT
= typing
.TypeVar("_RetValT")
31 class TornadoRetrying(BaseRetrying
):
32 def __init__(self
, sleep
: "typing.Callable[[float], Future[None]]" = gen
.sleep
, **kwargs
: typing
.Any
) -> None:
33 super().__init
__(**kwargs
)
36 @gen.coroutine # type: ignore[misc]
39 fn
: "typing.Callable[..., typing.Union[typing.Generator[typing.Any, typing.Any, _RetValT], Future[_RetValT]]]",
42 ) -> "typing.Generator[typing.Any, typing.Any, _RetValT]":
45 retry_state
= RetryCallState(retry_object
=self
, fn
=fn
, args
=args
, kwargs
=kwargs
)
47 do
= self
.iter(retry_state
=retry_state
)
48 if isinstance(do
, DoAttempt
):
50 result
= yield fn(*args
, **kwargs
)
51 except BaseException
: # noqa: B902
52 retry_state
.set_exception(sys
.exc_info()) # type: ignore[arg-type]
54 retry_state
.set_result(result
)
55 elif isinstance(do
, DoSleep
):
56 retry_state
.prepare_for_next_attempt()