MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / _AssociationList

Class _AssociationList

lib/sqlalchemy/ext/associationproxy.py:1469–1692  ·  view source on GitHub ↗

Generic, converting, list-to-list proxy.

Source from the content-addressed store, hash-verified

1467
1468
1469class _AssociationList(_AssociationSingleItem[_T], MutableSequence[_T]):
1470 """Generic, converting, list-to-list proxy."""
1471
1472 col: MutableSequence[_T]
1473
1474 def _set(self, object_: Any, value: _T) -> None:
1475 self.setter(object_, value)
1476
1477 @overload
1478 def __getitem__(self, index: int) -> _T: ...
1479
1480 @overload
1481 def __getitem__(self, index: slice) -> MutableSequence[_T]: ...
1482
1483 def __getitem__(
1484 self, index: Union[int, slice]
1485 ) -> Union[_T, MutableSequence[_T]]:
1486 if not isinstance(index, slice):
1487 return self._get(self.col[index])
1488 else:
1489 return [self._get(member) for member in self.col[index]]
1490
1491 @overload
1492 def __setitem__(self, index: int, value: _T) -> None: ...
1493
1494 @overload
1495 def __setitem__(self, index: slice, value: Iterable[_T]) -> None: ...
1496
1497 def __setitem__(
1498 self, index: Union[int, slice], value: Union[_T, Iterable[_T]]
1499 ) -> None:
1500 if not isinstance(index, slice):
1501 self._set(self.col[index], cast("_T", value))
1502 else:
1503 if index.stop is None:
1504 stop = len(self)
1505 elif index.stop < 0:
1506 stop = len(self) + index.stop
1507 else:
1508 stop = index.stop
1509 step = index.step or 1
1510
1511 start = index.start or 0
1512 rng = list(range(index.start or 0, stop, step))
1513
1514 sized_value = list(value)
1515
1516 if step == 1:
1517 for i in rng:
1518 del self[start]
1519 i = start
1520 for item in sized_value:
1521 self.insert(i, item)
1522 i += 1
1523 else:
1524 if len(sized_value) != len(rng):
1525 raise ValueError(
1526 "attempt to assign sequence of size %s to "

Callers 1

_newMethod · 0.85

Calls 2

localsFunction · 0.85
itemsMethod · 0.45

Tested by

no test coverage detected