Skip to content

Commit 19c5fcf

Browse files
authored
PYTHON-3757 Bulk write operations don't consider hint field in equality checks (#1402)
1 parent b9bb6f8 commit 19c5fcf

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

pymongo/operations.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,15 @@ def _add_to_bulk(self, bulkobj: _Bulk) -> None:
126126
)
127127

128128
def __repr__(self) -> str:
129-
return f"DeleteOne({self._filter!r}, {self._collation!r})"
129+
return f"DeleteOne({self._filter!r}, {self._collation!r}, {self._hint!r})"
130130

131131
def __eq__(self, other: Any) -> bool:
132132
if type(other) == type(self):
133-
return (other._filter, other._collation) == (self._filter, self._collation)
133+
return (other._filter, other._collation, other._hint) == (
134+
self._filter,
135+
self._collation,
136+
self._hint,
137+
)
134138
return NotImplemented
135139

136140
def __ne__(self, other: Any) -> bool:
@@ -187,11 +191,15 @@ def _add_to_bulk(self, bulkobj: _Bulk) -> None:
187191
)
188192

189193
def __repr__(self) -> str:
190-
return f"DeleteMany({self._filter!r}, {self._collation!r})"
194+
return f"DeleteMany({self._filter!r}, {self._collation!r}, {self._hint!r})"
191195

192196
def __eq__(self, other: Any) -> bool:
193197
if type(other) == type(self):
194-
return (other._filter, other._collation) == (self._filter, self._collation)
198+
return (other._filter, other._collation, other._hint) == (
199+
self._filter,
200+
self._collation,
201+
self._hint,
202+
)
195203
return NotImplemented
196204

197205
def __ne__(self, other: Any) -> bool:

test/test_crud_v1.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,45 @@ def test_InsertOneNotEquals(self):
185185

186186
def test_DeleteOneEquals(self):
187187
self.assertEqual(DeleteOne({"foo": 42}), DeleteOne({"foo": 42}))
188+
self.assertEqual(
189+
DeleteOne({"foo": 42}, {"locale": "en_US"}), DeleteOne({"foo": 42}, {"locale": "en_US"})
190+
)
191+
self.assertEqual(
192+
DeleteOne({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
193+
DeleteOne({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
194+
)
188195

189196
def test_DeleteOneNotEquals(self):
190197
self.assertNotEqual(DeleteOne({"foo": 42}), DeleteOne({"foo": 23}))
198+
self.assertNotEqual(
199+
DeleteOne({"foo": 42}, {"locale": "en_US"}), DeleteOne({"foo": 42}, {"locale": "en_GB"})
200+
)
201+
self.assertNotEqual(
202+
DeleteOne({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
203+
DeleteOne({"foo": 42}, {"locale": "en_US"}, {"hint": 2}),
204+
)
191205

192206
def test_DeleteManyEquals(self):
193207
self.assertEqual(DeleteMany({"foo": 42}), DeleteMany({"foo": 42}))
208+
self.assertEqual(
209+
DeleteMany({"foo": 42}, {"locale": "en_US"}),
210+
DeleteMany({"foo": 42}, {"locale": "en_US"}),
211+
)
212+
self.assertEqual(
213+
DeleteMany({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
214+
DeleteMany({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
215+
)
194216

195217
def test_DeleteManyNotEquals(self):
196218
self.assertNotEqual(DeleteMany({"foo": 42}), DeleteMany({"foo": 23}))
219+
self.assertNotEqual(
220+
DeleteMany({"foo": 42}, {"locale": "en_US"}),
221+
DeleteMany({"foo": 42}, {"locale": "en_GB"}),
222+
)
223+
self.assertNotEqual(
224+
DeleteMany({"foo": 42}, {"locale": "en_US"}, {"hint": 1}),
225+
DeleteMany({"foo": 42}, {"locale": "en_US"}, {"hint": 2}),
226+
)
197227

198228
def test_DeleteOneNotEqualsDeleteMany(self):
199229
self.assertNotEqual(DeleteOne({"foo": 42}), DeleteMany({"foo": 42}))

0 commit comments

Comments
 (0)