X-Git-Url: https://code.delx.au/bg-scripts/blobdiff_plain/7fef5e45b01eb71bba28aefb7a50be3fcca9345c..f667bb5991af1eb85cb9585b4dfbdf7ea80f6024:/lib/Enum.py diff --git a/lib/Enum.py b/lib/Enum.py deleted file mode 100644 index 6bb2d3d..0000000 --- a/lib/Enum.py +++ /dev/null @@ -1,54 +0,0 @@ -#! python -# Copyright 2007 Greg Darke -# Licensed for distribution under the GPL version 2, check COPYING for details -# An enum like interface - -""" -An enum like interface -""" - -__all__ = ('enum', ) - -import itertools - -def enum(*args): - return EnumContainer(*args) - -class EnumElement(object): - __slots__ = ('enumName', 'enumContainer') - def __init__(self, enumName, enumContainer): - self.enumName = enumName - self.enumContainer = enumContainer - def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, self.enumName) - def __str__(self): - return self.enumName - def __eq__(self, other): - if not isinstance(other, self.__class__): return NotImplemented - return other is self - def __hash__(self): - return hash(self.enumName) ^ hash(self.enumContainer) - -class EnumContainer(object): - def __init__(self, *enums): - self.enumList = tuple( EnumElement(enumName, self) for enumName in enums) - for enumName, enumElement in itertools.izip(enums, self.enumList): - setattr(self, enumName, enumElement) - - def __contains__(self, enum): - return enum in self.enumList - - def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, ', '.join(self.enumList)) - - def explode(self): - """Places contents of this enum into the callers global namespace""" - import inspect - frameObject, _, _, _, _ = inspect.stack[1] # The stackframe of who called us - global_dict = frameObject.f_globals - del frameObject - for enum in self.enumList: - if str(enum) in global_dict: - raise ValueError, '%s is already in your global dict' % enum - for enum in self.enumList: - global_dict[str(enum)] = enum