1from _typeshed import Self
2from types import TracebackType
3from typing import Iterator, MutableMapping, Optional, Tuple, Type, Union
4from typing_extensions import Literal
5
6_KeyType = Union[str, bytes]
7_ValueType = Union[str, bytes]
8_TFlags = Literal[
9    "r",
10    "w",
11    "c",
12    "n",
13    "rf",
14    "wf",
15    "cf",
16    "nf",
17    "rs",
18    "ws",
19    "cs",
20    "ns",
21    "ru",
22    "wu",
23    "cu",
24    "nu",
25    "rfs",
26    "wfs",
27    "cfs",
28    "nfs",
29    "rfu",
30    "wfu",
31    "cfu",
32    "nfu",
33    "rsf",
34    "wsf",
35    "csf",
36    "nsf",
37    "rsu",
38    "wsu",
39    "csu",
40    "nsu",
41    "ruf",
42    "wuf",
43    "cuf",
44    "nuf",
45    "rus",
46    "wus",
47    "cus",
48    "nus",
49    "rfsu",
50    "wfsu",
51    "cfsu",
52    "nfsu",
53    "rfus",
54    "wfus",
55    "cfus",
56    "nfus",
57    "rsfu",
58    "wsfu",
59    "csfu",
60    "nsfu",
61    "rsuf",
62    "wsuf",
63    "csuf",
64    "nsuf",
65    "rufs",
66    "wufs",
67    "cufs",
68    "nufs",
69    "rusf",
70    "wusf",
71    "cusf",
72    "nusf",
73]
74
75class _Database(MutableMapping[_KeyType, bytes]):
76    def close(self) -> None: ...
77    def __getitem__(self, key: _KeyType) -> bytes: ...
78    def __setitem__(self, key: _KeyType, value: _ValueType) -> None: ...
79    def __delitem__(self, key: _KeyType) -> None: ...
80    def __iter__(self) -> Iterator[bytes]: ...
81    def __len__(self) -> int: ...
82    def __del__(self) -> None: ...
83    def __enter__(self: Self) -> Self: ...
84    def __exit__(
85        self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
86    ) -> None: ...
87
88class _error(Exception): ...
89
90error = Tuple[Type[_error], Type[OSError]]
91
92def whichdb(filename: str) -> str: ...
93def open(file: str, flag: _TFlags = ..., mode: int = ...) -> _Database: ...
94