title: Ordering enum value in python
body: <p>I would like to be able to arrange the ordering of Enum. Has somebody suggestions how this can be solved? </p>
  
  <p>The following Enum meta class is using: </p>
  
  <pre><code>class EnumMeta(type):
      def __new__(typ, name, bases, attrs):
          cls_attrs = {}
          cls_choices = []
          for attr_name, value in attrs.items():
              cls_attrs[attr_name] = attr_name.lower()
              if not attr_name.startswith("__"):
                  cls_choices.append((attr_name.lower(), value))
  
          def choices(cls):
              return cls_choices
  
          def values(cls, value=None):
              if value is None:
                  return {choice[0]: unicode(choice[1]) for choice in cls.choices()}
              elif isinstance(value, list):
                  return {choice[0]: unicode(choice[1]) for choice in cls.choices() if choice[0] in value}
              else:
                  return unicode(dict(cls.choices()).get(value))
  
          def keys(cls, nil=False):
              items = [item[0] for item in cls.choices()]
              if nil:
                  items.append('')
  
              return items
  
          def combined_length(cls):
              return len(",".join(cls.values().keys()))
  
          def max_length(cls):
              return max(map(len, cls.values().keys()))
  
          cls_attrs['choices'] = classmethod(choices)
          cls_attrs['values'] = classmethod(values)
          cls_attrs['keys'] = classmethod(keys)
          cls_attrs['combined_length'] = classmethod(combined_length)
          cls_attrs['max_length'] = classmethod(max_length)
  
          return type(name, bases, cls_attrs)
  </code></pre>
  
  <p>An example of an Enum is as follow: </p>
  
  <pre><code>class SideHemType:
      __ordering__ = ['double', 'single']
      __metaclass__ = EnumMeta
  
      Single = "Single side hem for opaque fabrics"
      Double = "Double side hem for transparent fabrics"
  
  
    class TestEnumOrdering:
          print SideHemType.keys()
          print SideHemType.values() 
  </code></pre>
  
  <p>By printing the Enum SideHemType first Double is printed and then Single. But I would like first Single and then Double. </p>