Skip to content

Commit 717fb47

Browse files
authored
PYTHON-5061 - Add an API to extend the bson TypeRegistry (#2345)
1 parent 106343a commit 717fb47

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

bson/codec_options.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,16 @@ def __init__(
160160
f"Expected an instance of {TypeEncoder.__name__}, {TypeDecoder.__name__}, or {TypeCodec.__name__}, got {codec!r} instead"
161161
)
162162

163+
@property
164+
def codecs(self) -> list[TypeEncoder | TypeDecoder | TypeCodec]:
165+
"""The list of type codecs in this registry."""
166+
return self.__type_codecs
167+
168+
@property
169+
def fallback_encoder(self) -> Optional[_Fallback]:
170+
"""The fallback encoder in this registry."""
171+
return self._fallback_encoder
172+
163173
def _validate_type_encoder(self, codec: _Codec) -> None:
164174
from bson import _BUILT_IN_TYPES
165175

doc/changelog.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Changelog
22
=========
33

4+
Changes in Version 4.14.0 (XXXX/XX/XX)
5+
--------------------------------------
6+
PyMongo 4.14 brings a number of changes including:
7+
8+
- Added :attr:`bson.codec_options.TypeRegistry.codecs` and :attr:`bson.codec_options.TypeRegistry.fallback_encoder` properties
9+
to allow users to directly access the type codecs and fallback encoder for a given :class:`bson.codec_options.TypeRegistry`.
10+
411
Changes in Version 4.13.0 (2025/05/14)
512
--------------------------------------
613

test/asynchronous/test_custom_types.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,15 @@ def test_initialize_fail(self):
579579
with self.assertRaisesRegex(TypeError, err_msg):
580580
TypeRegistry(fallback_encoder="hello") # type: ignore[arg-type]
581581

582+
def test_type_registry_codecs(self):
583+
codec_instances = [codec() for codec in self.codecs]
584+
type_registry = TypeRegistry(codec_instances)
585+
self.assertEqual(type_registry.codecs, codec_instances)
586+
587+
def test_type_registry_fallback(self):
588+
type_registry = TypeRegistry(fallback_encoder=self.fallback_encoder)
589+
self.assertEqual(type_registry.fallback_encoder, self.fallback_encoder)
590+
582591
def test_type_registry_repr(self):
583592
codec_instances = [codec() for codec in self.codecs]
584593
type_registry = TypeRegistry(codec_instances)

test/test_custom_types.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,15 @@ def test_initialize_fail(self):
579579
with self.assertRaisesRegex(TypeError, err_msg):
580580
TypeRegistry(fallback_encoder="hello") # type: ignore[arg-type]
581581

582+
def test_type_registry_codecs(self):
583+
codec_instances = [codec() for codec in self.codecs]
584+
type_registry = TypeRegistry(codec_instances)
585+
self.assertEqual(type_registry.codecs, codec_instances)
586+
587+
def test_type_registry_fallback(self):
588+
type_registry = TypeRegistry(fallback_encoder=self.fallback_encoder)
589+
self.assertEqual(type_registry.fallback_encoder, self.fallback_encoder)
590+
582591
def test_type_registry_repr(self):
583592
codec_instances = [codec() for codec in self.codecs]
584593
type_registry = TypeRegistry(codec_instances)

0 commit comments

Comments
 (0)