MCPcopy
hub / github.com/encode/starlette / MultiDict

Class MultiDict

starlette/datastructures.py:322–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

320
321
322class 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
378class QueryParams(ImmutableMultiDict[str, str]):

Callers 4

test_multidictFunction · 0.90
include_query_paramsMethod · 0.85
remove_query_paramsMethod · 0.85
updateMethod · 0.85

Calls

no outgoing calls

Tested by 1

test_multidictFunction · 0.72