From d40551e00091a203c53bd8b83604bc6b532b9ded Mon Sep 17 00:00:00 2001 From: Ethan Pronovost Date: Wed, 7 Oct 2020 07:18:51 -0700 Subject: [PATCH] Update protobuf ExtensionDict (#4619) --- .../protobuf/internal/extension_dict.pyi | 22 +++++++++++++++++++ third_party/2and3/google/protobuf/message.pyi | 9 +++----- 2 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 third_party/2and3/google/protobuf/internal/extension_dict.pyi diff --git a/third_party/2and3/google/protobuf/internal/extension_dict.pyi b/third_party/2and3/google/protobuf/internal/extension_dict.pyi new file mode 100644 index 000000000..765a28a33 --- /dev/null +++ b/third_party/2and3/google/protobuf/internal/extension_dict.pyi @@ -0,0 +1,22 @@ +from typing import Any, Generic, Iterator, TypeVar + +from google.protobuf.descriptor import FieldDescriptor +from google.protobuf.message import Message + +_ContainerMessageT = TypeVar("_ContainerMessageT", bound=Message) +_ExtenderMessageT = TypeVar("_ExtenderMessageT", bound=Message) + +class _ExtensionFieldDescriptor(FieldDescriptor, Generic[_ContainerMessageT, _ExtenderMessageT]): ... + +class _ExtensionDict(Generic[_ContainerMessageT]): + def __init__(self, extended_message: _ContainerMessageT) -> None: ... + def __getitem__( + self, extension_handle: _ExtensionFieldDescriptor[_ContainerMessageT, _ExtenderMessageT] + ) -> _ExtenderMessageT: ... + def __setitem__( + self, extension_handle: _ExtensionFieldDescriptor[_ContainerMessageT, _ExtenderMessageT], value: _ExtenderMessageT + ) -> None: ... + def __delitem__(self, extension_handle: _ExtensionFieldDescriptor[_ContainerMessageT, _ExtenderMessageT]) -> None: ... + def __contains__(self, extension_handle: _ExtensionFieldDescriptor[_ContainerMessageT, _ExtenderMessageT]) -> bool: ... + def __iter__(self) -> Iterator[_ExtensionFieldDescriptor[_ContainerMessageT, Any]]: ... + def __len__(self) -> int: ... diff --git a/third_party/2and3/google/protobuf/message.pyi b/third_party/2and3/google/protobuf/message.pyi index 028b03913..60bcf8a67 100644 --- a/third_party/2and3/google/protobuf/message.pyi +++ b/third_party/2and3/google/protobuf/message.pyi @@ -1,16 +1,13 @@ import sys from typing import Any, ByteString, Sequence, Tuple, Type, TypeVar, Union -from .descriptor import Descriptor, DescriptorBase, FieldDescriptor +from .descriptor import Descriptor, FieldDescriptor +from .internal.extension_dict import _ExtensionDict class Error(Exception): ... class DecodeError(Error): ... class EncodeError(Error): ... -class _ExtensionDict: - def __getitem__(self, extension_handle: DescriptorBase) -> Any: ... - def __setitem__(self, extension_handle: DescriptorBase, value: Any) -> None: ... - _M = TypeVar("_M", bound=Message) # message type (of self) if sys.version_info < (3,): @@ -39,7 +36,7 @@ class Message: @classmethod def FromString(cls: Type[_M], s: _Serialized) -> _M: ... @property - def Extensions(self) -> _ExtensionDict: ... + def Extensions(self: _M) -> _ExtensionDict[_M]: ... # Intentionally left out typing on these three methods, because they are # stringly typed and it is not useful to call them on a Message directly. # We prefer more specific typing on individual subclasses of Message