@@ -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 )
0 commit comments