From f0927787f08afc2f61492e986c56cd3f2193b1b8 Mon Sep 17 00:00:00 2001 From: Nipunn Koorapati Date: Tue, 19 May 2020 06:59:37 +1200 Subject: [PATCH] Update type var typing on protobuf message.pyi (#3996) Add support for message type var generics --- third_party/2and3/google/protobuf/message.pyi | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/third_party/2and3/google/protobuf/message.pyi b/third_party/2and3/google/protobuf/message.pyi index 215fb2b4c..2f9fe8af3 100644 --- a/third_party/2and3/google/protobuf/message.pyi +++ b/third_party/2and3/google/protobuf/message.pyi @@ -2,7 +2,7 @@ import sys from typing import Any, Sequence, Optional, Tuple, Type, TypeVar, Union -from .descriptor import DescriptorBase, FieldDescriptor +from .descriptor import Descriptor, DescriptorBase, FieldDescriptor class Error(Exception): ... class DecodeError(Error): ... @@ -12,7 +12,7 @@ class _ExtensionDict: def __getitem__(self, extension_handle: DescriptorBase) -> Any: ... def __setitem__(self, extension_handle: DescriptorBase, value: Any) -> None: ... -_T = TypeVar("_T") +_M = TypeVar("_M", bound=Message) # message type (of self) if sys.version_info < (3,): _Serialized = Union[bytes, buffer, unicode] @@ -20,12 +20,12 @@ else: _Serialized = bytes class Message: - DESCRIPTOR: Any + DESCRIPTOR: Descriptor def __deepcopy__(self, memo=...): ... def __eq__(self, other_msg): ... def __ne__(self, other_msg): ... - def MergeFrom(self, other_msg: Message) -> None: ... - def CopyFrom(self, other_msg: Message) -> None: ... + def MergeFrom(self: _M, other_msg: _M) -> None: ... + def CopyFrom(self: _M, other_msg: _M) -> None: ... def Clear(self) -> None: ... def SetInParent(self) -> None: ... def IsInitialized(self) -> bool: ... @@ -38,9 +38,10 @@ class Message: def ClearExtension(self, extension_handle): ... def ByteSize(self) -> int: ... @classmethod - def FromString(cls: Type[_T], s: _Serialized) -> _T: ... + def FromString(cls: Type[_M], s: _Serialized) -> _M: ... @property def Extensions(self) -> _ExtensionDict: ... + # 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