Skip to content

Commit bd92cf7

Browse files
committed
Group parameters more logically.
1 parent a1bf000 commit bd92cf7

File tree

8 files changed

+82
-78
lines changed

8 files changed

+82
-78
lines changed

src/websockets/asyncio/client.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -200,14 +200,14 @@ class connect:
200200
should be negotiated and run.
201201
subprotocols: List of supported subprotocols, in order of decreasing
202202
preference.
203+
compression: The "permessage-deflate" extension is enabled by default.
204+
Set ``compression`` to :obj:`None` to disable it. See the
205+
:doc:`compression guide <../../topics/compression>` for details.
203206
additional_headers (HeadersLike | None): Arbitrary HTTP headers to add
204207
to the handshake request.
205208
user_agent_header: Value of the ``User-Agent`` request header.
206209
It defaults to ``"Python/x.y.z websockets/X.Y"``.
207210
Setting it to :obj:`None` removes the header.
208-
compression: The "permessage-deflate" extension is enabled by default.
209-
Set ``compression`` to :obj:`None` to disable it. See the
210-
:doc:`compression guide <../../topics/compression>` for details.
211211
process_exception: When reconnecting automatically, tell whether an
212212
error is transient or fatal. The default behavior is defined by
213213
:func:`process_exception`. Refer to its documentation for details.
@@ -275,9 +275,10 @@ def __init__(
275275
origin: Origin | None = None,
276276
extensions: Sequence[ClientExtensionFactory] | None = None,
277277
subprotocols: Sequence[Subprotocol] | None = None,
278+
compression: str | None = "deflate",
279+
# HTTP
278280
additional_headers: HeadersLike | None = None,
279281
user_agent_header: str | None = USER_AGENT,
280-
compression: str | None = "deflate",
281282
process_exception: Callable[[Exception], Exception | None] = process_exception,
282283
# Timeouts
283284
open_timeout: float | None = 10,

src/websockets/asyncio/server.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,9 @@ def handler(websocket):
617617
it has the same behavior as the
618618
:meth:`ServerProtocol.select_subprotocol
619619
<websockets.server.ServerProtocol.select_subprotocol>` method.
620+
compression: The "permessage-deflate" extension is enabled by default.
621+
Set ``compression`` to :obj:`None` to disable it. See the
622+
:doc:`compression guide <../../topics/compression>` for details.
620623
process_request: Intercept the request during the opening handshake.
621624
Return an HTTP response to force the response or :obj:`None` to
622625
continue normally. When you force an HTTP 101 Continue response, the
@@ -630,9 +633,6 @@ def handler(websocket):
630633
server_header: Value of the ``Server`` response header.
631634
It defaults to ``"Python/x.y.z websockets/X.Y"``. Setting it to
632635
:obj:`None` removes the header.
633-
compression: The "permessage-deflate" extension is enabled by default.
634-
Set ``compression`` to :obj:`None` to disable it. See the
635-
:doc:`compression guide <../../topics/compression>` for details.
636636
open_timeout: Timeout for opening connections in seconds.
637637
:obj:`None` disables the timeout.
638638
ping_interval: Interval between keepalive pings in seconds.
@@ -694,6 +694,8 @@ def __init__(
694694
]
695695
| None
696696
) = None,
697+
compression: str | None = "deflate",
698+
# HTTP
697699
process_request: (
698700
Callable[
699701
[ServerConnection, Request],
@@ -709,7 +711,6 @@ def __init__(
709711
| None
710712
) = None,
711713
server_header: str | None = SERVER,
712-
compression: str | None = "deflate",
713714
# Timeouts
714715
open_timeout: float | None = 10,
715716
ping_interval: float | None = 20,

src/websockets/sync/client.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,10 @@ def connect(
135135
origin: Origin | None = None,
136136
extensions: Sequence[ClientExtensionFactory] | None = None,
137137
subprotocols: Sequence[Subprotocol] | None = None,
138+
compression: str | None = "deflate",
139+
# HTTP
138140
additional_headers: HeadersLike | None = None,
139141
user_agent_header: str | None = USER_AGENT,
140-
compression: str | None = "deflate",
141142
# Timeouts
142143
open_timeout: float | None = 10,
143144
ping_interval: float | None = 20,
@@ -180,14 +181,14 @@ def connect(
180181
should be negotiated and run.
181182
subprotocols: List of supported subprotocols, in order of decreasing
182183
preference.
184+
compression: The "permessage-deflate" extension is enabled by default.
185+
Set ``compression`` to :obj:`None` to disable it. See the
186+
:doc:`compression guide <../../topics/compression>` for details.
183187
additional_headers (HeadersLike | None): Arbitrary HTTP headers to add
184188
to the handshake request.
185189
user_agent_header: Value of the ``User-Agent`` request header.
186190
It defaults to ``"Python/x.y.z websockets/X.Y"``.
187191
Setting it to :obj:`None` removes the header.
188-
compression: The "permessage-deflate" extension is enabled by default.
189-
Set ``compression`` to :obj:`None` to disable it. See the
190-
:doc:`compression guide <../../topics/compression>` for details.
191192
open_timeout: Timeout for opening the connection in seconds.
192193
:obj:`None` disables the timeout.
193194
ping_interval: Interval between keepalive pings in seconds.

src/websockets/sync/server.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ def serve(
340340
]
341341
| None
342342
) = None,
343+
compression: str | None = "deflate",
344+
# HTTP
343345
process_request: (
344346
Callable[
345347
[ServerConnection, Request],
@@ -355,7 +357,6 @@ def serve(
355357
| None
356358
) = None,
357359
server_header: str | None = SERVER,
358-
compression: str | None = "deflate",
359360
# Timeouts
360361
open_timeout: float | None = 10,
361362
ping_interval: float | None = 20,
@@ -423,6 +424,9 @@ def handler(websocket):
423424
it has the same behavior as the
424425
:meth:`ServerProtocol.select_subprotocol
425426
<websockets.server.ServerProtocol.select_subprotocol>` method.
427+
compression: The "permessage-deflate" extension is enabled by default.
428+
Set ``compression`` to :obj:`None` to disable it. See the
429+
:doc:`compression guide <../../topics/compression>` for details.
426430
process_request: Intercept the request during the opening handshake.
427431
Return an HTTP response to force the response. Return :obj:`None` to
428432
continue normally. When you force an HTTP 101 Continue response, the
@@ -435,9 +439,6 @@ def handler(websocket):
435439
server_header: Value of the ``Server`` response header.
436440
It defaults to ``"Python/x.y.z websockets/X.Y"``. Setting it to
437441
:obj:`None` removes the header.
438-
compression: The "permessage-deflate" extension is enabled by default.
439-
Set ``compression`` to :obj:`None` to disable it. See the
440-
:doc:`compression guide <../../topics/compression>` for details.
441442
open_timeout: Timeout for opening connections in seconds.
442443
:obj:`None` disables the timeout.
443444
ping_interval: Interval between keepalive pings in seconds.

tests/asyncio/test_client.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,21 @@ async def test_existing_socket(self):
7676
async with connect("ws://invalid/", sock=sock) as client:
7777
self.assertEqual(client.protocol.state.name, "OPEN")
7878

79+
async def test_compression_is_enabled(self):
80+
"""Client enables compression by default."""
81+
async with serve(*args) as server:
82+
async with connect(get_uri(server)) as client:
83+
self.assertEqual(
84+
[type(ext) for ext in client.protocol.extensions],
85+
[PerMessageDeflate],
86+
)
87+
88+
async def test_disable_compression(self):
89+
"""Client disables compression."""
90+
async with serve(*args) as server:
91+
async with connect(get_uri(server), compression=None) as client:
92+
self.assertEqual(client.protocol.extensions, [])
93+
7994
async def test_additional_headers(self):
8095
"""Client can set additional headers with additional_headers."""
8196
async with serve(*args) as server:
@@ -96,21 +111,6 @@ async def test_remove_user_agent(self):
96111
async with connect(get_uri(server), user_agent_header=None) as client:
97112
self.assertNotIn("User-Agent", client.request.headers)
98113

99-
async def test_compression_is_enabled(self):
100-
"""Client enables compression by default."""
101-
async with serve(*args) as server:
102-
async with connect(get_uri(server)) as client:
103-
self.assertEqual(
104-
[type(ext) for ext in client.protocol.extensions],
105-
[PerMessageDeflate],
106-
)
107-
108-
async def test_disable_compression(self):
109-
"""Client disables compression."""
110-
async with serve(*args) as server:
111-
async with connect(get_uri(server), compression=None) as client:
112-
self.assertEqual(client.protocol.extensions, [])
113-
114114
async def test_keepalive_is_enabled(self):
115115
"""Client enables keepalive and measures latency by default."""
116116
async with serve(*args) as server:

tests/asyncio/test_server.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,22 @@ def select_subprotocol(ws, subprotocols):
117117
"server rejected WebSocket connection: HTTP 500",
118118
)
119119

120+
async def test_compression_is_enabled(self):
121+
"""Server enables compression by default."""
122+
async with serve(*args) as server:
123+
async with connect(get_uri(server)) as client:
124+
await self.assertEval(
125+
client,
126+
"[type(ext).__name__ for ext in ws.protocol.extensions]",
127+
"['PerMessageDeflate']",
128+
)
129+
130+
async def test_disable_compression(self):
131+
"""Server disables compression."""
132+
async with serve(*args, compression=None) as server:
133+
async with connect(get_uri(server)) as client:
134+
await self.assertEval(client, "ws.protocol.extensions", "[]")
135+
120136
async def test_process_request_returns_none(self):
121137
"""Server runs process_request and continues the handshake."""
122138

@@ -359,22 +375,6 @@ async def test_remove_server(self):
359375
client, "'Server' in ws.response.headers", "False"
360376
)
361377

362-
async def test_compression_is_enabled(self):
363-
"""Server enables compression by default."""
364-
async with serve(*args) as server:
365-
async with connect(get_uri(server)) as client:
366-
await self.assertEval(
367-
client,
368-
"[type(ext).__name__ for ext in ws.protocol.extensions]",
369-
"['PerMessageDeflate']",
370-
)
371-
372-
async def test_disable_compression(self):
373-
"""Server disables compression."""
374-
async with serve(*args, compression=None) as server:
375-
async with connect(get_uri(server)) as client:
376-
await self.assertEval(client, "ws.protocol.extensions", "[]")
377-
378378
async def test_keepalive_is_enabled(self):
379379
"""Server enables keepalive and measures latency."""
380380
async with serve(*args, ping_interval=MS) as server:

tests/sync/test_client.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,21 @@ def test_existing_socket(self):
4141
with connect("ws://invalid/", sock=sock) as client:
4242
self.assertEqual(client.protocol.state.name, "OPEN")
4343

44+
def test_compression_is_enabled(self):
45+
"""Client enables compression by default."""
46+
with run_server() as server:
47+
with connect(get_uri(server)) as client:
48+
self.assertEqual(
49+
[type(ext) for ext in client.protocol.extensions],
50+
[PerMessageDeflate],
51+
)
52+
53+
def test_disable_compression(self):
54+
"""Client disables compression."""
55+
with run_server() as server:
56+
with connect(get_uri(server), compression=None) as client:
57+
self.assertEqual(client.protocol.extensions, [])
58+
4459
def test_additional_headers(self):
4560
"""Client can set additional headers with additional_headers."""
4661
with run_server() as server:
@@ -61,21 +76,6 @@ def test_remove_user_agent(self):
6176
with connect(get_uri(server), user_agent_header=None) as client:
6277
self.assertNotIn("User-Agent", client.request.headers)
6378

64-
def test_compression_is_enabled(self):
65-
"""Client enables compression by default."""
66-
with run_server() as server:
67-
with connect(get_uri(server)) as client:
68-
self.assertEqual(
69-
[type(ext) for ext in client.protocol.extensions],
70-
[PerMessageDeflate],
71-
)
72-
73-
def test_disable_compression(self):
74-
"""Client disables compression."""
75-
with run_server() as server:
76-
with connect(get_uri(server), compression=None) as client:
77-
self.assertEqual(client.protocol.extensions, [])
78-
7979
def test_keepalive_is_enabled(self):
8080
"""Client enables keepalive and measures latency by default."""
8181
with run_server() as server:

tests/sync/test_server.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,22 @@ def select_subprotocol(ws, subprotocols):
115115
"server rejected WebSocket connection: HTTP 500",
116116
)
117117

118+
def test_compression_is_enabled(self):
119+
"""Server enables compression by default."""
120+
with run_server() as server:
121+
with connect(get_uri(server)) as client:
122+
self.assertEval(
123+
client,
124+
"[type(ext).__name__ for ext in ws.protocol.extensions]",
125+
"['PerMessageDeflate']",
126+
)
127+
128+
def test_disable_compression(self):
129+
"""Server disables compression."""
130+
with run_server(compression=None) as server:
131+
with connect(get_uri(server)) as client:
132+
self.assertEval(client, "ws.protocol.extensions", "[]")
133+
118134
def test_process_request_returns_none(self):
119135
"""Server runs process_request and continues the handshake."""
120136

@@ -220,22 +236,6 @@ def test_remove_server(self):
220236
with connect(get_uri(server)) as client:
221237
self.assertEval(client, "'Server' in ws.response.headers", "False")
222238

223-
def test_compression_is_enabled(self):
224-
"""Server enables compression by default."""
225-
with run_server() as server:
226-
with connect(get_uri(server)) as client:
227-
self.assertEval(
228-
client,
229-
"[type(ext).__name__ for ext in ws.protocol.extensions]",
230-
"['PerMessageDeflate']",
231-
)
232-
233-
def test_disable_compression(self):
234-
"""Server disables compression."""
235-
with run_server(compression=None) as server:
236-
with connect(get_uri(server)) as client:
237-
self.assertEval(client, "ws.protocol.extensions", "[]")
238-
239239
def test_keepalive_is_enabled(self):
240240
"""Server enables keepalive and measures latency."""
241241
with run_server(ping_interval=MS) as server:

0 commit comments

Comments
 (0)