mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-01 19:58:15 +00:00
Fix Enum type definition (#8624)
Using the : syntax leads to non member attributes.
> If an attribute is defined in the class body with a type annotation
> but with no assigned value, a type checker should assume this is a non-member attribute
```
class Pet(Enum):
genus: str # Non-member attribute
species: str # Non-member attribute
CAT = 1 # Member attribute
DOG = 2 # Member attribute
```
https://typing.python.org/en/latest/spec/enums.html#defining-members
This commit is contained in:
@@ -549,6 +549,8 @@ class PythonStubGenerator {
|
||||
stub << "class " << namer_.Type(*enum_def);
|
||||
imports->Export(ModuleFor(enum_def), namer_.Type(*enum_def));
|
||||
|
||||
imports->Import("typing", "cast");
|
||||
|
||||
if (version_.major == 3){
|
||||
imports->Import("enum", "IntEnum");
|
||||
stub << "(IntEnum)";
|
||||
@@ -559,8 +561,8 @@ class PythonStubGenerator {
|
||||
|
||||
stub << ":\n";
|
||||
for (const EnumVal *val : enum_def->Vals()) {
|
||||
stub << " " << namer_.Variant(*val) << ": "
|
||||
<< ScalarType(enum_def->underlying_type.base_type) << "\n";
|
||||
stub << " " << namer_.Variant(*val) << " = cast("
|
||||
<< ScalarType(enum_def->underlying_type.base_type) << ", ...)\n";
|
||||
}
|
||||
|
||||
if (parser_.opts.generate_object_based_api & enum_def->is_union) {
|
||||
|
||||
@@ -8,12 +8,13 @@ import typing
|
||||
from MyGame.Example.NestedUnion.TestSimpleTableWithEnum import TestSimpleTableWithEnum
|
||||
from MyGame.Example.NestedUnion.Vec3 import Vec3
|
||||
from flatbuffers import table
|
||||
from typing import cast
|
||||
|
||||
uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type
|
||||
|
||||
class Any(object):
|
||||
NONE: int
|
||||
Vec3: int
|
||||
TestSimpleTableWithEnum: int
|
||||
NONE = cast(int, ...)
|
||||
Vec3 = cast(int, ...)
|
||||
TestSimpleTableWithEnum = cast(int, ...)
|
||||
def AnyCreator(union_type: typing.Literal[Any.NONE, Any.Vec3, Any.TestSimpleTableWithEnum], table: table.Table) -> typing.Union[None, Vec3, TestSimpleTableWithEnum]: ...
|
||||
|
||||
|
||||
@@ -5,11 +5,12 @@ import numpy as np
|
||||
|
||||
import flatbuffers
|
||||
import typing
|
||||
from typing import cast
|
||||
|
||||
uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type
|
||||
|
||||
class Color(object):
|
||||
Red: int
|
||||
Green: int
|
||||
Blue: int
|
||||
Red = cast(int, ...)
|
||||
Green = cast(int, ...)
|
||||
Blue = cast(int, ...)
|
||||
|
||||
|
||||
@@ -5,11 +5,12 @@ import numpy as np
|
||||
|
||||
import flatbuffers
|
||||
import typing
|
||||
from typing import cast
|
||||
|
||||
uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type
|
||||
|
||||
class TestEnum(object):
|
||||
A: int
|
||||
B: int
|
||||
C: int
|
||||
A = cast(int, ...)
|
||||
B = cast(int, ...)
|
||||
C = cast(int, ...)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user