Skip to content

Commit 76f09e0

Browse files
authored
Merge pull request #93 from JaagupAverin/expose_fn
2 parents 5507819 + b0d8f6d commit 76f09e0

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

smpclient/__init__.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,20 @@ def _cbor_integer_size(integer: int) -> int:
415415
# https://datatracker.ietf.org/doc/html/rfc8949#name-core-deterministic-encoding
416416
return 0 if integer < 24 else 1 if integer <= 0xFF else 2 if integer <= 0xFFFF else 4
417417

418-
def _get_max_cbor_and_data_size(self, request: smpmsg.WriteRequest) -> tuple[int, int]:
419-
"""Given an `ImageUploadWrite`, return the maximum CBOR size and data size."""
418+
def get_max_cbor_and_data_size(self, request: smpmsg.WriteRequest) -> tuple[int, int]:
419+
"""Given a `WriteRequest`, return the maximum CBOR size and data size.
420+
421+
Args:
422+
request: request with all known fields filled out (only an unknown data
423+
field may be left at an empty value)
424+
425+
Returns:
426+
Tuple of (max_cbor_bytes, max_data_bytes), where:
427+
max_cbor_bytes: maximum CBOR-encoded bytes this packet will occupy if
428+
`max_data_bytes` are all used.
429+
max_data_bytes: maximum amount of raw payload that can be stuffed into the
430+
currently-empty data field.
431+
"""
420432

421433
# given empty data in the request, how many bytes are available for the data?
422434
unencoded_bytes_available: Final = self._transport.max_unencoded_size - len(bytes(request))
@@ -441,7 +453,7 @@ def _maximize_image_upload_write_packet(
441453
"""Given an `ImageUploadWrite` with empty `data`, return the largest packet possible."""
442454

443455
h: Final = request.header
444-
cbor_size, data_size = self._get_max_cbor_and_data_size(request)
456+
cbor_size, data_size = self.get_max_cbor_and_data_size(request)
445457

446458
if data_size > len(image) - request.off: # final packet
447459
data_size = len(image) - request.off
@@ -468,7 +480,7 @@ def _maximize_image_upload_write_packet(
468480
def _maximize_file_upload_packet(self, request: FileUpload, data: bytes) -> FileUpload:
469481
"""Given an `FileUpload` with empty `data`, return the largest packet possible."""
470482
h: Final = request.header
471-
cbor_size, data_size = self._get_max_cbor_and_data_size(request)
483+
cbor_size, data_size = self.get_max_cbor_and_data_size(request)
472484
if data_size > len(data) - request.off: # final packet
473485
data_size = len(data) - request.off
474486
cbor_size = h.length + data_size + self._cbor_integer_size(data_size)

smpclient/extensions/intercreate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def _ic_maximize_packet(self, request: ic.ImageUploadWrite, data: bytes) -> ic.I
4343
"""Given an `ic.ImageUploadWrite` with empty `data`, return the largest packet possible."""
4444

4545
h: Final = request.header
46-
cbor_size, data_size = self._get_max_cbor_and_data_size(request)
46+
cbor_size, data_size = self.get_max_cbor_and_data_size(request)
4747

4848
if data_size > len(data) - request.off: # final packet
4949
data_size = len(data) - request.off

0 commit comments

Comments
 (0)