Skip to content

Commit 11dd5fa

Browse files
committed
PYTHON-4834 Add __repr__ to IndexModel
1 parent ac198af commit 11dd5fa

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

pymongo/operations.py

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

776+
def __repr__(self) -> str:
777+
return "{}({}{})".format(
778+
self.__class__.__name__,
779+
self.document["key"],
780+
"".join(
781+
[
782+
", {}={!r}".format(key, value)
783+
for key, value in self.document.items()
784+
if not key == "key"
785+
]
786+
),
787+
)
788+
776789

777790
class SearchIndexModel:
778791
"""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)