Package glitter :: Package utils :: Module enum
[hide private]
[frames] | no frames]

Source Code for Module glitter.utils.enum

 1  """Base classes for enumerations. 
 2   
 3  @author: Stephan Wenger 
 4  @date: 2012-02-29 
 5  """ 
 6   
7 -class EnumConstant(object):
8 - def __init__(self, enum, name, value):
9 self._enum = enum 10 self.name = name 11 self._value = value
12
13 - def __str__(self):
14 return self.name
15
16 - def __repr__(self):
17 return self.name
18
19 -class Enum(object):
20 - def __init__(self, **kwargs):
21 self._reverse_dict = {} 22 for key, value in kwargs.items(): 23 self._add(key, value)
24
25 - def __getitem__(self, value):
26 return self._reverse_dict[value]
27
28 - def __call__(self, obj):
29 """Convert C{obj} into an appropriate L{EnumConstant}. 30 """ 31 32 if obj in self.__dict__.values(): # A matching EnumConstant is okay. 33 return obj 34 elif obj in self.__dict__.keys(): # A string is converted to an EnumConstant if possible. 35 return self.__dict__[obj] 36 else: # Anything else is just wrong. 37 raise TypeError("'%s' is not a valid enum constant here" % obj)
38
39 - def _add(self, key, value):
40 setattr(self, key, EnumConstant(self, key, value)) 41 self._reverse_dict[value] = getattr(self, key)
42
43 - def __repr__(self):
44 return "Enum(%s)" % ", ".join(map(str, self._reverse_dict.values()))
45