self.enums = list(values)
self._valid_lookup = dict(
- zip(objects, values)
+ zip(reversed(objects), reversed(values))
)
+
self._object_lookup = dict(
- (value, key) for key, value in self._valid_lookup.items()
- )
- self._valid_lookup.update(
- [(value, value) for value in self._valid_lookup.values()]
+ zip(values, objects)
)
+ self._valid_lookup.update([
+ (value, self._valid_lookup[self._object_lookup[value]])
+ for value in values
+ ])
+
@property
def native(self):
return self.native_enum
# Implements PEP 435 in the minimal fashion needed by SQLAlchemy
__members__ = OrderedDict()
- def __init__(self, name, value):
+ def __init__(self, name, value, alias=None):
self.name = name
self.value = value
self.__members__[name] = self
setattr(self.__class__, name, self)
+ if alias:
+ self.__members__[alias] = self
+ setattr(self.__class__, alias, self)
one = SomeEnum('one', 1)
two = SomeEnum('two', 2)
- three = SomeEnum('three', 3)
+ three = SomeEnum('three', 3, 'four')
@classmethod
def define_tables(cls, metadata):
{'id': 1, 'someenum': self.SomeEnum.two},
{'id': 2, 'someenum': self.SomeEnum.two},
{'id': 3, 'someenum': self.SomeEnum.one},
+ {'id': 4, 'someenum': self.SomeEnum.three},
+ {'id': 5, 'someenum': self.SomeEnum.four},
+ {'id': 6, 'someenum': 'three'},
+ {'id': 7, 'someenum': 'four'},
])
eq_(
(1, self.SomeEnum.two),
(2, self.SomeEnum.two),
(3, self.SomeEnum.one),
+ (4, self.SomeEnum.three),
+ (5, self.SomeEnum.three),
+ (6, self.SomeEnum.three),
+ (7, self.SomeEnum.three),
]
)
is_(e1.adapt(Enum).metadata, e1.metadata)
e1 = Enum(self.SomeEnum)
eq_(e1.adapt(ENUM).name, 'someenum')
- eq_(e1.adapt(ENUM).enums, ['one', 'two', 'three'])
+ eq_(e1.adapt(ENUM).enums, ['one', 'two', 'three', 'four'])
@testing.provide_metadata
def test_create_metadata_bound_no_crash(self):