Skip to content

Commit

Permalink
[Python] Render enums as Python IntEnum
Browse files Browse the repository at this point in the history
This allows enums to be type check with mypy.
They will still behave like ints ->
> IntEnum is the same as Enum,
> but its members are also integers and can be used anywhere
> that an integer can be used.
> If any integer operation is performed with an IntEnum member,
> the resulting value loses its enumeration status.
https://docs.python.org/3/library/enum.html#enum.IntEnum

Only if the --python-typing flag is set.
  • Loading branch information
fliiiix committed Jun 1, 2024
1 parent 6ede1cc commit f1fcd60
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 4 deletions.
8 changes: 7 additions & 1 deletion src/idl_gen_python.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,13 @@ class PythonGenerator : public BaseGenerator {
// Begin enum code with a class declaration.
void BeginEnum(const EnumDef &enum_def, std::string *code_ptr) const {
auto &code = *code_ptr;
code += "class " + namer_.Type(enum_def) + "(object):\n";
if (parser_.opts.python_typing) {
code += "from enum import IntEnum\n";
code += "class " + namer_.Type(enum_def) + "(IntEnum):\n";
}
else {
code += "class " + namer_.Type(enum_def) + "(object):\n";
}
}

// Starts a new line and then indents.
Expand Down
3 changes: 2 additions & 1 deletion tests/MyGame/Example/NestedUnion/Any.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

# namespace: NestedUnion

class Any(object):
from enum import IntEnum
class Any(IntEnum):
NONE = 0
Vec3 = 1
TestSimpleTableWithEnum = 2
Expand Down
3 changes: 2 additions & 1 deletion tests/MyGame/Example/NestedUnion/Color.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
# namespace: NestedUnion

# Composite components of Monster color.
class Color(object):
from enum import IntEnum
class Color(IntEnum):
Red = 1
# \brief color Green
# Green is bit_flag with value (1u << 1)
Expand Down
3 changes: 2 additions & 1 deletion tests/MyGame/Example/TestEnum.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

# namespace: Example

class TestEnum(object):
from enum import IntEnum
class TestEnum(IntEnum):
A = 0
B = 1
C = 2

0 comments on commit f1fcd60

Please sign in to comment.