# MiscUtils # Webware for Python # See Docs/index.html __all__ = [ 'Configurable', 'DBPool', 'DataTable', 'DictForArgs', 'Error', 'Funcs', 'MixIn', 'NamedValueAccess', 'PropertiesObject', 'unittest'] try: from cStringIO import StringIO except ImportError: from StringIO import StringIO try: import mx.DateTime as mxDateTime except ImportError: mxDateTime = None try: import datetime as nativeDateTime except ImportError: # fallback for Python < 2.3 if mxDateTime is None: try: import BasicDateTime as nativeDateTime except ImportError: nativeDateTime = None try: from types import StringTypes except ImportError: # fallback for Python < 2.2 from types import StringType, UnicodeType StringTypes = (StringType, UnicodeType) try: # for Python < 2.3 True, False except NameError: True, False = 1, 0 bool = lambda x: x and True or False try: AbstractError # Python might build this in some day. except NameError: class AbstractError(NotImplementedError): """ This exception is raised by abstract methods in abstract classes. It is a special case of NotImplementedError, that indicates that the implementation won't ever be provided at that location in the future --instead the subclass should provide it. Typical usage: from MiscUtils import AbstractError class Foo: def bar(self): raise AbstractError, self.__class__ Note that added the self.__class__ makes the resulting exception *much* more useful. """ pass # @@ 2002-11-10 ce: SubclassResponsibilityError is is now deprecated (post 0.7) # @@ (will be removed after 1.0) SubclassResponsibilityError = AbstractError class NoDefault: """ This provides a singleton "thing" which can be used to initialize the "default=" arguments for different retrieval methods. For example: from MiscUtils import NoDefault def bar(self, name, default=NoDefault): if default is NoDefault: return self._bars[name] # will raise exception for invalid key else: return self._bars.get(name, default) The value None does not suffice for "default=" because it does not indicate whether or not a value was passed. Consistently using this singleton is valuable due to subclassing situations: def bar(self, name, default=NoDefault): if someCondition: return self.specialBar(name) else: return SuperClass.bar(name, default) It's also useful if one method that uses "default=NoDefault" relies on another object and method to which it must pass the default. (This is similar to the subclassing situation.) """ pass # @@ 2002-11-10 ce: Tombstone is now deprecated (post 0.7) # @@ (will be removed after 1.0) Tombstone = NoDefault def InstallInWebKit(appServer): pass