Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/httpcore/_trace.py: 27%
33 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-26 06:12 +0000
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-26 06:12 +0000
1from types import TracebackType
2from typing import Any, Dict, Optional, Type
4from ._models import Request
7class Trace:
8 def __init__(
9 self, name: str, request: Request, kwargs: Optional[Dict[str, Any]] = None
10 ) -> None:
11 self.name = name
12 self.trace = request.extensions.get("trace")
13 self.kwargs = kwargs or {}
14 self.return_value: Any = None
16 def __enter__(self) -> "Trace":
17 if self.trace is not None:
18 info = self.kwargs
19 self.trace(f"{self.name}.started", info)
20 return self
22 def __exit__(
23 self,
24 exc_type: Optional[Type[BaseException]] = None,
25 exc_value: Optional[BaseException] = None,
26 traceback: Optional[TracebackType] = None,
27 ) -> None:
28 if self.trace is not None:
29 if exc_value is None:
30 info = {"return_value": self.return_value}
31 self.trace(f"{self.name}.complete", info)
32 else:
33 info = {"exception": exc_value}
34 self.trace(f"{self.name}.failed", info)
36 async def __aenter__(self) -> "Trace":
37 if self.trace is not None:
38 info = self.kwargs
39 await self.trace(f"{self.name}.started", info)
40 return self
42 async def __aexit__(
43 self,
44 exc_type: Optional[Type[BaseException]] = None,
45 exc_value: Optional[BaseException] = None,
46 traceback: Optional[TracebackType] = None,
47 ) -> None:
48 if self.trace is not None:
49 if exc_value is None:
50 info = {"return_value": self.return_value}
51 await self.trace(f"{self.name}.complete", info)
52 else:
53 info = {"exception": exc_value}
54 await self.trace(f"{self.name}.failed", info)