I am storing information about Widgets in my database, and each Widget has one (non-unique) transformation function associated with it. My problem is how to associate Widgets with their transformation function.
My first instinct was to use an enum for the transformation function. I am using sqlalchemy for my database ORM, which includes an enum type that makes it really easy to use an enum column. It takes care of validation, and I can simply have an enum in my code for the possible transformation functions, an enum column on Widgets, and then a map in my code from enum values to the actual functions.
Then I read why enums are evil. It’s pretty convincing, but if I use a reference table, then I can’t use a python enum object, and my map will have to be from strings to functions – which means that if I make a typo it might happen that I am mapping from a transformation that doesn’t exist in the database, which is not good, and I have no way of knowing that my map is exhaustive and correct.
What’s the best way to do this?