- Fix type hint for `sql.SQL.join()` (:ticket:`#127`).
- Fix type hint for `Connection.notifies()` (:ticket:`#128`).
+- Fix call to `MultiRange.__setitem__()` with a non-iterable value and a
+ slice, now raising a `TypeError` (:ticket:`#129`).
Psycopg 3.0.1
if isinstance(index, int):
self._check_type(value)
self._ranges[index] = self._check_type(value)
+ elif not isinstance(value, Iterable):
+ raise TypeError("can only assign an iterable")
else:
- if isinstance(value, Iterable):
- value = map(self._check_type, value)
- else:
- value = [self._check_type(value)]
+ value = map(self._check_type, value)
self._ranges[index] = value
def __delitem__(self, index: Union[int, slice]) -> None:
assert mr == Multirange([Range(10, 20), Range(31, 41), Range(51, 61)])
mr = Multirange([Range(10, 20), Range(30, 40), Range(50, 60)])
- mr[1:3] = Range(31, 41)
+ with pytest.raises(TypeError, match="can only assign an iterable"):
+ mr[1:3] = Range(31, 41) # type: ignore[call-overload]
+
+ mr[1:3] = [Range(31, 41)]
assert mr == Multirange([Range(10, 20), Range(31, 41)])
def test_delitem(self):