    # 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