Skip to content

Commit 09ef323

Browse files
committed
PYTHON-4834 Add __repr__ to IndexModel
1 parent ac198af commit 09ef323

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

pymongo/operations.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,21 @@ def document(self) -> dict[str, Any]:
773773
"""
774774
return self.__document
775775

776+
def __repr__(self) -> str:
777+
im = "%s(%s%s)" % (
778+
self.__class__.__name__,
779+
self.document["key"],
780+
"".join(
781+
[
782+
", %s=%r" % (key, value)
783+
for key, value in self.document.items()
784+
if not key == "key"
785+
]
786+
),
787+
)
788+
print(im)
789+
return im
790+
776791

777792
class SearchIndexModel:
778793
"""Represents a search index to create."""

test/test_collection.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,6 +2253,35 @@ def afind(*args, **kwargs):
22532253
for helper, args in helpers:
22542254
helper(*args, let={}) # type: ignore
22552255

2256+
def assertRepr(self, obj):
2257+
new_obj = eval(repr(obj))
2258+
self.assertEqual(type(new_obj), type(obj))
2259+
self.assertEqual(repr(new_obj), repr(obj))
2260+
2261+
def test_index_model_repr(self):
2262+
self.assertRepr(IndexModel("hello"))
2263+
self.assertRepr(IndexModel([("hello", DESCENDING), ("world", ASCENDING)]))
2264+
self.assertRepr(IndexModel([("hello", DESCENDING), ("world", ASCENDING)], name="hello_world"))
2265+
2266+
self.assertRepr(IndexModel("name", name="name"))
2267+
self.assertRepr(IndexModel("unique", unique=False))
2268+
self.assertRepr(IndexModel("background", background=True))
2269+
self.assertRepr(IndexModel("sparse", sparse=True))
2270+
self.assertRepr(IndexModel("bucketSize", bucketSize=1))
2271+
self.assertRepr(IndexModel("min", min=1))
2272+
self.assertRepr(IndexModel("max", max=1))
2273+
self.assertRepr(IndexModel("expireAfterSeconds", expireAfterSeconds=1))
2274+
self.assertRepr(IndexModel("partialFilterExpression", partialFilterExpression={"hello": "world"}))
2275+
2276+
from pymongo.collation import Collation
2277+
coll = Collation(locale="en_US")
2278+
self.assertRepr(IndexModel("collation", collation=coll))
2279+
self.assertRepr(IndexModel("wildcardProjection", wildcardProjection={ "$**": 1}))
2280+
self.assertRepr(IndexModel("hidden", hidden=False))
2281+
2282+
self.assertEqual(repr(IndexModel("hello")), "IndexModel({'hello': 1}, name='hello_1')")
2283+
self.assertEqual(repr(IndexModel({'hello': 1, 'world': -1})), "IndexModel({'hello': 1, 'world': -1}, name='hello_1_world_-1')")
2284+
22562285

22572286
if __name__ == "__main__":
22582287
unittest.main()

0 commit comments

Comments
 (0)