| 123456789101112131415161718192021222324252627282930313233343536 |
- class ChoiceSetMeta(type):
- """
- Metaclass for ChoiceSet
- """
- def __call__(cls, *args, **kwargs):
- # Django will check if a 'choices' value is callable, and if so assume that it returns an iterable
- return getattr(cls, 'CHOICES', ())
- def __iter__(cls):
- choices = getattr(cls, 'CHOICES', ())
- return iter(choices)
- class ChoiceSet(metaclass=ChoiceSetMeta):
- CHOICES = list()
- LEGACY_MAP = dict()
- @classmethod
- def slug_to_id(cls, slug):
- """
- Return the legacy integer value corresponding to a slug.
- """
- return cls.LEGACY_MAP.get(slug)
- @classmethod
- def id_to_slug(cls, legacy_id):
- """
- Return the slug value corresponding to a legacy integer value.
- """
- if legacy_id in cls.LEGACY_MAP.values():
- # Invert the legacy map to allow lookup by integer
- legacy_map = dict([
- (id, slug) for slug, id in cls.LEGACY_MAP.items()
- ])
- return legacy_map.get(legacy_id)
|