Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions yutori/navigator/n2_payload.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,23 @@
DEFAULT_MAX_MESSAGES_BYTES = MAX_REQUEST_BODY_BYTES - REQUEST_ENVELOPE_ALLOWANCE_BYTES


def _decode_data_url(url: str) -> "tuple[bytes, str]":
def _data_url_media_type(url: str) -> str:
"""The media type of a base64 data URL, without decoding its payload."""
if not isinstance(url, str) or not url.startswith("data:") or "," not in url:
raise ValueError("n2 screenshots must be base64 data URLs")
header, encoded = url.split(",", 1)
header = url.split(",", 1)[0]
if ";base64" not in header:
raise ValueError("n2 screenshots must use base64 data URLs")
return base64.b64decode(encoded), header[5:].split(";", 1)[0]
return header[5:].split(";", 1)[0]


def _decode_data_url(url: str) -> "tuple[bytes, str]":
# Validation and header parsing live in _data_url_media_type; this only adds
# the base64 decode, so the two share one definition of what a valid n2
# screenshot data URL looks like.
media_type = _data_url_media_type(url)
_, encoded = url.split(",", 1)
return base64.b64decode(encoded), media_type


def image_dimensions(url: str) -> "tuple[int, int]":
Expand All @@ -59,16 +69,6 @@ def image_dimensions(url: str) -> "tuple[int, int]":
return image.size


def _data_url_media_type(url: str) -> str:
"""The media type of a base64 data URL, without decoding its payload."""
if not isinstance(url, str) or not url.startswith("data:") or "," not in url:
raise ValueError("n2 screenshots must be base64 data URLs")
header = url.split(",", 1)[0]
if ";base64" not in header:
raise ValueError("n2 screenshots must use base64 data URLs")
return header[5:].split(";", 1)[0]


def prepare_n2_image_data_url(url: str, image_format: str = DEFAULT_IMAGE_FORMAT) -> str:
"""Re-encode an image data URL to ``image_format``; returned unchanged when it already is.

Expand Down