Skip to content

Commit 5cca021

Browse files
committed
PYTHON-4786 - Fix UpdateResult.did_upsert TypeError
1 parent e03f8f2 commit 5cca021

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

pymongo/results.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,10 @@ def upserted_id(self) -> Any:
171171

172172
@property
173173
def did_upsert(self) -> bool:
174-
"""Whether or not an upsert took place."""
174+
"""Whether an upsert took place."""
175175
assert self.__raw_result is not None
176-
return len(self.__raw_result.get("upserted", {})) > 0
176+
result = self.__raw_result.get("upserted")
177+
return result is not None and len(str(result)) > 0
177178

178179

179180
class DeleteResult(_WriteResult):

test/test_results.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ def test_update_result(self):
122122
self.assertEqual(raw_result["n"], result.matched_count)
123123
self.assertEqual(raw_result["nModified"], result.modified_count)
124124
self.assertEqual(raw_result["upserted"], result.upserted_id)
125+
self.assertEqual(result.did_upsert, False)
126+
127+
raw_result_upserted = {
128+
"n": 1,
129+
"nModified": 1,
130+
"upserted": [
131+
{"index": 5, "_id": 1},
132+
],
133+
}
134+
self.repr_test(UpdateResult, raw_result_upserted)
135+
136+
result = UpdateResult(raw_result_upserted, True)
137+
self.assertEqual(result.did_upsert, True)
125138

126139
result = UpdateResult(raw_result, False)
127140
self.assertEqual(raw_result, result.raw_result)

0 commit comments

Comments
 (0)