From 97ed15decba3367181c35bdb29457aa43688d60c Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Tue, 23 Jul 2024 13:12:25 +0100 Subject: [PATCH] Merge develop --- .../lib/pydantic/google/protobuf/__init__.py | 195 +++++++++--------- src/betterproto/plugin/models.py | 2 - 2 files changed, 97 insertions(+), 100 deletions(-) diff --git a/src/betterproto/lib/pydantic/google/protobuf/__init__.py b/src/betterproto/lib/pydantic/google/protobuf/__init__.py index c6b824d2f..bfbd6402a 100644 --- a/src/betterproto/lib/pydantic/google/protobuf/__init__.py +++ b/src/betterproto/lib/pydantic/google/protobuf/__init__.py @@ -14,9 +14,9 @@ if TYPE_CHECKING: - from dataclasses import dataclass + import dataclasses else: - from pydantic.dataclasses import dataclass + from pydantic import dataclasses from typing import ( Dict, @@ -25,7 +25,6 @@ ) from pydantic import model_validator -from pydantic.dataclasses import rebuild_dataclass import betterproto @@ -502,7 +501,7 @@ def __get_pydantic_core_schema__(cls, _source_type, _handler): return core_schema.int_schema(ge=0) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Any(betterproto.Message): """ `Any` contains an arbitrary serialized protocol buffer message along with a @@ -630,7 +629,7 @@ class Any(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class SourceContext(betterproto.Message): """ `SourceContext` represents information about the source of a @@ -644,7 +643,7 @@ class SourceContext(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Type(betterproto.Message): """A protocol buffer message type.""" @@ -672,7 +671,7 @@ class Type(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Field(betterproto.Message): """A single field of a message type.""" @@ -715,7 +714,7 @@ class Field(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Enum(betterproto.Message): """Enum type definition.""" @@ -742,7 +741,7 @@ class Enum(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumValue(betterproto.Message): """Enum value definition.""" @@ -756,7 +755,7 @@ class EnumValue(betterproto.Message): """Protocol buffer options.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Option(betterproto.Message): """ A protocol buffer option, which can be attached to a message, field, @@ -780,7 +779,7 @@ class Option(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Api(betterproto.Message): """ Api is a light-weight descriptor for an API Interface. @@ -842,7 +841,7 @@ class Api(betterproto.Message): """The source syntax of the service.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Method(betterproto.Message): """Method represents a method of an API interface.""" @@ -868,7 +867,7 @@ class Method(betterproto.Message): """The source syntax of this method.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Mixin(betterproto.Message): """ Declares an API Interface to be included in this interface. The including @@ -961,7 +960,7 @@ class Mixin(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FileDescriptorSet(betterproto.Message): """ The protocol compiler can output a FileDescriptorSet containing the .proto @@ -971,7 +970,7 @@ class FileDescriptorSet(betterproto.Message): file: List["FileDescriptorProto"] = betterproto.message_field(1) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FileDescriptorProto(betterproto.Message): """Describes a complete .proto file.""" @@ -1016,7 +1015,7 @@ class FileDescriptorProto(betterproto.Message): """The edition of the proto file.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class DescriptorProto(betterproto.Message): """Describes a message type.""" @@ -1038,14 +1037,14 @@ class DescriptorProto(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class DescriptorProtoExtensionRange(betterproto.Message): start: int = betterproto.int32_field(1) end: int = betterproto.int32_field(2) options: "ExtensionRangeOptions" = betterproto.message_field(3) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class DescriptorProtoReservedRange(betterproto.Message): """ Range of reserved tag numbers. Reserved tag numbers may not be used by @@ -1057,7 +1056,7 @@ class DescriptorProtoReservedRange(betterproto.Message): end: int = betterproto.int32_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class ExtensionRangeOptions(betterproto.Message): uninterpreted_option: List["UninterpretedOption"] = betterproto.message_field(999) """The parser stores options it doesn't recognize here. See above.""" @@ -1080,7 +1079,7 @@ class ExtensionRangeOptions(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class ExtensionRangeOptionsDeclaration(betterproto.Message): number: int = betterproto.int32_field(1) """The extension number declared within the extension range.""" @@ -1112,7 +1111,7 @@ class ExtensionRangeOptionsDeclaration(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FieldDescriptorProto(betterproto.Message): """Describes a field within a message.""" @@ -1189,7 +1188,7 @@ class FieldDescriptorProto(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class OneofDescriptorProto(betterproto.Message): """Describes a oneof.""" @@ -1197,7 +1196,7 @@ class OneofDescriptorProto(betterproto.Message): options: "OneofOptions" = betterproto.message_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumDescriptorProto(betterproto.Message): """Describes an enum type.""" @@ -1220,7 +1219,7 @@ class EnumDescriptorProto(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumDescriptorProtoEnumReservedRange(betterproto.Message): """ Range of reserved numeric values. Reserved values may not be used by @@ -1235,7 +1234,7 @@ class EnumDescriptorProtoEnumReservedRange(betterproto.Message): end: int = betterproto.int32_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumValueDescriptorProto(betterproto.Message): """Describes a value within an enum.""" @@ -1244,7 +1243,7 @@ class EnumValueDescriptorProto(betterproto.Message): options: "EnumValueOptions" = betterproto.message_field(3) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class ServiceDescriptorProto(betterproto.Message): """Describes a service.""" @@ -1253,7 +1252,7 @@ class ServiceDescriptorProto(betterproto.Message): options: "ServiceOptions" = betterproto.message_field(3) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class MethodDescriptorProto(betterproto.Message): """Describes a method of a service.""" @@ -1273,7 +1272,7 @@ class MethodDescriptorProto(betterproto.Message): """Identifies if server streams multiple server messages""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FileOptions(betterproto.Message): java_package: str = betterproto.string_field(1) """ @@ -1417,7 +1416,7 @@ def __post_init__(self) -> None: ) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class MessageOptions(betterproto.Message): message_set_wire_format: bool = betterproto.bool_field(1) """ @@ -1510,7 +1509,7 @@ def __post_init__(self) -> None: ) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FieldOptions(betterproto.Message): ctype: "FieldOptionsCType" = betterproto.enum_field(1) """ @@ -1608,13 +1607,13 @@ class FieldOptions(betterproto.Message): """The parser stores options it doesn't recognize here. See above.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FieldOptionsEditionDefault(betterproto.Message): edition: "Edition" = betterproto.enum_field(3) value: str = betterproto.string_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class OneofOptions(betterproto.Message): features: "FeatureSet" = betterproto.message_field(1) """Any features defined in the specific edition.""" @@ -1623,7 +1622,7 @@ class OneofOptions(betterproto.Message): """The parser stores options it doesn't recognize here. See above.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumOptions(betterproto.Message): allow_alias: bool = betterproto.bool_field(2) """ @@ -1664,7 +1663,7 @@ def __post_init__(self) -> None: ) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class EnumValueOptions(betterproto.Message): deprecated: bool = betterproto.bool_field(1) """ @@ -1688,7 +1687,7 @@ class EnumValueOptions(betterproto.Message): """The parser stores options it doesn't recognize here. See above.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class ServiceOptions(betterproto.Message): features: "FeatureSet" = betterproto.message_field(34) """Any features defined in the specific edition.""" @@ -1705,7 +1704,7 @@ class ServiceOptions(betterproto.Message): """The parser stores options it doesn't recognize here. See above.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class MethodOptions(betterproto.Message): deprecated: bool = betterproto.bool_field(33) """ @@ -1723,7 +1722,7 @@ class MethodOptions(betterproto.Message): """The parser stores options it doesn't recognize here. See above.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class UninterpretedOption(betterproto.Message): """ A message representing a option the parser does not recognize. This only @@ -1748,7 +1747,7 @@ class UninterpretedOption(betterproto.Message): aggregate_value: str = betterproto.string_field(8) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class UninterpretedOptionNamePart(betterproto.Message): """ The name of the uninterpreted option. Each string represents a segment in @@ -1762,7 +1761,7 @@ class UninterpretedOptionNamePart(betterproto.Message): is_extension: bool = betterproto.bool_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FeatureSet(betterproto.Message): """ TODO Enums in C++ gencode (and potentially other languages) are @@ -1783,7 +1782,7 @@ class FeatureSet(betterproto.Message): json_format: "FeatureSetJsonFormat" = betterproto.enum_field(6) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FeatureSetDefaults(betterproto.Message): """ A compiled specification for the defaults of a set of features. These @@ -1808,7 +1807,7 @@ class FeatureSetDefaults(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FeatureSetDefaultsFeatureSetEditionDefault(betterproto.Message): """ A map from every known edition with a unique set of defaults to its @@ -1821,7 +1820,7 @@ class FeatureSetDefaultsFeatureSetEditionDefault(betterproto.Message): features: "FeatureSet" = betterproto.message_field(2) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class SourceCodeInfo(betterproto.Message): """ Encapsulates information about the original source file from which a @@ -1876,7 +1875,7 @@ class SourceCodeInfo(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class SourceCodeInfoLocation(betterproto.Message): path: List[int] = betterproto.int32_field(1) """ @@ -1969,7 +1968,7 @@ class SourceCodeInfoLocation(betterproto.Message): leading_detached_comments: List[str] = betterproto.string_field(6) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class GeneratedCodeInfo(betterproto.Message): """ Describes the relationship between generated code and its original source @@ -1984,7 +1983,7 @@ class GeneratedCodeInfo(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class GeneratedCodeInfoAnnotation(betterproto.Message): path: List[int] = betterproto.int32_field(1) """ @@ -2011,7 +2010,7 @@ class GeneratedCodeInfoAnnotation(betterproto.Message): semantic: "GeneratedCodeInfoAnnotationSemantic" = betterproto.enum_field(5) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Duration(betterproto.Message): """ A Duration represents a signed, fixed-length span of time represented @@ -2092,7 +2091,7 @@ class Duration(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Empty(betterproto.Message): """ A generic empty message that you can re-use to avoid defining duplicated @@ -2107,7 +2106,7 @@ class Empty(betterproto.Message): pass -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FieldMask(betterproto.Message): """ `FieldMask` represents a set of symbolic field paths, for example: @@ -2315,7 +2314,7 @@ class FieldMask(betterproto.Message): """The set of field mask paths.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Struct(betterproto.Message): """ `Struct` represents a structured data value, consisting of fields @@ -2360,7 +2359,7 @@ def to_dict( return output -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Value(betterproto.Message): """ `Value` represents a dynamically typed value which can be either @@ -2404,7 +2403,7 @@ def check_oneof(cls, values): return cls._validate_field_groups(values) -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class ListValue(betterproto.Message): """ `ListValue` is a wrapper around a repeated field of values. @@ -2416,7 +2415,7 @@ class ListValue(betterproto.Message): """Repeated field of dynamically typed values.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Timestamp(betterproto.Message): """ A Timestamp represents a point in time independent of any time zone or local @@ -2526,7 +2525,7 @@ class Timestamp(betterproto.Message): """ -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class DoubleValue(betterproto.Message): """ Wrapper message for `double`. @@ -2538,7 +2537,7 @@ class DoubleValue(betterproto.Message): """The double value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class FloatValue(betterproto.Message): """ Wrapper message for `float`. @@ -2550,7 +2549,7 @@ class FloatValue(betterproto.Message): """The float value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Int64Value(betterproto.Message): """ Wrapper message for `int64`. @@ -2562,7 +2561,7 @@ class Int64Value(betterproto.Message): """The int64 value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class UInt64Value(betterproto.Message): """ Wrapper message for `uint64`. @@ -2574,7 +2573,7 @@ class UInt64Value(betterproto.Message): """The uint64 value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class Int32Value(betterproto.Message): """ Wrapper message for `int32`. @@ -2586,7 +2585,7 @@ class Int32Value(betterproto.Message): """The int32 value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class UInt32Value(betterproto.Message): """ Wrapper message for `uint32`. @@ -2598,7 +2597,7 @@ class UInt32Value(betterproto.Message): """The uint32 value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class BoolValue(betterproto.Message): """ Wrapper message for `bool`. @@ -2610,7 +2609,7 @@ class BoolValue(betterproto.Message): """The bool value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class StringValue(betterproto.Message): """ Wrapper message for `string`. @@ -2622,7 +2621,7 @@ class StringValue(betterproto.Message): """The string value.""" -@dataclass(eq=False, repr=False) +@dataclasses.dataclass(eq=False, repr=False) class BytesValue(betterproto.Message): """ Wrapper message for `bytes`. @@ -2634,40 +2633,40 @@ class BytesValue(betterproto.Message): """The bytes value.""" -rebuild_dataclass(Type) # type: ignore -rebuild_dataclass(Field) # type: ignore -rebuild_dataclass(Enum) # type: ignore -rebuild_dataclass(EnumValue) # type: ignore -rebuild_dataclass(Option) # type: ignore -rebuild_dataclass(Api) # type: ignore -rebuild_dataclass(Method) # type: ignore -rebuild_dataclass(FileDescriptorSet) # type: ignore -rebuild_dataclass(FileDescriptorProto) # type: ignore -rebuild_dataclass(DescriptorProto) # type: ignore -rebuild_dataclass(DescriptorProtoExtensionRange) # type: ignore -rebuild_dataclass(ExtensionRangeOptions) # type: ignore -rebuild_dataclass(FieldDescriptorProto) # type: ignore -rebuild_dataclass(OneofDescriptorProto) # type: ignore -rebuild_dataclass(EnumDescriptorProto) # type: ignore -rebuild_dataclass(EnumValueDescriptorProto) # type: ignore -rebuild_dataclass(ServiceDescriptorProto) # type: ignore -rebuild_dataclass(MethodDescriptorProto) # type: ignore -rebuild_dataclass(FileOptions) # type: ignore -rebuild_dataclass(MessageOptions) # type: ignore -rebuild_dataclass(FieldOptions) # type: ignore -rebuild_dataclass(FieldOptionsEditionDefault) # type: ignore -rebuild_dataclass(OneofOptions) # type: ignore -rebuild_dataclass(EnumOptions) # type: ignore -rebuild_dataclass(EnumValueOptions) # type: ignore -rebuild_dataclass(ServiceOptions) # type: ignore -rebuild_dataclass(MethodOptions) # type: ignore -rebuild_dataclass(UninterpretedOption) # type: ignore -rebuild_dataclass(FeatureSet) # type: ignore -rebuild_dataclass(FeatureSetDefaults) # type: ignore -rebuild_dataclass(FeatureSetDefaultsFeatureSetEditionDefault) # type: ignore -rebuild_dataclass(SourceCodeInfo) # type: ignore -rebuild_dataclass(GeneratedCodeInfo) # type: ignore -rebuild_dataclass(GeneratedCodeInfoAnnotation) # type: ignore -rebuild_dataclass(Struct) # type: ignore -rebuild_dataclass(Value) # type: ignore -rebuild_dataclass(ListValue) # type: ignore +dataclasses.rebuild_dataclass(Type) # type: ignore +dataclasses.rebuild_dataclass(Field) # type: ignore +dataclasses.rebuild_dataclass(Enum) # type: ignore +dataclasses.rebuild_dataclass(EnumValue) # type: ignore +dataclasses.rebuild_dataclass(Option) # type: ignore +dataclasses.rebuild_dataclass(Api) # type: ignore +dataclasses.rebuild_dataclass(Method) # type: ignore +dataclasses.rebuild_dataclass(FileDescriptorSet) # type: ignore +dataclasses.rebuild_dataclass(FileDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(DescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(DescriptorProtoExtensionRange) # type: ignore +dataclasses.rebuild_dataclass(ExtensionRangeOptions) # type: ignore +dataclasses.rebuild_dataclass(FieldDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(OneofDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(EnumDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(EnumValueDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(ServiceDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(MethodDescriptorProto) # type: ignore +dataclasses.rebuild_dataclass(FileOptions) # type: ignore +dataclasses.rebuild_dataclass(MessageOptions) # type: ignore +dataclasses.rebuild_dataclass(FieldOptions) # type: ignore +dataclasses.rebuild_dataclass(FieldOptionsEditionDefault) # type: ignore +dataclasses.rebuild_dataclass(OneofOptions) # type: ignore +dataclasses.rebuild_dataclass(EnumOptions) # type: ignore +dataclasses.rebuild_dataclass(EnumValueOptions) # type: ignore +dataclasses.rebuild_dataclass(ServiceOptions) # type: ignore +dataclasses.rebuild_dataclass(MethodOptions) # type: ignore +dataclasses.rebuild_dataclass(UninterpretedOption) # type: ignore +dataclasses.rebuild_dataclass(FeatureSet) # type: ignore +dataclasses.rebuild_dataclass(FeatureSetDefaults) # type: ignore +dataclasses.rebuild_dataclass(FeatureSetDefaultsFeatureSetEditionDefault) # type: ignore +dataclasses.rebuild_dataclass(SourceCodeInfo) # type: ignore +dataclasses.rebuild_dataclass(GeneratedCodeInfo) # type: ignore +dataclasses.rebuild_dataclass(GeneratedCodeInfoAnnotation) # type: ignore +dataclasses.rebuild_dataclass(Struct) # type: ignore +dataclasses.rebuild_dataclass(Value) # type: ignore +dataclasses.rebuild_dataclass(ListValue) # type: ignore diff --git a/src/betterproto/plugin/models.py b/src/betterproto/plugin/models.py index a7728f7ba..cf14cadb4 100644 --- a/src/betterproto/plugin/models.py +++ b/src/betterproto/plugin/models.py @@ -346,8 +346,6 @@ def has_message_field(self) -> bool: ) - - def is_map( proto_field_obj: FieldDescriptorProto, parent_message: DescriptorProto ) -> bool: