From 8ef1b27a3ea241091e1e2030e8ca458cd707dec9 Mon Sep 17 00:00:00 2001 From: Jib Date: Fri, 17 Jan 2025 14:48:03 -0500 Subject: [PATCH 1/5] fixed typing on binary.py --- bson/binary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bson/binary.py b/bson/binary.py index 6dc5058c2c..fc6679188f 100644 --- a/bson/binary.py +++ b/bson/binary.py @@ -405,14 +405,14 @@ def from_vector(cls: Type[Binary], vector: BinaryVector) -> Binary: @classmethod @overload def from_vector( - cls: Type[Binary], vector: list[int, float], dtype: BinaryVectorDtype, padding: int = 0 + cls: Type[Binary], vector: list[int | float], dtype: BinaryVectorDtype, padding: int = 0 ) -> Binary: ... @classmethod def from_vector( cls: Type[Binary], - vector: Union[BinaryVector, list[int, float]], + vector: Union[BinaryVector, list[int | float]], dtype: Optional[BinaryVectorDtype] = None, padding: Optional[int] = None, ) -> Binary: From 05cae254cb2c2299012f65bd3c90ca4dd73b6ffa Mon Sep 17 00:00:00 2001 From: Jib Date: Fri, 17 Jan 2025 15:10:45 -0500 Subject: [PATCH 2/5] ruff format --- bson/binary.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bson/binary.py b/bson/binary.py index fc6679188f..9098446de9 100644 --- a/bson/binary.py +++ b/bson/binary.py @@ -405,14 +405,17 @@ def from_vector(cls: Type[Binary], vector: BinaryVector) -> Binary: @classmethod @overload def from_vector( - cls: Type[Binary], vector: list[int | float], dtype: BinaryVectorDtype, padding: int = 0 + cls: Type[Binary], + vector: list[Union[int, float]], + dtype: BinaryVectorDtype, + padding: int = 0, ) -> Binary: ... @classmethod def from_vector( cls: Type[Binary], - vector: Union[BinaryVector, list[int | float]], + vector: Union[BinaryVector, list[Union[int, float]]], dtype: Optional[BinaryVectorDtype] = None, padding: Optional[int] = None, ) -> Binary: From 3d7ae53913817de502504d52a5bafe0443691741 Mon Sep 17 00:00:00 2001 From: Jib Date: Fri, 17 Jan 2025 15:32:10 -0500 Subject: [PATCH 3/5] use Union[list] --- bson/binary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bson/binary.py b/bson/binary.py index 9098446de9..f90dce226c 100644 --- a/bson/binary.py +++ b/bson/binary.py @@ -406,7 +406,7 @@ def from_vector(cls: Type[Binary], vector: BinaryVector) -> Binary: @overload def from_vector( cls: Type[Binary], - vector: list[Union[int, float]], + vector: Union[list[int], list[float]], dtype: BinaryVectorDtype, padding: int = 0, ) -> Binary: @@ -415,7 +415,7 @@ def from_vector( @classmethod def from_vector( cls: Type[Binary], - vector: Union[BinaryVector, list[Union[int, float]]], + vector: Union[BinaryVector, list[int], list[float]], dtype: Optional[BinaryVectorDtype] = None, padding: Optional[int] = None, ) -> Binary: From c3cdc2726981888d19cfb2484cf667a818a23f2a Mon Sep 17 00:00:00 2001 From: Jib Date: Fri, 17 Jan 2025 17:48:26 -0500 Subject: [PATCH 4/5] added typing tests --- test/test_typing.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/test/test_typing.py b/test/test_typing.py index bfe4d032c1..bbb188057d 100644 --- a/test/test_typing.py +++ b/test/test_typing.py @@ -15,6 +15,7 @@ """Test that each file in mypy_fails/ actually fails mypy, and test some sample client code that uses PyMongo typings. """ + from __future__ import annotations import os @@ -37,7 +38,8 @@ if TYPE_CHECKING: from typing_extensions import NotRequired, TypedDict - from bson import ObjectId + from bson import Binary, ObjectId + from bson.binary import BinaryVector, BinaryVectorDtype class Movie(TypedDict): name: str @@ -591,5 +593,19 @@ def test_son_document_type(self) -> None: obj["a"] = 1 +class TestBSONFromVectorType(unittest.TestCase): + def test_from_vector_binaryvector(self): + list_vector = BinaryVector([127, 7], BinaryVectorDtype.INT8) + Binary.from_vector(list_vector) + + def test_from_vector_list_int(self): + list_vector = [127, 7] + Binary.from_vector(list_vector, BinaryVectorDtype.INT8) + + def test_from_vector_list_float(self): + list_vector = [127.0, 7.0] + Binary.from_vector(list_vector, BinaryVectorDtype.INT8) + + if __name__ == "__main__": unittest.main() From b575225b04cdca24950a615ddcc9305cb2e2447b Mon Sep 17 00:00:00 2001 From: Jib Date: Fri, 17 Jan 2025 22:52:15 -0500 Subject: [PATCH 5/5] only typecheck --- test/test_typing.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_typing.py b/test/test_typing.py index bbb188057d..65937020d2 100644 --- a/test/test_typing.py +++ b/test/test_typing.py @@ -594,14 +594,17 @@ def test_son_document_type(self) -> None: class TestBSONFromVectorType(unittest.TestCase): + @only_type_check def test_from_vector_binaryvector(self): list_vector = BinaryVector([127, 7], BinaryVectorDtype.INT8) Binary.from_vector(list_vector) + @only_type_check def test_from_vector_list_int(self): list_vector = [127, 7] Binary.from_vector(list_vector, BinaryVectorDtype.INT8) + @only_type_check def test_from_vector_list_float(self): list_vector = [127.0, 7.0] Binary.from_vector(list_vector, BinaryVectorDtype.INT8)