#  _________________________________________________________________________
#
#  PyUtilib: A Python utility library.
#  Copyright (c) 2008 Sandia Corporation.
#  This software is distributed under the BSD License.
#  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
#  the U.S. Government retains certain rights in this software.
#  _________________________________________________________________________
"""
The outline of the PyUtilib Component Architecture (PCA) is adapted from Trac
(see the trac.core module).  This framework generalizes the Trac by supporting
multi-environment management of components, as well as non-singleton plugins.

This package provides a stand-alone module that defines all of the core
aspects of the PCA.  Related Python packages define extensions of this
framework that support current component-based applications.

NOTE: The PCA does not rely on any other part of PyUtilib.  Consequently,
this package can be independently used in other projects.
"""

from pyutilib.component.core.core import Plugin, implements, Interface, CreatePluginFactory, \
           PluginMeta, alias, ExtensionPoint, SingletonPlugin, \
           PluginFactory, PluginError, PluginGlobals, with_metaclass, \
           IPluginLoader, IPluginLoadPath, IIgnorePluginWhenLoading, \
           IOptionDataProvider, PluginEnvironment

PluginGlobals.add_env("pca")

#
# This declaration is here because this is a convenient place where
# all symbols in this module have been defined.
#


class IgnorePluginPlugins(SingletonPlugin):
    """Ignore plugins from the pyutilib.component module"""

    implements(IIgnorePluginWhenLoading)

    def ignore(self, name):
        return name in globals()

#
# Import the 'pyutilib.component' plugins
#
try:
    import pkg_resources
    #
    # Load modules associated with Plugins that are defined in
    # EGG files.
    #
    for entrypoint in pkg_resources.iter_entry_points('pyutilib.component'):
        plugin_class = entrypoint.load()
        # print "Loading plugins... (%s)" % entrypoint
except ImportError:
    pass
except Exception:
    import sys
    err = sys.exc_info()[1]
    from sys import stderr as SE
    SE.write("Error loading 'pyutilib.component' entry points: '%s'\n" % err)

#
# Remove the "pca" environment as the default
#
PluginGlobals.pop_env()
