Skip to content

Commit 6674a24

Browse files
committed
PYTHON-4834 Add __repr__ to IndexModel
- Review fixes
1 parent 11dd5fa commit 6674a24

File tree

5 files changed

+73
-35
lines changed

5 files changed

+73
-35
lines changed

pymongo/operations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ def __repr__(self) -> str:
781781
[
782782
", {}={!r}".format(key, value)
783783
for key, value in self.document.items()
784-
if not key == "key"
784+
if key != "key"
785785
]
786786
),
787787
)

test/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import pymongo
7070
import pymongo.errors
7171
from bson.son import SON
72+
from pymongo import IndexModel # noqa
7273
from pymongo.common import partition_node
7374
from pymongo.hello import HelloCompat
7475
from pymongo.server_api import ServerApi
@@ -866,6 +867,11 @@ def assertEqualCommand(self, expected, actual, msg=None):
866867
def assertEqualReply(self, expected, actual, msg=None):
867868
self.assertEqual(sanitize_reply(expected), sanitize_reply(actual), msg)
868869

870+
def assertRepr(self, obj):
871+
new_obj = eval(repr(obj))
872+
self.assertEqual(type(new_obj), type(obj))
873+
self.assertEqual(repr(new_obj), repr(obj))
874+
869875
@contextmanager
870876
def fail_point(self, command_args):
871877
cmd_on = SON([("configureFailPoint", "failCommand")])

test/test_collection.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,35 +2253,6 @@ 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-
22852256

22862257
if __name__ == "__main__":
22872258
unittest.main()

test/test_connection_monitoring.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -421,11 +421,6 @@ def test_5_check_out_fails_auth_error(self):
421421
#
422422
# Extra non-spec tests
423423
#
424-
def assertRepr(self, obj):
425-
new_obj = eval(repr(obj))
426-
self.assertEqual(type(new_obj), type(obj))
427-
self.assertEqual(repr(new_obj), repr(obj))
428-
429424
def test_events_repr(self):
430425
host = ("localhost", 27017)
431426
self.assertRepr(ConnectionCheckedInEvent(host, 1))

test/test_operations.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Copyright 2009-present MongoDB, Inc.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
"""Test the operations module."""
16+
17+
from test import UnitTest
18+
from pymongo import ASCENDING, DESCENDING
19+
from pymongo.operations import IndexModel
20+
from pymongo.collation import Collation
21+
22+
23+
class TestOperations(UnitTest):
24+
"""Test Operations module including methods:
25+
_Op, _DeleteOp, _UpdateOp,
26+
DeleteOne, DeleteMany,
27+
InsertOne,
28+
ReplaceOne,
29+
UpdateOne, UpdateMany,
30+
IndexModel,
31+
SearchIndexModel"""
32+
33+
def test_index_model_repr(self):
34+
# Based on examples in test_collection.py
35+
self.assertRepr(IndexModel("hello"))
36+
self.assertRepr(IndexModel([("hello", DESCENDING), ("world", ASCENDING)]))
37+
self.assertRepr(
38+
IndexModel([("hello", DESCENDING), ("world", ASCENDING)], name="hello_world")
39+
)
40+
41+
# Test all the kwargs
42+
self.assertRepr(IndexModel("name", name="name"))
43+
self.assertRepr(IndexModel("unique", unique=False))
44+
self.assertRepr(IndexModel("background", background=True))
45+
self.assertRepr(IndexModel("sparse", sparse=True))
46+
self.assertRepr(IndexModel("bucketSize", bucketSize=1))
47+
self.assertRepr(IndexModel("min", min=1))
48+
self.assertRepr(IndexModel("max", max=1))
49+
self.assertRepr(IndexModel("expireAfterSeconds", expireAfterSeconds=1))
50+
self.assertRepr(
51+
IndexModel("partialFilterExpression", partialFilterExpression={"hello": "world"})
52+
)
53+
self.assertRepr(IndexModel("collation", collation=Collation(locale="en_US")))
54+
self.assertRepr(IndexModel("wildcardProjection", wildcardProjection={"$**": 1}))
55+
self.assertRepr(IndexModel("hidden", hidden=False))
56+
57+
# Test string literal
58+
self.assertEqual(repr(IndexModel("hello")), "IndexModel({'hello': 1}, name='hello_1')")
59+
self.assertEqual(
60+
repr(IndexModel({"hello": 1, "world": -1})),
61+
"IndexModel({'hello': 1, 'world': -1}, name='hello_1_world_-1')",
62+
)
63+
64+
65+
if __name__ == "__main__":
66+
unittest.main()

0 commit comments

Comments
 (0)