Skip to content

Commit e103b83

Browse files
committed
Hotfix: only request to read the remainder, not full length
1 parent 82fd8f4 commit e103b83

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

python_packages/jupyter_lsp/jupyter_lsp/stdio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ async def _read_content(
124124
while received_size < length and len(raw_parts) < max_parts and max_empties > 0:
125125
part = None
126126
try:
127-
part = self.stream.read(length)
127+
part = self.stream.read(length - received_size)
128128
except OSError: # pragma: no cover
129129
pass
130130
if part is None:

python_packages/jupyter_lsp/jupyter_lsp/tests/test_stdio.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
for repeat in range({repeats}):
1616
sleep({interval})
1717
print('{message}', end='')
18+
19+
if {add_excess}:
20+
print("extra", end='')
21+
1822
print()
1923
"""
2024

@@ -23,12 +27,18 @@ class CommunicatorSpawner:
2327
def __init__(self, tmp_path):
2428
self.tmp_path = tmp_path
2529

26-
def spawn_writer(self, message: str, repeats: int = 1, interval=None):
30+
def spawn_writer(
31+
self, message: str, repeats: int = 1, interval=None, add_excess=False
32+
):
2733
length = len(message) * repeats
2834
commands_file = self.tmp_path / "writer.py"
2935
commands_file.write_text(
3036
WRITER_TEMPLATE.format(
31-
length=length, repeats=repeats, interval=interval or 0, message=message
37+
length=length,
38+
repeats=repeats,
39+
interval=interval or 0,
40+
message=message,
41+
add_excess=add_excess,
3242
)
3343
)
3444
return subprocess.Popen(
@@ -50,21 +60,22 @@ async def join_process(process: subprocess.Popen, headstart=1, timeout=1):
5060

5161

5262
@pytest.mark.parametrize(
53-
"message,repeats,interval",
63+
"message,repeats,interval,add_excess",
5464
[
55-
["short", 1, None],
56-
["ab" * 10_0000, 1, None],
57-
["ab", 2, 0.01],
58-
["ab", 45, 0.01],
65+
["short", 1, None, False],
66+
["ab" * 10_0000, 1, None, False],
67+
["ab", 2, 0.01, False],
68+
["ab", 45, 0.01, False],
69+
["message", 2, 0.01, True],
5970
],
60-
ids=["short", "long", "intermittent", "intensive-intermittent"],
71+
ids=["short", "long", "intermittent", "intensive-intermittent", "with-excess"],
6172
)
6273
@pytest.mark.asyncio
63-
async def test_reader(message, repeats, interval, communicator_spawner):
74+
async def test_reader(message, repeats, interval, add_excess, communicator_spawner):
6475
queue = Queue()
6576

6677
process = communicator_spawner.spawn_writer(
67-
message=message, repeats=repeats, interval=interval
78+
message=message, repeats=repeats, interval=interval, add_excess=add_excess
6879
)
6980
reader = LspStdIoReader(stream=process.stdout, queue=queue)
7081

0 commit comments

Comments
 (0)