protobuf: Bring back Message.Extensions (#7154)

This commit is contained in:
Nipunn Koorapati
2022-02-08 04:51:41 -08:00
committed by GitHub
parent 494481a0ae
commit 96a09f6a35
2 changed files with 16 additions and 3 deletions

View File

@@ -2,14 +2,24 @@
# carefully in mypy-protobuf which internally runs stubtest. Skip those here.
google.protobuf\..*_pb2\..*
google.protobuf.internal.containers.BaseContainer.sort
# While Message and Descriptor are both defined with a null DESCRIPTOR,
# subclasses of Message and instances of EnumTypeWrapper require this value to
# be set, and since these type stubs are intended for use with protoc-generated
# python it's more accurate to make them non-nullable.
google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper.DESCRIPTOR
google.protobuf.message.Message.DESCRIPTOR
# Exists at runtime, but via a __getitem__/__setitem__ hack
# See https://github.com/protocolbuffers/protobuf/blob/3ea30d80847cd9561db570ae7f673afc15523545/python/google/protobuf/message.py#L67
google.protobuf.message.Message.Extensions
# These are typed as (self, **kwargs) at runtime as thin wrapper functions
# around the underlying true typing. We prefer the true typing
google.protobuf.internal.containers.BaseContainer.sort
google.protobuf.message.Message.SerializePartialToString
google.protobuf.message.Message.SerializeToString
google.protobuf.service.Service.GetDescriptor
google.protobuf.text_format.MessageToBytes
# Stubbed as static method, but actually exists as a property that's
# a function. Typeshed's typing is more useful
google.protobuf.service.Service.GetDescriptor

View File

@@ -2,7 +2,7 @@ from _typeshed import Self
from typing import Any, Sequence, TypeVar
from .descriptor import Descriptor, FieldDescriptor
from .internal.extension_dict import _ExtensionFieldDescriptor
from .internal.extension_dict import _ExtensionDict, _ExtensionFieldDescriptor
class Error(Exception): ...
class DecodeError(Error): ...
@@ -28,6 +28,9 @@ class Message:
# The TypeVar must be bound to `Message` or we get mypy errors, so we cannot use `Self` for `HasExtension` & `ClearExtension`
def HasExtension(self: _M, extension_handle: _ExtensionFieldDescriptor[_M, Any]) -> bool: ...
def ClearExtension(self: _M, extension_handle: _ExtensionFieldDescriptor[_M, Any]) -> None: ...
# The TypeVar must be bound to `Message` or we get mypy errors, so we cannot use `Self` for `Extensions`
@property
def Extensions(self: _M) -> _ExtensionDict[_M]: ...
def ByteSize(self) -> int: ...
@classmethod
def FromString(cls: type[Self], s: bytes) -> Self: ...