Files
catalyst/zipline/utils/sentinel.py
T
2015-10-19 16:55:32 -04:00

41 lines
963 B
Python

"""
Construction of sentinel objects.
Sentinel objects are used when you only care to check for object identity.
"""
import sys
def sentinel(name, doc=None):
@object.__new__ # bind a single instance to the name 'NotSpecified'
class result(object):
__doc__ = doc
__slots__ = ('__weakref__',)
def __new__(cls):
raise TypeError("Can't construct new instances of %s" % name)
def __repr__(self):
return name
def __reduce__(self):
return name
def __deepcopy__(self, _memo):
return self
def __copy__(self):
return self
cls = type(result)
cls.__name__ = name
try:
# traverse up one frame to find the module where this is defined
cls.__module__ = sys._getframe(1).f_globals.get(
'__name__',
'__main__',
)
except (AttributeError, ValueError):
pass
return result