Skip to content

Commit ebf608a

Browse files
authored
fix: Fix TypeError when building XML element tree (issue #489) (#533)
* fix: Fix TypeError when building XML element tree (issue #489) * test: Add regression test case for issue #489
1 parent fa3457b commit ebf608a

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

pysolr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,14 +1039,14 @@ def delete(
10391039
et = ElementTree.Element("delete")
10401040
for one_doc_id in doc_id:
10411041
subelem = ElementTree.SubElement(et, "id")
1042-
subelem.text = one_doc_id
1042+
subelem.text = str(one_doc_id)
10431043
m = ElementTree.tostring(et)
10441044
else:
10451045
raise ValueError("The list of documents to delete was empty.")
10461046
elif q is not None:
10471047
et = ElementTree.Element("delete")
10481048
subelem = ElementTree.SubElement(et, "query")
1049-
subelem.text = q
1049+
subelem.text = str(q)
10501050
m = ElementTree.tostring(et)
10511051

10521052
return self._update(

tests/test_client.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,36 @@ def leaf_doc(doc):
993993
args, _kwargs = self.solr._send_request.call_args
994994
self.assertTrue(args[1].startswith("fakehandler"))
995995

996+
def test_delete__accepts_string_and_integer_values(self):
997+
"""
998+
Ensure self.solr.delete() accepts both string and integer values for `id`
999+
and `q` parameters without raising XML serialization errors.
1000+
1001+
Previously, passing an integer value caused a TypeError because
1002+
`xml.etree.ElementTree` requires element.text to be a string. This test
1003+
verifies that integer inputs are correctly cast to strings before
1004+
building the delete XML payload.
1005+
1006+
Regression test for:
1007+
https://github.com/django-haystack/pysolr/issues/489
1008+
"""
1009+
self.solr.add([{"id": "101", "title": "Sample doc 101"}], commit=True)
1010+
self.solr.add([{"id": "102", "title": "Sample doc 102"}], commit=True)
1011+
self.solr.add([{"id": "103", "title": "Sample doc 103"}], commit=True)
1012+
self.solr.add([{"id": "104", "title": "Sample doc 104"}], commit=True)
1013+
1014+
# Delete using string ID
1015+
self.solr.delete(id="101", commit=True)
1016+
1017+
# Delete using integer ID (should not raise TypeError)
1018+
self.solr.delete(id=102, commit=True)
1019+
1020+
# Delete using string value with `q`
1021+
self.solr.delete(q="103", commit=True)
1022+
1023+
# Delete using integer value with `q` (should not raise TypeError)
1024+
self.solr.delete(q=104, commit=True)
1025+
9961026
def test_commit(self):
9971027
self.assertEqual(len(self.solr.search("doc")), 3)
9981028
self.solr.add([{"id": "doc_6", "title": "Newly added doc"}])

0 commit comments

Comments
 (0)