Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
0.9
-
None
-
Patch Available
Description
Currently enums are represented in Python by classes (see THRIFT-546) but those classes are not referenced by the actual values (which are simply i32s). This means that it's impossible to find out whether something is an enum or an i32 by inspection.
e.g. I want to be able to look at the number 1 and realise it's an Operation.ADD or similar.
I propose adding an option 'enum' to the generator to support Python 3.4 style enums (see enum34 package on pypi). Any I32 that should be an enum is automatically converted into an IntEnum derived object on deserialising, and constants are also constructed with the correct type. If one chooses to enable the option, it's almost backwards compatible with existing code due to IntEnum, except that the dicts _VALUES_FOR_NAME/_NAMES_FOR_VALUES have been removed (no longer necessary, and don't play nicely with the Enum class).