Skip to content

Commit 90f5422

Browse files
authored
Add/fix types to a bunch of non-generated protobuf files (#7017)
1 parent f2ce1d1 commit 90f5422

12 files changed

+160
-112
lines changed

stubs/protobuf/@tests/stubtest_allowlist.txt

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,8 @@
22
# carefully in mypy-protobuf which internally runs stubtest. Skip those here.
33
google.protobuf\..*_pb2\..*
44

5-
google.protobuf.__version__
6-
google.protobuf.descriptor.Descriptor.__new__
7-
google.protobuf.descriptor.FieldDescriptor.__init__
8-
google.protobuf.descriptor.FieldDescriptor.__new__
9-
google.protobuf.descriptor.ServiceDescriptor.__new__
10-
google.protobuf.descriptor._NestedDescriptorBase.GetTopLevelContainingType
115
google.protobuf.internal.containers.BaseContainer.sort
12-
google.protobuf.internal.containers.MessageMap.__init__
13-
google.protobuf.internal.containers.MessageMap.get
14-
google.protobuf.internal.containers.RepeatedCompositeFieldContainer.__init__
15-
google.protobuf.internal.containers.RepeatedScalarFieldContainer.__init__
16-
google.protobuf.internal.containers.ScalarMap.__init__
17-
google.protobuf.internal.containers.ScalarMap.get
18-
google.protobuf.internal.decoder.BytesDecoder
19-
google.protobuf.internal.decoder.EnumDecoder
20-
google.protobuf.internal.decoder.MessageSetItemDecoder
21-
google.protobuf.internal.decoder.StringDecoder
22-
google.protobuf.internal.encoder.MapSizer
23-
google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper.DESCRIPTOR
24-
google.protobuf.internal.python_message.GeneratedProtocolMessageType.__init__
25-
google.protobuf.internal.python_message.GeneratedProtocolMessageType.__new__
26-
google.protobuf.internal.well_known_types.Any.Pack
27-
google.protobuf.internal.well_known_types.Error
28-
google.protobuf.internal.well_known_types.ParseError
29-
google.protobuf.message.Message.DESCRIPTOR
30-
google.protobuf.message.Message.Extensions
316
google.protobuf.message.Message.SerializePartialToString
327
google.protobuf.message.Message.SerializeToString
33-
google.protobuf.message.Message.__init__
348
google.protobuf.service.Service.GetDescriptor
359
google.protobuf.text_format.MessageToBytes
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__: bytes
1+
__version__: str

stubs/protobuf/google/protobuf/descriptor.pyi

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,19 @@ class _NestedDescriptorBase(DescriptorBase):
4242
serialized_end=...,
4343
serialized_options=...,
4444
) -> None: ...
45-
def GetTopLevelContainingType(self): ...
4645
def CopyToProto(self, proto): ...
4746

4847
class Descriptor(_NestedDescriptorBase):
4948
def __new__(
5049
cls,
51-
name,
52-
full_name,
53-
filename,
54-
containing_type,
55-
fields,
56-
nested_types,
57-
enum_types,
58-
extensions,
50+
name=...,
51+
full_name=...,
52+
filename=...,
53+
containing_type=...,
54+
fields=...,
55+
nested_types=...,
56+
enum_types=...,
57+
extensions=...,
5958
options=...,
6059
serialized_options=...,
6160
is_extendable=...,
@@ -162,9 +161,10 @@ class FieldDescriptor(DescriptorBase):
162161
extension_scope,
163162
options=...,
164163
serialized_options=...,
165-
file=...,
166164
has_default_value=...,
167165
containing_oneof=...,
166+
json_name=...,
167+
file=...,
168168
create_key=...,
169169
): ...
170170
name: Any
@@ -199,9 +199,10 @@ class FieldDescriptor(DescriptorBase):
199199
extension_scope,
200200
options=...,
201201
serialized_options=...,
202-
file=...,
203202
has_default_value=...,
204203
containing_oneof=...,
204+
json_name=...,
205+
file=...,
205206
create_key=...,
206207
) -> None: ...
207208
@staticmethod
@@ -267,10 +268,10 @@ class OneofDescriptor:
267268
class ServiceDescriptor(_NestedDescriptorBase):
268269
def __new__(
269270
cls,
270-
name,
271-
full_name,
272-
index,
273-
methods,
271+
name=...,
272+
full_name=...,
273+
index=...,
274+
methods=...,
274275
options=...,
275276
serialized_options=...,
276277
file=...,

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ from typing_extensions import SupportsIndex
55
from google.protobuf.descriptor import Descriptor
66
from google.protobuf.internal.message_listener import MessageListener
77
from google.protobuf.internal.python_message import GeneratedProtocolMessageType
8+
from google.protobuf.internal.type_checkers import _ValueChecker
89
from google.protobuf.message import Message
910

1011
_T = TypeVar("_T")
@@ -25,7 +26,7 @@ class BaseContainer(Sequence[_T]):
2526
def __getitem__(self, key: slice) -> list[_T]: ...
2627

2728
class RepeatedScalarFieldContainer(BaseContainer[_ScalarV]):
28-
def __init__(self, message_listener: MessageListener, message_descriptor: Descriptor) -> None: ...
29+
def __init__(self, message_listener: MessageListener, type_checker: _ValueChecker[_ScalarV]) -> None: ...
2930
def append(self, value: _ScalarV) -> None: ...
3031
def insert(self, key: int, value: _ScalarV) -> None: ...
3132
def extend(self, elem_seq: Optional[Iterable[_ScalarV]]) -> None: ...
@@ -43,7 +44,7 @@ class RepeatedScalarFieldContainer(BaseContainer[_ScalarV]):
4344
def __eq__(self, other: object) -> bool: ...
4445

4546
class RepeatedCompositeFieldContainer(BaseContainer[_MessageV]):
46-
def __init__(self, message_listener: MessageListener, type_checker: Any) -> None: ...
47+
def __init__(self, message_listener: MessageListener, message_descriptor: Descriptor) -> None: ...
4748
def add(self, **kwargs: Any) -> _MessageV: ...
4849
def append(self, value: _MessageV) -> None: ...
4950
def insert(self, key: int, value: _MessageV) -> None: ...
@@ -57,23 +58,45 @@ class RepeatedCompositeFieldContainer(BaseContainer[_MessageV]):
5758
def __eq__(self, other: object) -> bool: ...
5859

5960
class ScalarMap(MutableMapping[_K, _ScalarV]):
61+
def __init__(
62+
self,
63+
message_listener: MessageListener,
64+
key_checker: _ValueChecker[_K],
65+
value_checker: _ValueChecker[_ScalarV],
66+
entry_descriptor: Descriptor,
67+
) -> None: ...
6068
def __setitem__(self, k: _K, v: _ScalarV) -> None: ...
6169
def __delitem__(self, v: _K) -> None: ...
6270
def __getitem__(self, k: _K) -> _ScalarV: ...
6371
def __len__(self) -> int: ...
6472
def __iter__(self) -> Iterator[_K]: ...
6573
def __eq__(self, other: object) -> bool: ...
74+
@overload
75+
def get(self, key: _K, default: None = ...) -> _ScalarV: ...
76+
@overload
77+
def get(self, key: _K, default: Union[_ScalarV, _T]) -> Union[_ScalarV, _T]: ...
6678
def MergeFrom(self: _M, other: _M): ...
6779
def InvalidateIterators(self) -> None: ...
6880
def GetEntryClass(self) -> GeneratedProtocolMessageType: ...
6981

7082
class MessageMap(MutableMapping[_K, _MessageV]):
83+
def __init__(
84+
self,
85+
message_listener: MessageListener,
86+
message_descriptor: Descriptor,
87+
key_checker: _ValueChecker[_K],
88+
entry_descriptor: Descriptor,
89+
) -> None: ...
7190
def __setitem__(self, k: _K, v: _MessageV) -> None: ...
7291
def __delitem__(self, v: _K) -> None: ...
7392
def __getitem__(self, k: _K) -> _MessageV: ...
7493
def __len__(self) -> int: ...
7594
def __iter__(self) -> Iterator[_K]: ...
7695
def __eq__(self, other: object) -> bool: ...
96+
@overload
97+
def get(self, key: _K, default: None = ...) -> _MessageV: ...
98+
@overload
99+
def get(self, key: _K, default: Union[_MessageV, _T]) -> Union[_MessageV, _T]: ...
77100
def get_or_create(self, key: _K) -> _MessageV: ...
78101
def MergeFrom(self: _M, other: _M): ...
79102
def InvalidateIterators(self) -> None: ...
Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,61 @@
1-
from typing import Any
1+
from typing import Any, Callable
2+
3+
from google.protobuf.descriptor import Descriptor, FieldDescriptor
4+
from google.protobuf.message import Message
5+
6+
_Decoder = Callable[[str, int, int, Message, dict[FieldDescriptor, Any]], int]
7+
_NewDefault = Callable[[Message], Message]
28

39
def ReadTag(buffer, pos): ...
4-
def EnumDecoder(field_number, is_repeated, is_packed, key, new_default): ...
5-
6-
Int32Decoder: Any
7-
Int64Decoder: Any
8-
UInt32Decoder: Any
9-
UInt64Decoder: Any
10-
SInt32Decoder: Any
11-
SInt64Decoder: Any
12-
Fixed32Decoder: Any
13-
Fixed64Decoder: Any
14-
SFixed32Decoder: Any
15-
SFixed64Decoder: Any
16-
FloatDecoder: Any
17-
DoubleDecoder: Any
18-
BoolDecoder: Any
19-
20-
def StringDecoder(field_number, is_repeated, is_packed, key, new_default): ...
21-
def BytesDecoder(field_number, is_repeated, is_packed, key, new_default): ...
22-
def GroupDecoder(field_number, is_repeated, is_packed, key, new_default): ...
23-
def MessageDecoder(field_number, is_repeated, is_packed, key, new_default): ...
24-
25-
MESSAGE_SET_ITEM_TAG: Any
26-
27-
def MessageSetItemDecoder(extensions_by_number): ...
28-
def MapDecoder(field_descriptor, new_default, is_message_map): ...
10+
11+
Int32Decoder: _Decoder
12+
Int64Decoder: _Decoder
13+
UInt32Decoder: _Decoder
14+
UInt64Decoder: _Decoder
15+
SInt32Decoder: _Decoder
16+
SInt64Decoder: _Decoder
17+
Fixed32Decoder: _Decoder
18+
Fixed64Decoder: _Decoder
19+
SFixed32Decoder: _Decoder
20+
SFixed64Decoder: _Decoder
21+
FloatDecoder: _Decoder
22+
DoubleDecoder: _Decoder
23+
BoolDecoder: _Decoder
24+
25+
def EnumDecoder(
26+
field_number: int,
27+
is_repeated: bool,
28+
is_packed: bool,
29+
key: FieldDescriptor,
30+
new_default: _NewDefault,
31+
clear_if_default: bool = ...,
32+
) -> _Decoder: ...
33+
def StringDecoder(
34+
field_number: int,
35+
is_repeated: bool,
36+
is_packed: bool,
37+
key: FieldDescriptor,
38+
new_default: _NewDefault,
39+
clear_if_default: bool = ...,
40+
) -> _Decoder: ...
41+
def BytesDecoder(
42+
field_number: int,
43+
is_repeated: bool,
44+
is_packed: bool,
45+
key: FieldDescriptor,
46+
new_default: _NewDefault,
47+
clear_if_default: bool = ...,
48+
) -> _Decoder: ...
49+
def GroupDecoder(
50+
field_number: int, is_repeated: bool, is_packed: bool, key: FieldDescriptor, new_default: _NewDefault
51+
) -> _Decoder: ...
52+
def MessageDecoder(
53+
field_number: int, is_repeated: bool, is_packed: bool, key: FieldDescriptor, new_default: _NewDefault
54+
) -> _Decoder: ...
55+
56+
MESSAGE_SET_ITEM_TAG: bytes
57+
58+
def MessageSetItemDecoder(descriptor: Descriptor) -> _Decoder: ...
59+
def MapDecoder(field_descriptor, new_default, is_message_map) -> _Decoder: ...
2960

3061
SkipField: Any
Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,40 @@
1-
from typing import Any
1+
from typing import Callable
22

3-
Int32Sizer: Any
4-
UInt32Sizer: Any
5-
SInt32Sizer: Any
6-
Fixed32Sizer: Any
7-
Fixed64Sizer: Any
8-
BoolSizer: Any
3+
from google.protobuf.descriptor import FieldDescriptor
94

10-
def StringSizer(field_number, is_repeated, is_packed): ...
11-
def BytesSizer(field_number, is_repeated, is_packed): ...
12-
def GroupSizer(field_number, is_repeated, is_packed): ...
13-
def MessageSizer(field_number, is_repeated, is_packed): ...
14-
def MessageSetItemSizer(field_number): ...
15-
def MapSizer(field_descriptor): ...
16-
def TagBytes(field_number, wire_type): ...
5+
_Sizer = Callable[[int, bool, bool], int]
176

18-
Int32Encoder: Any
19-
UInt32Encoder: Any
20-
SInt32Encoder: Any
21-
Fixed32Encoder: Any
22-
Fixed64Encoder: Any
23-
SFixed32Encoder: Any
24-
SFixed64Encoder: Any
25-
FloatEncoder: Any
26-
DoubleEncoder: Any
7+
Int32Sizer: _Sizer
8+
UInt32Sizer: _Sizer
9+
SInt32Sizer: _Sizer
10+
Fixed32Sizer: _Sizer
11+
Fixed64Sizer: _Sizer
12+
BoolSizer: _Sizer
2713

28-
def BoolEncoder(field_number, is_repeated, is_packed): ...
29-
def StringEncoder(field_number, is_repeated, is_packed): ...
30-
def BytesEncoder(field_number, is_repeated, is_packed): ...
31-
def GroupEncoder(field_number, is_repeated, is_packed): ...
32-
def MessageEncoder(field_number, is_repeated, is_packed): ...
33-
def MessageSetItemEncoder(field_number): ...
34-
def MapEncoder(field_descriptor): ...
14+
def StringSizer(field_number: int, is_repeated: bool, is_packed: bool) -> _Sizer: ...
15+
def BytesSizer(field_number: int, is_repeated: bool, is_packed: bool) -> _Sizer: ...
16+
def GroupSizer(field_number: int, is_repeated: bool, is_packed: bool) -> _Sizer: ...
17+
def MessageSizer(field_number: int, is_repeated: bool, is_packed: bool) -> _Sizer: ...
18+
def MessageSetItemSizer(field_number: int) -> _Sizer: ...
19+
def MapSizer(field_descriptor: FieldDescriptor, is_message_map: bool) -> _Sizer: ...
20+
def TagBytes(field_number: int, wire_type: int) -> bytes: ...
21+
22+
_Encoder = Callable[[Callable[[bytes], int], bytes, bool], int]
23+
24+
Int32Encoder: _Encoder
25+
UInt32Encoder: _Encoder
26+
SInt32Encoder: _Encoder
27+
Fixed32Encoder: _Encoder
28+
Fixed64Encoder: _Encoder
29+
SFixed32Encoder: _Encoder
30+
SFixed64Encoder: _Encoder
31+
FloatEncoder: _Encoder
32+
DoubleEncoder: _Encoder
33+
34+
def BoolEncoder(field_number: int, is_repeated: bool, is_packed: bool) -> _Encoder: ...
35+
def StringEncoder(field_number: int, is_repeated: bool, is_packed: bool) -> _Encoder: ...
36+
def BytesEncoder(field_number: int, is_repeated: bool, is_packed: bool) -> _Encoder: ...
37+
def GroupEncoder(field_number: int, is_repeated: bool, is_packed: bool) -> _Encoder: ...
38+
def MessageEncoder(field_number: int, is_repeated: bool, is_packed: bool) -> _Encoder: ...
39+
def MessageSetItemEncoder(field_number: int) -> _Encoder: ...
40+
def MapEncoder(field_descriptor: FieldDescriptor) -> _Encoder: ...

stubs/protobuf/google/protobuf/internal/enum_type_wrapper.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ _V = TypeVar("_V", bound=int)
77
# Expose a generic version so that those using mypy-protobuf
88
# can get autogenerated NewType wrapper around the int values
99
class _EnumTypeWrapper(Generic[_V]):
10-
DESCRIPTOR: EnumDescriptor
10+
DESCRIPTOR: EnumDescriptor | None
1111
def __init__(self, enum_type: EnumDescriptor) -> None: ...
1212
def Name(self, number: _V) -> str: ...
1313
def Value(self, name: Text | bytes) -> _V: ...
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
class GeneratedProtocolMessageType(type): ...
1+
class GeneratedProtocolMessageType(type):
2+
def __new__(cls, name, bases, dictionary): ...
3+
def __init__(cls, name, bases, dictionary): ...
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from typing import Generic, Protocol, TypeVar
2+
3+
_T = TypeVar("_T")
4+
5+
class _ValueChecker(Protocol[_T]):
6+
def CheckValue(self, proposed_value: _T) -> _T: ...
7+
def DefaultValue(self) -> _T: ...
8+
9+
class TypeChecker(Generic[_T]):
10+
def __init__(self, *acceptable_types: _T): ...
11+
def CheckValue(self, proposed_value: _T) -> _T: ...
12+
13+
class TypeCheckerWithDefault(TypeChecker[_T]):
14+
def __init__(self, default_value: _T, *acceptable_types: _T): ...
15+
def DefaultValue(self) -> _T: ...

stubs/protobuf/google/protobuf/internal/well_known_types.pyi

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
from datetime import datetime, timedelta
22
from typing import Any as tAny, Optional
33

4-
class Error(Exception): ...
5-
class ParseError(Error): ...
6-
74
class Any:
85
type_url: tAny = ...
96
value: tAny = ...
10-
def Pack(self, msg: tAny, type_url_prefix: bytes = ..., deterministic: Optional[tAny] = ...) -> None: ...
7+
def Pack(self, msg: tAny, type_url_prefix: str = ..., deterministic: Optional[tAny] = ...) -> None: ...
118
def Unpack(self, msg: tAny): ...
129
def TypeName(self): ...
1310
def Is(self, descriptor: tAny): ...

0 commit comments

Comments
 (0)