]>
code.delx.au - bg-scripts/blob - lib/Enum.py
2 # Copyright 2007 Greg Darke <gdar9540@usyd.edu.au>
3 # Licensed for distribution under the GPL version 2, check COPYING for details
4 # An enum like interface
15 return EnumContainer(*args
)
17 class EnumElement(object):
18 __slots__
= ('enumName', 'enumContainer')
19 def __init__(self
, enumName
, enumContainer
):
20 self
.enumName
= enumName
21 self
.enumContainer
= enumContainer
23 return '%s(%s)' % (self
.__class
__.__name
__, self
.enumName
)
26 def __eq__(self
, other
):
27 if not isinstance(other
, self
.__class
__): return NotImplemented
30 return hash(self
.enumName
) ^
hash(self
.enumContainer
)
32 class EnumContainer(object):
33 def __init__(self
, *enums
):
34 self
.enumList
= tuple( EnumElement(enumName
, self
) for enumName
in enums
)
35 for enumName
, enumElement
in itertools
.izip(enums
, self
.enumList
):
36 setattr(self
, enumName
, enumElement
)
38 def __contains__(self
, enum
):
39 return enum
in self
.enumList
42 return '%s(%s)' % (self
.__class
__.__name
__, ', '.join(self
.enumList
))
45 """Places contents of this enum into the callers global namespace"""
47 frameObject
, _
, _
, _
, _
= inspect
.stack
[1] # The stackframe of who called us
48 global_dict
= frameObject
.f_globals
50 for enum
in self
.enumList
:
51 if str(enum
) in global_dict
:
52 raise ValueError, '%s is already in your global dict' % enum
53 for enum
in self
.enumList
:
54 global_dict
[str(enum
)] = enum