Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/starlette/exceptions.py: 52%

23 statements  

« prev     ^ index     » next       coverage.py v7.2.2, created at 2023-03-26 06:12 +0000

1import http 

2import typing 

3import warnings 

4 

5__all__ = ("HTTPException", "WebSocketException") 

6 

7 

8class HTTPException(Exception): 

9 def __init__( 

10 self, 

11 status_code: int, 

12 detail: typing.Optional[str] = None, 

13 headers: typing.Optional[dict] = None, 

14 ) -> None: 

15 if detail is None: 

16 detail = http.HTTPStatus(status_code).phrase 

17 self.status_code = status_code 

18 self.detail = detail 

19 self.headers = headers 

20 

21 def __repr__(self) -> str: 

22 class_name = self.__class__.__name__ 

23 return f"{class_name}(status_code={self.status_code!r}, detail={self.detail!r})" 

24 

25 

26class WebSocketException(Exception): 

27 def __init__(self, code: int, reason: typing.Optional[str] = None) -> None: 

28 self.code = code 

29 self.reason = reason or "" 

30 

31 def __repr__(self) -> str: 

32 class_name = self.__class__.__name__ 

33 return f"{class_name}(code={self.code!r}, reason={self.reason!r})" 

34 

35 

36__deprecated__ = "ExceptionMiddleware" 

37 

38 

39def __getattr__(name: str) -> typing.Any: # pragma: no cover 

40 if name == __deprecated__: 

41 from starlette.middleware.exceptions import ExceptionMiddleware 

42 

43 warnings.warn( 

44 f"{__deprecated__} is deprecated on `starlette.exceptions`. " 

45 f"Import it from `starlette.middleware.exceptions` instead.", 

46 category=DeprecationWarning, 

47 stacklevel=3, 

48 ) 

49 return ExceptionMiddleware 

50 raise AttributeError(f"module '{__name__}' has no attribute '{name}'") 

51 

52 

53def __dir__() -> typing.List[str]: 

54 return sorted(list(__all__) + [__deprecated__]) # pragma: no cover