structures.pyi 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. from collections.abc import Callable
  2. from collections.abc import Iterable
  3. from collections.abc import Iterator
  4. from collections.abc import Mapping
  5. from typing import Any
  6. from typing import Generic
  7. from typing import Literal
  8. from typing import NoReturn
  9. from typing import overload
  10. from typing import TypeVar
  11. from .mixins import ImmutableDictMixin
  12. from .mixins import ImmutableListMixin
  13. from .mixins import ImmutableMultiDictMixin
  14. from .mixins import UpdateDictMixin
  15. D = TypeVar("D")
  16. K = TypeVar("K")
  17. T = TypeVar("T")
  18. V = TypeVar("V")
  19. _CD = TypeVar("_CD", bound="CallbackDict[Any, Any]")
  20. def is_immutable(self: object) -> NoReturn: ...
  21. def iter_multi_items(
  22. mapping: Mapping[K, V | Iterable[V]] | Iterable[tuple[K, V]],
  23. ) -> Iterator[tuple[K, V]]: ...
  24. class ImmutableList(ImmutableListMixin[V]): ...
  25. class TypeConversionDict(dict[K, V]):
  26. @overload
  27. def get(self, key: K, default: None = ..., type: None = ...) -> V | None: ...
  28. @overload
  29. def get(self, key: K, default: D, type: None = ...) -> D | V: ...
  30. @overload
  31. def get(self, key: K, default: D, type: Callable[[V], T]) -> D | T: ...
  32. @overload
  33. def get(self, key: K, type: Callable[[V], T]) -> T | None: ...
  34. class ImmutableTypeConversionDict(ImmutableDictMixin[K, V], TypeConversionDict[K, V]):
  35. def copy(self) -> TypeConversionDict[K, V]: ...
  36. def __copy__(self) -> ImmutableTypeConversionDict[K, V]: ...
  37. class MultiDict(TypeConversionDict[K, V]):
  38. def __init__(
  39. self,
  40. mapping: Mapping[K, Iterable[V] | V] | Iterable[tuple[K, V]] | None = None,
  41. ) -> None: ...
  42. def __getitem__(self, item: K) -> V: ...
  43. def __setitem__(self, key: K, value: V) -> None: ...
  44. def add(self, key: K, value: V) -> None: ...
  45. @overload
  46. def getlist(self, key: K) -> list[V]: ...
  47. @overload
  48. def getlist(self, key: K, type: Callable[[V], T] = ...) -> list[T]: ...
  49. def setlist(self, key: K, new_list: Iterable[V]) -> None: ...
  50. def setdefault(self, key: K, default: V | None = None) -> V: ...
  51. def setlistdefault(
  52. self, key: K, default_list: Iterable[V] | None = None
  53. ) -> list[V]: ...
  54. def items(self, multi: bool = False) -> Iterator[tuple[K, V]]: ... # type: ignore
  55. def lists(self) -> Iterator[tuple[K, list[V]]]: ...
  56. def values(self) -> Iterator[V]: ... # type: ignore
  57. def listvalues(self) -> Iterator[list[V]]: ...
  58. def copy(self) -> MultiDict[K, V]: ...
  59. def deepcopy(self, memo: Any = None) -> MultiDict[K, V]: ...
  60. @overload
  61. def to_dict(self) -> dict[K, V]: ...
  62. @overload
  63. def to_dict(self, flat: Literal[False]) -> dict[K, list[V]]: ...
  64. def update( # type: ignore
  65. self, mapping: Mapping[K, Iterable[V] | V] | Iterable[tuple[K, V]]
  66. ) -> None: ...
  67. @overload
  68. def pop(self, key: K) -> V: ...
  69. @overload
  70. def pop(self, key: K, default: V | T = ...) -> V | T: ...
  71. def popitem(self) -> tuple[K, V]: ...
  72. def poplist(self, key: K) -> list[V]: ...
  73. def popitemlist(self) -> tuple[K, list[V]]: ...
  74. def __copy__(self) -> MultiDict[K, V]: ...
  75. def __deepcopy__(self, memo: Any) -> MultiDict[K, V]: ...
  76. class _omd_bucket(Generic[K, V]):
  77. prev: _omd_bucket[K, V] | None
  78. next: _omd_bucket[K, V] | None
  79. key: K
  80. value: V
  81. def __init__(self, omd: OrderedMultiDict[K, V], key: K, value: V) -> None: ...
  82. def unlink(self, omd: OrderedMultiDict[K, V]) -> None: ...
  83. class OrderedMultiDict(MultiDict[K, V]):
  84. _first_bucket: _omd_bucket[K, V] | None
  85. _last_bucket: _omd_bucket[K, V] | None
  86. def __init__(self, mapping: Mapping[K, V] | None = None) -> None: ...
  87. def __eq__(self, other: object) -> bool: ...
  88. def __getitem__(self, key: K) -> V: ...
  89. def __setitem__(self, key: K, value: V) -> None: ...
  90. def __delitem__(self, key: K) -> None: ...
  91. def keys(self) -> Iterator[K]: ... # type: ignore
  92. def __iter__(self) -> Iterator[K]: ...
  93. def values(self) -> Iterator[V]: ... # type: ignore
  94. def items(self, multi: bool = False) -> Iterator[tuple[K, V]]: ... # type: ignore
  95. def lists(self) -> Iterator[tuple[K, list[V]]]: ...
  96. def listvalues(self) -> Iterator[list[V]]: ...
  97. def add(self, key: K, value: V) -> None: ...
  98. @overload
  99. def getlist(self, key: K) -> list[V]: ...
  100. @overload
  101. def getlist(self, key: K, type: Callable[[V], T] = ...) -> list[T]: ...
  102. def setlist(self, key: K, new_list: Iterable[V]) -> None: ...
  103. def setlistdefault(
  104. self, key: K, default_list: Iterable[V] | None = None
  105. ) -> list[V]: ...
  106. def update( # type: ignore
  107. self, mapping: Mapping[K, V] | Iterable[tuple[K, V]]
  108. ) -> None: ...
  109. def poplist(self, key: K) -> list[V]: ...
  110. @overload
  111. def pop(self, key: K) -> V: ...
  112. @overload
  113. def pop(self, key: K, default: V | T = ...) -> V | T: ...
  114. def popitem(self) -> tuple[K, V]: ...
  115. def popitemlist(self) -> tuple[K, list[V]]: ...
  116. class CombinedMultiDict(ImmutableMultiDictMixin[K, V], MultiDict[K, V]): # type: ignore
  117. dicts: list[MultiDict[K, V]]
  118. def __init__(self, dicts: Iterable[MultiDict[K, V]] | None) -> None: ...
  119. @classmethod
  120. def fromkeys(cls, keys: Any, value: Any = None) -> NoReturn: ...
  121. def __getitem__(self, key: K) -> V: ...
  122. @overload # type: ignore
  123. def get(self, key: K) -> V | None: ...
  124. @overload
  125. def get(self, key: K, default: V | T = ...) -> V | T: ...
  126. @overload
  127. def get(
  128. self, key: K, default: T | None = None, type: Callable[[V], T] = ...
  129. ) -> T | None: ...
  130. @overload
  131. def getlist(self, key: K) -> list[V]: ...
  132. @overload
  133. def getlist(self, key: K, type: Callable[[V], T] = ...) -> list[T]: ...
  134. def _keys_impl(self) -> set[K]: ...
  135. def keys(self) -> set[K]: ... # type: ignore
  136. def __iter__(self) -> set[K]: ... # type: ignore
  137. def items(self, multi: bool = False) -> Iterator[tuple[K, V]]: ... # type: ignore
  138. def values(self) -> Iterator[V]: ... # type: ignore
  139. def lists(self) -> Iterator[tuple[K, list[V]]]: ...
  140. def listvalues(self) -> Iterator[list[V]]: ...
  141. def copy(self) -> MultiDict[K, V]: ...
  142. @overload
  143. def to_dict(self) -> dict[K, V]: ...
  144. @overload
  145. def to_dict(self, flat: Literal[False]) -> dict[K, list[V]]: ...
  146. def __contains__(self, key: K) -> bool: ... # type: ignore
  147. def has_key(self, key: K) -> bool: ...
  148. class ImmutableDict(ImmutableDictMixin[K, V], dict[K, V]):
  149. def copy(self) -> dict[K, V]: ...
  150. def __copy__(self) -> ImmutableDict[K, V]: ...
  151. class ImmutableMultiDict( # type: ignore
  152. ImmutableMultiDictMixin[K, V], MultiDict[K, V]
  153. ):
  154. def copy(self) -> MultiDict[K, V]: ...
  155. def __copy__(self) -> ImmutableMultiDict[K, V]: ...
  156. class ImmutableOrderedMultiDict( # type: ignore
  157. ImmutableMultiDictMixin[K, V], OrderedMultiDict[K, V]
  158. ):
  159. def _iter_hashitems(self) -> Iterator[tuple[int, tuple[K, V]]]: ...
  160. def copy(self) -> OrderedMultiDict[K, V]: ...
  161. def __copy__(self) -> ImmutableOrderedMultiDict[K, V]: ...
  162. class CallbackDict(UpdateDictMixin[K, V], dict[K, V]):
  163. def __init__(
  164. self,
  165. initial: Mapping[K, V] | Iterable[tuple[K, V]] | None = None,
  166. on_update: Callable[[_CD], None] | None = None,
  167. ) -> None: ...
  168. class HeaderSet(set[str]):
  169. _headers: list[str]
  170. _set: set[str]
  171. on_update: Callable[[HeaderSet], None] | None
  172. def __init__(
  173. self,
  174. headers: Iterable[str] | None = None,
  175. on_update: Callable[[HeaderSet], None] | None = None,
  176. ) -> None: ...
  177. def add(self, header: str) -> None: ...
  178. def remove(self, header: str) -> None: ...
  179. def update(self, iterable: Iterable[str]) -> None: ... # type: ignore
  180. def discard(self, header: str) -> None: ...
  181. def find(self, header: str) -> int: ...
  182. def index(self, header: str) -> int: ...
  183. def clear(self) -> None: ...
  184. def as_set(self, preserve_casing: bool = False) -> set[str]: ...
  185. def to_header(self) -> str: ...
  186. def __getitem__(self, idx: int) -> str: ...
  187. def __delitem__(self, idx: int) -> None: ...
  188. def __setitem__(self, idx: int, value: str) -> None: ...
  189. def __contains__(self, header: str) -> bool: ... # type: ignore
  190. def __len__(self) -> int: ...
  191. def __iter__(self) -> Iterator[str]: ...