| 320 | |
| 321 | |
| 322 | class MultiDict(ImmutableMultiDict[Any, Any]): |
| 323 | def __setitem__(self, key: Any, value: Any) -> None: |
| 324 | self.setlist(key, [value]) |
| 325 | |
| 326 | def __delitem__(self, key: Any) -> None: |
| 327 | self._list = [(k, v) for k, v in self._list if k != key] |
| 328 | del self._dict[key] |
| 329 | |
| 330 | def pop(self, key: Any, default: Any = None) -> Any: |
| 331 | self._list = [(k, v) for k, v in self._list if k != key] |
| 332 | return self._dict.pop(key, default) |
| 333 | |
| 334 | def popitem(self) -> tuple[Any, Any]: |
| 335 | key, value = self._dict.popitem() |
| 336 | self._list = [(k, v) for k, v in self._list if k != key] |
| 337 | return key, value |
| 338 | |
| 339 | def poplist(self, key: Any) -> list[Any]: |
| 340 | values = [v for k, v in self._list if k == key] |
| 341 | self.pop(key) |
| 342 | return values |
| 343 | |
| 344 | def clear(self) -> None: |
| 345 | self._dict.clear() |
| 346 | self._list.clear() |
| 347 | |
| 348 | def setdefault(self, key: Any, default: Any = None) -> Any: |
| 349 | if key not in self: |
| 350 | self._dict[key] = default |
| 351 | self._list.append((key, default)) |
| 352 | |
| 353 | return self[key] |
| 354 | |
| 355 | def setlist(self, key: Any, values: list[Any]) -> None: |
| 356 | if not values: |
| 357 | self.pop(key, None) |
| 358 | else: |
| 359 | existing_items = [(k, v) for (k, v) in self._list if k != key] |
| 360 | self._list = existing_items + [(key, value) for value in values] |
| 361 | self._dict[key] = values[-1] |
| 362 | |
| 363 | def append(self, key: Any, value: Any) -> None: |
| 364 | self._list.append((key, value)) |
| 365 | self._dict[key] = value |
| 366 | |
| 367 | def update( |
| 368 | self, |
| 369 | *args: MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]], |
| 370 | **kwargs: Any, |
| 371 | ) -> None: |
| 372 | value = MultiDict(*args, **kwargs) |
| 373 | existing_items = [(k, v) for (k, v) in self._list if k not in value.keys()] |
| 374 | self._list = existing_items + value.multi_items() |
| 375 | self._dict.update(value) |
| 376 | |
| 377 | |
| 378 | class QueryParams(ImmutableMultiDict[str, str]): |
no outgoing calls