Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5199ed5

Browse files
authored
Upper bound protobuf containers based on scalar/composite (#5787)
1 parent a0f1997 commit 5199ed5

1 file changed

Lines changed: 30 additions & 27 deletions

File tree

stubs/protobuf/google/protobuf/internal/containers.pyi

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ from typing import (
88
MutableMapping as MutableMapping,
99
Optional,
1010
Sequence,
11+
Text,
1112
TypeVar,
1213
Union,
1314
overload,
@@ -16,10 +17,12 @@ from typing import (
1617
from google.protobuf.descriptor import Descriptor
1718
from google.protobuf.internal.message_listener import MessageListener
1819
from google.protobuf.internal.python_message import GeneratedProtocolMessageType
20+
from google.protobuf.message import Message
1921

2022
_T = TypeVar("_T")
21-
_K = TypeVar("_K")
22-
_V = TypeVar("_V")
23+
_K = TypeVar("_K", bound=Union[bool, int, Text])
24+
_ScalarV = TypeVar("_ScalarV", bound=Union[bool, int, float, Text, bytes])
25+
_MessageV = TypeVar("_MessageV", bound=Message)
2326
_M = TypeVar("_M")
2427

2528
class BaseContainer(Sequence[_T]):
@@ -34,57 +37,57 @@ class BaseContainer(Sequence[_T]):
3437
@overload
3538
def __getitem__(self, key: slice) -> List[_T]: ...
3639

37-
class RepeatedScalarFieldContainer(BaseContainer[_T]):
40+
class RepeatedScalarFieldContainer(BaseContainer[_ScalarV]):
3841
def __init__(self, message_listener: MessageListener, message_descriptor: Descriptor) -> None: ...
39-
def append(self, value: _T) -> None: ...
40-
def insert(self, key: int, value: _T) -> None: ...
41-
def extend(self, elem_seq: Optional[Iterable[_T]]) -> None: ...
42+
def append(self, value: _ScalarV) -> None: ...
43+
def insert(self, key: int, value: _ScalarV) -> None: ...
44+
def extend(self, elem_seq: Optional[Iterable[_ScalarV]]) -> None: ...
4245
def MergeFrom(self: _M, other: _M) -> None: ...
43-
def remove(self, elem: _T) -> None: ...
44-
def pop(self, key: int = ...) -> _T: ...
46+
def remove(self, elem: _ScalarV) -> None: ...
47+
def pop(self, key: int = ...) -> _ScalarV: ...
4548
@overload
46-
def __setitem__(self, key: int, value: _T) -> None: ...
49+
def __setitem__(self, key: int, value: _ScalarV) -> None: ...
4750
@overload
48-
def __setitem__(self, key: slice, value: Iterable[_T]) -> None: ...
49-
def __getslice__(self, start: int, stop: int) -> List[_T]: ...
50-
def __setslice__(self, start: int, stop: int, values: Iterable[_T]) -> None: ...
51+
def __setitem__(self, key: slice, value: Iterable[_ScalarV]) -> None: ...
52+
def __getslice__(self, start: int, stop: int) -> List[_ScalarV]: ...
53+
def __setslice__(self, start: int, stop: int, values: Iterable[_ScalarV]) -> None: ...
5154
def __delitem__(self, key: Union[int, slice]) -> None: ...
5255
def __delslice__(self, start: int, stop: int) -> None: ...
5356
def __eq__(self, other: object) -> bool: ...
5457

55-
class RepeatedCompositeFieldContainer(BaseContainer[_T]):
58+
class RepeatedCompositeFieldContainer(BaseContainer[_MessageV]):
5659
def __init__(self, message_listener: MessageListener, type_checker: Any) -> None: ...
57-
def add(self, **kwargs: Any) -> _T: ...
58-
def append(self, value: _T) -> None: ...
59-
def insert(self, key: int, value: _T) -> None: ...
60-
def extend(self, elem_seq: Iterable[_T]) -> None: ...
60+
def add(self, **kwargs: Any) -> _MessageV: ...
61+
def append(self, value: _MessageV) -> None: ...
62+
def insert(self, key: int, value: _MessageV) -> None: ...
63+
def extend(self, elem_seq: Iterable[_MessageV]) -> None: ...
6164
def MergeFrom(self: _M, other: _M) -> None: ...
62-
def remove(self, elem: _T) -> None: ...
63-
def pop(self, key: int = ...) -> _T: ...
64-
def __getslice__(self, start: int, stop: int) -> List[_T]: ...
65+
def remove(self, elem: _MessageV) -> None: ...
66+
def pop(self, key: int = ...) -> _MessageV: ...
67+
def __getslice__(self, start: int, stop: int) -> List[_MessageV]: ...
6568
def __delitem__(self, key: Union[int, slice]) -> None: ...
6669
def __delslice__(self, start: int, stop: int) -> None: ...
6770
def __eq__(self, other: object) -> bool: ...
6871

69-
class ScalarMap(MutableMapping[_K, _V]):
70-
def __setitem__(self, k: _K, v: _V) -> None: ...
72+
class ScalarMap(MutableMapping[_K, _ScalarV]):
73+
def __setitem__(self, k: _K, v: _ScalarV) -> None: ...
7174
def __delitem__(self, v: _K) -> None: ...
72-
def __getitem__(self, k: _K) -> _V: ...
75+
def __getitem__(self, k: _K) -> _ScalarV: ...
7376
def __len__(self) -> int: ...
7477
def __iter__(self) -> Iterator[_K]: ...
7578
def __eq__(self, other: object) -> bool: ...
7679
def MergeFrom(self: _M, other: _M): ...
7780
def InvalidateIterators(self) -> None: ...
7881
def GetEntryClass(self) -> GeneratedProtocolMessageType: ...
7982

80-
class MessageMap(MutableMapping[_K, _V]):
81-
def __setitem__(self, k: _K, v: _V) -> None: ...
83+
class MessageMap(MutableMapping[_K, _MessageV]):
84+
def __setitem__(self, k: _K, v: _MessageV) -> None: ...
8285
def __delitem__(self, v: _K) -> None: ...
83-
def __getitem__(self, k: _K) -> _V: ...
86+
def __getitem__(self, k: _K) -> _MessageV: ...
8487
def __len__(self) -> int: ...
8588
def __iter__(self) -> Iterator[_K]: ...
8689
def __eq__(self, other: object) -> bool: ...
87-
def get_or_create(self, key: _K) -> _V: ...
90+
def get_or_create(self, key: _K) -> _MessageV: ...
8891
def MergeFrom(self: _M, other: _M): ...
8992
def InvalidateIterators(self) -> None: ...
9093
def GetEntryClass(self) -> GeneratedProtocolMessageType: ...

0 commit comments

Comments
 (0)