mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
Add __or__ to enum_type_wrapper so they can be used in type unions
PiperOrigin-RevId: 625381202
This commit is contained in:
parent
d44ba9090c
commit
57772cdae7
2 changed files with 43 additions and 0 deletions
|
|
@ -99,3 +99,7 @@ class EnumTypeWrapper(object):
|
|||
pass # fall out to break exception chaining
|
||||
raise AttributeError('Enum {} has no value defined for name {!r}'.format(
|
||||
self._enum_type.name, name))
|
||||
|
||||
def __or__(self, other):
|
||||
"""Returns the union type of self and other."""
|
||||
return type(self) | other
|
||||
|
|
|
|||
39
python/google/protobuf/internal/enum_type_wrapper_test.py
Normal file
39
python/google/protobuf/internal/enum_type_wrapper_test.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# Protocol Buffers - Google's data interchange format
|
||||
# Copyright 2008 Google Inc. All rights reserved.
|
||||
#
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file or at
|
||||
# https://developers.google.com/open-source/licenses/bsd
|
||||
"""Tests for EnumTypeWrapper."""
|
||||
|
||||
__author__ = "kmonte@google.com (Kyle Montemayor)"
|
||||
|
||||
import types
|
||||
import unittest
|
||||
|
||||
from google.protobuf.internal import enum_type_wrapper
|
||||
|
||||
from google.protobuf import unittest_pb2
|
||||
|
||||
|
||||
class EnumTypeWrapperTest(unittest.TestCase):
|
||||
|
||||
def test_type_union(self):
|
||||
enum_type = enum_type_wrapper.EnumTypeWrapper(
|
||||
unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR
|
||||
)
|
||||
union_type = enum_type | int
|
||||
self.assertIsInstance(union_type, types.UnionType)
|
||||
|
||||
def get_union() -> union_type:
|
||||
return enum_type
|
||||
|
||||
union = get_union()
|
||||
self.assertIsInstance(union, enum_type_wrapper.EnumTypeWrapper)
|
||||
self.assertEqual(
|
||||
union.DESCRIPTOR, unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue