def make_enum( name: str, package: str = 'foo.bar.v1', module: str = 'baz', values: typing.Tuple[str, int] = (), meta: metadata.Metadata = None, ) -> wrappers.EnumType: enum_value_pbs = [ desc.EnumValueDescriptorProto(name=i[0], number=i[1]) for i in values ] enum_pb = desc.EnumDescriptorProto( name=name, value=enum_value_pbs, ) return wrappers.EnumType( enum_pb=enum_pb, values=[ wrappers.EnumValueType(enum_value_pb=evpb) for evpb in enum_value_pbs ], meta=meta or metadata.Metadata(address=metadata.Address( name=name, package=tuple(package.split('.')), module=module, )), )
def _load_enum( self, enum: descriptor_pb2.EnumDescriptorProto, address: metadata.Address, path: Tuple[int], ) -> wrappers.EnumType: """Load enum descriptions from EnumDescriptorProtos.""" address = address.child(enum.name, path) # Put together wrapped objects for the enum values. values = [] for enum_value, i in zip(enum.value, range(0, sys.maxsize)): values.append( wrappers.EnumValueType( enum_value_pb=enum_value, meta=metadata.Metadata( address=address, documentation=self.docs.get(path + (2, i), self.EMPTY), ), )) # Load the enum itself. self.proto_enums[address.proto] = wrappers.EnumType( enum_pb=enum, meta=metadata.Metadata( address=address, documentation=self.docs.get(path, self.EMPTY), ), values=values, ) return self.proto_enums[address.proto]
def _load_enum(self, enum: descriptor_pb2.EnumDescriptorProto, address: metadata.Address, path: Tuple[int]) -> None: """Load enum descriptions from EnumDescriptorProtos.""" # Put together wrapped objects for the enum values. values = [] for enum_value, i in zip(enum.value, range(0, sys.maxsize)): values.append( wrappers.EnumValueType( enum_value_pb=enum_value, meta=metadata.Metadata( address=address, documentation=self.docs.get(path + (2, i), self.EMPTY), ), )) # Load the enum itself. ident = f'{str(address)}.{enum.name}' self.enums[ident] = wrappers.EnumType( enum_pb=enum, meta=metadata.Metadata( address=address, documentation=self.docs.get(path, self.EMPTY), ), values=values, )
def test_type_enum(): enum = wrappers.EnumType( values={}, enum_pb=descriptor_pb2.EnumDescriptorProto(), ) field = make_field( type='TYPE_ENUM', type_name='bogus.Enumerable', enum=enum, ) assert field.type == enum
def get_enum(dot_path: str) -> wrappers.EnumType: pieces = dot_path.split('.') pkg, module, name = pieces[:-2], pieces[-2], pieces[-1] return wrappers.EnumType( enum_pb=desc.EnumDescriptorProto(name=name), meta=metadata.Metadata(address=metadata.Address( name=name, package=tuple(pkg), module=module, )), values=[], )
def enum_factory(name: str, variants: Iterable[str]) -> wrappers.EnumType: enum_pb = descriptor_pb2.EnumDescriptorProto( name=name, value=tuple( descriptor_pb2.EnumValueDescriptorProto(name=v, number=i) for i, v in enumerate(variants))) enum = wrappers.EnumType(enum_pb=enum_pb, values=[ wrappers.EnumValueType(enum_value_pb=v) for v in enum_pb.value ]) return enum
def test_mock_value_enum(): values = [ descriptor_pb2.EnumValueDescriptorProto(name='UNSPECIFIED', number=0), descriptor_pb2.EnumValueDescriptorProto(name='SPECIFIED', number=1), ] enum = wrappers.EnumType( values=[wrappers.EnumValueType(enum_value_pb=i) for i in values], enum_pb=descriptor_pb2.EnumDescriptorProto(value=values), meta=metadata.Metadata(address=metadata.Address( module='bogus', name='Enumerable', )), ) field = make_field( type='TYPE_ENUM', type_name='bogus.Enumerable', enum=enum, ) assert field.mock_value == 'bogus.Enumerable.SPECIFIED'