Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/websockets/extensions/base.py: 79%

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

24 statements  

1from __future__ import annotations 

2 

3from collections.abc import Sequence 

4 

5from ..frames import Frame 

6from ..typing import ExtensionName, ExtensionParameter 

7 

8 

9__all__ = ["Extension", "ClientExtensionFactory", "ServerExtensionFactory"] 

10 

11 

12class Extension: 

13 """ 

14 Base class for extensions. 

15 

16 """ 

17 

18 name: ExtensionName 

19 """Extension identifier.""" 

20 

21 def decode(self, frame: Frame, *, max_size: int | None = None) -> Frame: 

22 """ 

23 Decode an incoming frame. 

24 

25 Args: 

26 frame: Incoming frame. 

27 max_size: Maximum payload size in bytes. 

28 

29 Returns: 

30 Decoded frame. 

31 

32 Raises: 

33 PayloadTooBig: If decoding the payload exceeds ``max_size``. 

34 

35 """ 

36 raise NotImplementedError 

37 

38 def encode(self, frame: Frame) -> Frame: 

39 """ 

40 Encode an outgoing frame. 

41 

42 Args: 

43 frame: Outgoing frame. 

44 

45 Returns: 

46 Encoded frame. 

47 

48 """ 

49 raise NotImplementedError 

50 

51 

52class ClientExtensionFactory: 

53 """ 

54 Base class for client-side extension factories. 

55 

56 """ 

57 

58 name: ExtensionName 

59 """Extension identifier.""" 

60 

61 def get_request_params(self) -> Sequence[ExtensionParameter]: 

62 """ 

63 Build parameters to send to the server for this extension. 

64 

65 Returns: 

66 Parameters to send to the server. 

67 

68 """ 

69 raise NotImplementedError 

70 

71 def process_response_params( 

72 self, 

73 params: Sequence[ExtensionParameter], 

74 accepted_extensions: Sequence[Extension], 

75 ) -> Extension: 

76 """ 

77 Process parameters received from the server. 

78 

79 Args: 

80 params: Parameters received from the server for this extension. 

81 accepted_extensions: List of previously accepted extensions. 

82 

83 Returns: 

84 An extension instance. 

85 

86 Raises: 

87 NegotiationError: If parameters aren't acceptable. 

88 

89 """ 

90 raise NotImplementedError 

91 

92 

93class ServerExtensionFactory: 

94 """ 

95 Base class for server-side extension factories. 

96 

97 """ 

98 

99 name: ExtensionName 

100 """Extension identifier.""" 

101 

102 def process_request_params( 

103 self, 

104 params: Sequence[ExtensionParameter], 

105 accepted_extensions: Sequence[Extension], 

106 ) -> tuple[list[ExtensionParameter], Extension]: 

107 """ 

108 Process parameters received from the client. 

109 

110 Args: 

111 params: Parameters received from the client for this extension. 

112 accepted_extensions: List of previously accepted extensions. 

113 

114 Returns: 

115 To accept the offer, parameters to send to the client for this 

116 extension and an extension instance. 

117 

118 Raises: 

119 NegotiationError: To reject the offer, if parameters received from 

120 the client aren't acceptable. 

121 

122 """ 

123 raise NotImplementedError