Skip to content

Commit aad72d0

Browse files
authored
Merge pull request #97 from isolovey/optimize_multipart
Optimize multipart message decoding
2 parents 10a2538 + f0b58c1 commit aad72d0

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/dicomweb_client/web.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ def _decode_multipart_message(
673673

674674
marker = b''.join((b'--', boundary))
675675
delimiter = b''.join((b'\r\n', marker))
676-
data = b''
676+
data = bytearray()
677677
j = 0
678678
with response:
679679
logger.debug('decode message content')
@@ -685,16 +685,24 @@ def _decode_multipart_message(
685685
if stream:
686686
logger.debug(f'decode message content chunk #{i}')
687687
data += chunk
688-
while delimiter in data:
688+
689+
prev_part_index = 0
690+
while True:
691+
delimiter_index = data.find(delimiter, prev_part_index)
692+
if delimiter_index < 0:
693+
break
689694
logger.debug(f'decode message part #{j}')
690-
part, data = data.split(delimiter, maxsplit=1)
691-
content = self._extract_part_content(part)
695+
content = self._extract_part_content(
696+
data[prev_part_index:delimiter_index]
697+
)
698+
prev_part_index = delimiter_index + len(delimiter)
692699
j += 1
693700
if content is not None:
694701
logger.debug(
695702
f'extracted {len(content)} bytes from part #{j}'
696703
)
697704
yield content
705+
data = data[prev_part_index:]
698706

699707
content = self._extract_part_content(data)
700708
if content is not None:

0 commit comments

Comments
 (0)