From ffb7e22f7ec72929d7f6b2d231721e154cac53de Mon Sep 17 00:00:00 2001 From: ellieayla <1447600+me@users.noreply.github.com> Date: Mon, 16 Feb 2026 16:59:41 -0500 Subject: [PATCH 1/3] Contribute stubs for datauri==1.0.0 https://github.com/eclecticiq/python-data-uri is a small library implementing parsing of the data: uri scheme defined in RFC2397. Library still supported python 3.3, and lacks any inline type comments. Library is stable and works fine in python 3.14. --- stubs/datauri/METADATA.toml | 2 ++ stubs/datauri/datauri/__init__.pyi | 1 + stubs/datauri/datauri/datauri.pyi | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 stubs/datauri/METADATA.toml create mode 100644 stubs/datauri/datauri/__init__.pyi create mode 100644 stubs/datauri/datauri/datauri.pyi diff --git a/stubs/datauri/METADATA.toml b/stubs/datauri/METADATA.toml new file mode 100644 index 000000000000..8e6242a18af0 --- /dev/null +++ b/stubs/datauri/METADATA.toml @@ -0,0 +1,2 @@ +version = "1.0.*" +upstream_repository = "https://github.com/eclecticiq/python-data-uri" diff --git a/stubs/datauri/datauri/__init__.pyi b/stubs/datauri/datauri/__init__.pyi new file mode 100644 index 000000000000..491565ffefb8 --- /dev/null +++ b/stubs/datauri/datauri/__init__.pyi @@ -0,0 +1 @@ +from .datauri import DataURIError as DataURIError, discover as discover, parse as parse diff --git a/stubs/datauri/datauri/datauri.pyi b/stubs/datauri/datauri/datauri.pyi new file mode 100644 index 000000000000..a3ce783fc227 --- /dev/null +++ b/stubs/datauri/datauri/datauri.pyi @@ -0,0 +1,20 @@ +from collections.abc import Generator +from re import Pattern +from typing import Optional + + +RE_DATA_URI: Pattern[str] # undocumented + +class DataURIError(ValueError): ... + +class ParsedDataURI: + media_type: Optional[str] + data: bytes + uri: str + + def __init__(self, media_type: Optional[str], data: bytes, uri: str) -> None: ... + def __eq__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + +def parse(uri: str) -> ParsedDataURI: ... +def discover(s: str) -> Generator[ParsedDataURI]: ... From e1b5d1ecb37a96a8f1ed87424c40f400a7f197f5 Mon Sep 17 00:00:00 2001 From: ellieayla <1447600+me@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:06:02 -0500 Subject: [PATCH 2/3] Use str|None instead of Optional --- stubs/datauri/datauri/datauri.pyi | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/stubs/datauri/datauri/datauri.pyi b/stubs/datauri/datauri/datauri.pyi index a3ce783fc227..76d81ad03dc3 100644 --- a/stubs/datauri/datauri/datauri.pyi +++ b/stubs/datauri/datauri/datauri.pyi @@ -1,18 +1,16 @@ from collections.abc import Generator from re import Pattern -from typing import Optional - RE_DATA_URI: Pattern[str] # undocumented class DataURIError(ValueError): ... class ParsedDataURI: - media_type: Optional[str] + media_type: str | None data: bytes uri: str - def __init__(self, media_type: Optional[str], data: bytes, uri: str) -> None: ... + def __init__(self, media_type: str | None, data: bytes, uri: str) -> None: ... def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... From fe44fd6d82db0e3927667c770e5cb6f86f4015db Mon Sep 17 00:00:00 2001 From: ellieayla <1447600+me@users.noreply.github.com> Date: Mon, 16 Feb 2026 19:46:01 -0500 Subject: [PATCH 3/3] Mark constant RE_DATA_URI as Final --- stubs/datauri/datauri/datauri.pyi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stubs/datauri/datauri/datauri.pyi b/stubs/datauri/datauri/datauri.pyi index 76d81ad03dc3..d9223caca30f 100644 --- a/stubs/datauri/datauri/datauri.pyi +++ b/stubs/datauri/datauri/datauri.pyi @@ -1,7 +1,8 @@ from collections.abc import Generator from re import Pattern +from typing import Final -RE_DATA_URI: Pattern[str] # undocumented +RE_DATA_URI: Final[Pattern[str]] # undocumented class DataURIError(ValueError): ...