[Checkins] SVN: Zope3/branches/jim-adapter/src/zope/ Move directive schemas and handlers of elementary directives (adapter, subscriber,

Philipp von Weitershausen philikon at philikon.de
Tue Apr 11 06:03:11 EDT 2006


Log message for revision 66842:
  Move directive schemas and handlers of elementary directives (adapter, subscriber,
  utility) to zope.component.zcml.  Tests aren't moved yet (and BBB isn't provided either)
  

Changed:
  U   Zope3/branches/jim-adapter/src/zope/app/apidoc/codemodule/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/browser/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/browser/tests/test_directives.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/contentdirective.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/meta.zcml
  U   Zope3/branches/jim-adapter/src/zope/app/component/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/metadirectives.py
  U   Zope3/branches/jim-adapter/src/zope/app/component/tests/test_directives.py
  U   Zope3/branches/jim-adapter/src/zope/app/dav/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/mail/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/preference/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/i18nresourcemeta.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/icon.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/menumeta.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/resourcemeta.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/browser/viewmeta.py
  U   Zope3/branches/jim-adapter/src/zope/app/publisher/xmlrpc/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/renderer/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/schema/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/security/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/securitypolicy/metaconfigure.py
  U   Zope3/branches/jim-adapter/src/zope/app/wfmc/metaconfigure.py
  A   Zope3/branches/jim-adapter/src/zope/component/zcml.py
  U   Zope3/branches/jim-adapter/src/zope/i18n/zcml.py
  U   Zope3/branches/jim-adapter/src/zope/viewlet/metaconfigure.py

-=-
Modified: Zope3/branches/jim-adapter/src/zope/app/apidoc/codemodule/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/apidoc/codemodule/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/apidoc/codemodule/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -17,7 +17,7 @@
 """
 __docformat__ = 'restructuredtext'
 from zope.interface import implements
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 
 from zope.app.apidoc import classregistry
 from zope.app.apidoc.codemodule.interfaces import IAPIDocRootModule

Modified: Zope3/branches/jim-adapter/src/zope/app/component/browser/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/browser/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/browser/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -15,8 +15,7 @@
 
 $Id$
 """
-from zope.app.component.metaconfigure import utility
-from zope.app.component.metaconfigure import interface as ifaceDirective
+from zope.component.zcml import utility, interface as ifaceDirective
 from tools import IToolType, IToolConfiguration, ToolConfiguration
 
 

Modified: Zope3/branches/jim-adapter/src/zope/app/component/browser/tests/test_directives.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/browser/tests/test_directives.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/browser/tests/test_directives.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -59,7 +59,7 @@
      'IDummyUtility']
 
     >>> tool['callable'].__module__
-    'zope.app.component.metaconfigure'
+    'zope.component.zcml'
     """
 
 def test_suite():

Modified: Zope3/branches/jim-adapter/src/zope/app/component/contentdirective.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/contentdirective.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/contentdirective.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -24,6 +24,7 @@
 from zope.component.interfaces import IFactory
 from zope.component.factory import Factory
 from zope.component.interface import provideInterface
+from zope.component.zcml import utility
 from zope.interface import classImplements
 from zope.schema.interfaces import IField
 from zope.configuration.exceptions import ConfigurationError
@@ -31,7 +32,6 @@
 from zope.annotation.interfaces import IAttributeAnnotatable
 
 from zope.app.component.interfaces import ILocalUtility
-from zope.app.component.metaconfigure import utility
 from zope.app.security.protectclass import protectLikeUnto, protectName
 from zope.app.security.protectclass import protectSetAttribute
 

Modified: Zope3/branches/jim-adapter/src/zope/app/component/meta.zcml
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/meta.zcml	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/meta.zcml	2006-04-11 10:03:07 UTC (rev 66842)
@@ -6,29 +6,29 @@
 
     <meta:directive
         name="interface"
-        schema=".metadirectives.IInterfaceDirective"
-        handler="zope.app.component.metaconfigure.interface"
+        schema="zope.component.zcml.IInterfaceDirective"
+        handler="zope.component.zcml.interface"
         />
 
     <meta:directive
         name="adapter"
-        schema=".metadirectives.IAdapterDirective"
-        handler="zope.app.component.metaconfigure.adapter"
+        schema="zope.component.zcml.IAdapterDirective"
+        handler="zope.component.zcml.adapter"
         />
 
     <meta:directive
         name="subscriber"
-        schema=".metadirectives.ISubscriberDirective"
-        handler="zope.app.component.metaconfigure.subscriber"
+        schema="zope.component.zcml.ISubscriberDirective"
+        handler="zope.component.zcml.subscriber"
         />
 
-
     <meta:directive
         name="utility"
-        schema=".metadirectives.IUtilityDirective"
-        handler="zope.app.component.metaconfigure.utility"
+        schema="zope.component.zcml.IUtilityDirective"
+        handler="zope.component.zcml.utility"
         />
 
+
     <!-- BBB 2006/02/24, to be removed after 12 months -->
     <meta:directive
         name="factory"

Modified: Zope3/branches/jim-adapter/src/zope/app/component/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -18,253 +18,18 @@
 __docformat__ = 'restructuredtext'
 
 import warnings
-import zope.interface
 import zope.component
 from zope import component
+from zope.interface import Interface
+from zope.component.zcml import handler, proxify, utility
+from zope.component.interface import provideInterface
 from zope.component.interfaces import IDefaultViewName, IFactory
 from zope.configuration.exceptions import ConfigurationError
-from zope.interface import Interface, providedBy
-from zope.interface.interfaces import IInterface
-from zope.proxy import ProxyBase, getProxiedObject
-
-from zope.security.checker import InterfaceChecker, CheckerPublic
+from zope.security.checker import CheckerPublic
 from zope.security.checker import Checker, NamesChecker
-from zope.security.proxy import Proxy
-from zope.security.adapter import LocatingTrustedAdapterFactory
-from zope.security.adapter import LocatingUntrustedAdapterFactory
-from zope.security.adapter import TrustedAdapterFactory
 
 PublicPermission = 'zope.Public'
 
-def handler(methodName, *args, **kwargs):
-    method=getattr(zope.component.getGlobalSiteManager(), methodName)
-    method(*args, **kwargs)
-
-from zope.component.interface import provideInterface
-def interface(_context, interface, type=None, name=''):
-    _context.action(
-        discriminator = None,
-        callable = provideInterface,
-        args = (name, interface, type)
-        )
-
-
-class PermissionProxy(ProxyBase):
-
-    __slots__ = ('__Security_checker__', )
-
-    def __providedBy__(self):
-        return providedBy(getProxiedObject(self))
-    __providedBy__ = property(__providedBy__)
-
-def proxify(ob, checker):
-    """Try to get the object proxied with the `checker`, but not too soon
-
-    We really don't want to proxy the object unless we need to.
-    """
-
-    ob = PermissionProxy(ob)
-    ob.__Security_checker__ = checker
-    return ob
-
-_handler=handler
-def subscriber(_context, for_=None, factory=None, handler=None, provides=None,
-               permission=None, trusted=False, locate=False):
-
-
-    if factory is None:
-        if handler is None:
-            raise TypeError("No factory or handler provided")
-        if provides is not None:
-            raise TypeError("Cannot use handler with provides")
-        factory = handler
-    else:
-        if handler is not None:
-            raise TypeError("Cannot use handler with factory")
-        if provides is None:
-            import warnings
-            warnings.warn(
-                "\n  %s\n"
-                "Use of factory without provides to indicate a handler "
-                "is deprecated and will change it's meaning in Zope 3.3. "
-                "Use the handler attribute instead."
-                % _context.info,
-                DeprecationWarning)
-
-    if for_ is None:
-        for_ = component.adaptedBy(factory)
-        if for_ is None:
-            raise TypeError("No for attribute was provided and can't "
-                            "determine what the factory (or handler) adapts.")
-
-    if permission is not None:
-        if permission == PublicPermission:
-            permission = CheckerPublic
-        checker = InterfaceChecker(provides, permission)
-        factory = _protectedFactory(factory, checker)
-
-    for_ = tuple(for_)
-
-    # invoke custom adapter factories
-    if locate or (permission is not None and permission is not CheckerPublic):
-        if trusted:
-            factory = LocatingTrustedAdapterFactory(factory)
-        else:
-            factory = LocatingUntrustedAdapterFactory(factory)
-    else:
-        if trusted:
-            factory = TrustedAdapterFactory(factory)
-
-    _context.action(
-        discriminator = None,
-        callable = _handler,
-        args = ('subscribe',
-                for_, provides, factory, _context.info),
-        )
-
-    if provides is not None:
-        _context.action(
-            discriminator = None,
-            callable = provideInterface,
-            args = ('', provides)
-            )
-
-    # For each interface, state that the adapter provides that interface.
-    for iface in for_:
-        if iface is not None:
-            _context.action(
-                discriminator = None,
-                callable = provideInterface,
-                args = ('', iface)
-                )
-
-def adapter(_context, factory, provides=None, for_=None, permission=None,
-            name='', trusted=False, locate=False):
-
-    if for_ is None:
-        if len(factory) == 1:
-            for_ = component.adaptedBy(factory[0])
-
-        if for_ is None:
-            raise TypeError("No for attribute was provided and can't "
-                            "determine what the factory adapts.")
-
-    for_ = tuple(for_)
-
-    if provides is None:
-        if len(factory) == 1:
-            p = list(zope.interface.implementedBy(factory[0]))
-            if len(p) == 1:
-                provides = p[0]
-
-        if provides is None:
-            raise TypeError("Missing 'provides' attribute")
-
-    # Generate a single factory from multiple factories:
-    factories = factory
-    if len(factories) == 1:
-        factory = factories[0]
-    elif len(factories) < 1:
-        raise ValueError("No factory specified")
-    elif len(factories) > 1 and len(for_) != 1:
-        raise ValueError("Can't use multiple factories and multiple for")
-    else:
-        factory = _rolledUpFactory(factories)
-
-    if permission is not None:
-        if permission == PublicPermission:
-            permission = CheckerPublic
-        checker = InterfaceChecker(provides, permission)
-        factory = _protectedFactory(factory, checker)
-
-    # invoke custom adapter factories
-    if locate or (permission is not None and permission is not CheckerPublic):
-        if trusted:
-            factory = LocatingTrustedAdapterFactory(factory)
-        else:
-            factory = LocatingUntrustedAdapterFactory(factory)
-    else:
-        if trusted:
-            factory = TrustedAdapterFactory(factory)
-
-    _context.action(
-        discriminator = ('adapter', for_, provides, name),
-        callable = handler,
-        args = ('provideAdapter',
-                for_, provides, name, factory, _context.info),
-        )
-    _context.action(
-        discriminator = None,
-        callable = provideInterface,
-        args = ('', provides)
-               )
-    if for_:
-        for iface in for_:
-            if iface is not None:
-                _context.action(
-                    discriminator = None,
-                    callable = provideInterface,
-                    args = ('', iface)
-                    )
-
-def _rolledUpFactory(factories):
-    # This has to be named 'factory', aparently, so as not to confuse
-    # apidoc :(
-    def factory(ob):
-        for f in factories:
-            ob = f(ob)
-        return ob
-    # Store the original factory for documentation
-    factory.factory = factories[0]
-    return factory
-
-def _protectedFactory(original_factory, checker):
-    # This has to be named 'factory', aparently, so as not to confuse
-    # apidoc :(
-    def factory(*args):
-        ob = original_factory(*args)
-        try:
-            ob.__Security_checker__ = checker
-        except AttributeError:
-            ob = Proxy(ob, checker)
-
-        return ob
-    factory.factory = original_factory
-    return factory
-
-
-def utility(_context, provides=None, component=None, factory=None,
-            permission=None, name=''):
-    if factory:
-        if component:
-            raise TypeError("Can't specify factory and component.")
-        component = factory()
-
-    if provides is None:
-        provides = list(zope.interface.providedBy(component))
-        if len(provides) == 1:
-            provides = provides[0]
-        else:
-            raise TypeError("Missing 'provides' attribute")
-
-    if permission is not None:
-        if permission == PublicPermission:
-            permission = CheckerPublic
-        checker = InterfaceChecker(provides, permission)
-
-        component = proxify(component, checker)
-
-    _context.action(
-        discriminator = ('utility', provides, name),
-        callable = handler,
-        args = ('registerUtility', component, provides, name),
-        )
-    _context.action(
-        discriminator = None,
-        callable = provideInterface,
-        args = (provides.__module__ + '.' + provides.getName(), provides)
-               )
-
 # BBB 2006/02/24, to be removed after 12 months
 def factory(_context, component, id, title=None, description=None):
     try:

Modified: Zope3/branches/jim-adapter/src/zope/app/component/metadirectives.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/metadirectives.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/metadirectives.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -20,6 +20,7 @@
 import zope.configuration.fields
 import zope.interface
 import zope.schema
+from zope.component.zcml import IBasicComponentInformation
 
 import zope.app.security.fields
 import zope.app.component.fields
@@ -33,33 +34,6 @@
     specified one.
     """
 
-class IBasicComponentInformation(zope.interface.Interface):
-
-    component = zope.configuration.fields.GlobalObject(
-        title=_("Component to use"),
-        description=_("Python name of the implementation object.  This"
-                      " must identify an object in a module using the"
-                      " full dotted name.  If specified, the"
-                      " ``factory`` field must be left blank."),
-        required=False,
-        )
-
-    permission = zope.app.security.fields.Permission(
-        title=_("Permission"),
-        description=_("Permission required to use this component."),
-        required=False,
-        )
-
-    factory = zope.configuration.fields.GlobalObject(
-        title=_("Factory"),
-        description=_("Python name of a factory which can create the"
-                      " implementation object.  This must identify an"
-                      " object in a module using the full dotted name."
-                      " If specified, the ``component`` field must"
-                      " be left blank."),
-        required=False,
-        )
-
 class IBasicViewInformation(zope.interface.Interface):
     """This is the basic information for all views."""
 
@@ -147,176 +121,7 @@
         required=True
         )
 
-class IInterfaceDirective(zope.interface.Interface):
-    """
-    Define an interface
-    """
 
-    interface = zope.configuration.fields.GlobalInterface(
-        title=_("Interface"),
-        required=True,
-        )
-
-    type = zope.configuration.fields.GlobalInterface(
-        title=_("Interface type"),
-        required=False,
-        )
-
-    name = zope.schema.TextLine(
-        title=_("Name"),
-        required=False,
-        )
-
-class IAdapterDirective(zope.interface.Interface):
-    """
-    Register an adapter
-    """
-
-    factory = zope.configuration.fields.Tokens(
-        title=_("Adapter factory/factories"),
-        description=_("A list of factories (usually just one) that create"
-                      " the adapter instance."),
-        required=True,
-        value_type=zope.configuration.fields.GlobalObject()
-        )
-
-    provides = zope.configuration.fields.GlobalInterface(
-        title=_("Interface the component provides"),
-        description=_("This attribute specifies the interface the adapter"
-                      " instance must provide."),
-        required=False,
-        )
-
-    for_ = zope.configuration.fields.Tokens(
-        title=_("Specifications to be adapted"),
-        description=_("This should be a list of interfaces or classes"),
-        required=False,
-        value_type=zope.configuration.fields.GlobalObject(
-          missing_value=object(),
-          ),
-        )
-
-    permission = zope.app.security.fields.Permission(
-        title=_("Permission"),
-        description=_("This adapter is only available, if the principal"
-                      " has this permission."),
-        required=False,
-        )
-
-    name = zope.schema.TextLine(
-        title=_("Name"),
-        description=_("Adapters can have names.\n\n"
-                      "This attribute allows you to specify the name for"
-                      " this adapter."),
-        required=False,
-        )
-
-    trusted = zope.configuration.fields.Bool(
-        title=_("Trusted"),
-        description=_("""Make the adapter a trusted adapter
-
-        Trusted adapters have unfettered access to the objects they
-        adapt.  If asked to adapt security-proxied objects, then,
-        rather than getting an unproxied adapter of security-proxied
-        objects, you get a security-proxied adapter of unproxied
-        objects.
-        """),
-        required=False,
-        default=False,
-        )
-
-    locate = zope.configuration.fields.Bool(
-        title=_("Locate"),
-        description=_("""Make the adapter a locatable adapter
-
-        Located adapter should be used if a non-public permission
-        is used.
-        """),
-        required=False,
-        default=False,
-        )
-
-class ISubscriberDirective(zope.interface.Interface):
-    """
-    Register a subscriber
-    """
-
-    factory = zope.configuration.fields.GlobalObject(
-        title=_("Subscriber factory"),
-        description=_("A factory used to create the subscriber instance."),
-        required=False,
-        )
-
-    handler = zope.configuration.fields.GlobalObject(
-        title=_("Handler"),
-        description=_("A callable object that handles events."),
-        required=False,
-        )
-
-    provides = zope.configuration.fields.GlobalInterface(
-        title=_("Interface the component provides"),
-        description=_("This attribute specifies the interface the adapter"
-                      " instance must provide."),
-        required=False,
-        )
-
-    for_ = zope.configuration.fields.Tokens(
-        title=_("Interfaces or classes that this subscriber depends on"),
-        description=_("This should be a list of interfaces or classes"),
-        required=False,
-        value_type=zope.configuration.fields.GlobalObject(
-          missing_value = object(),
-          ),
-        )
-
-    permission = zope.app.security.fields.Permission(
-        title=_("Permission"),
-        description=_("This subscriber is only available, if the"
-                      " principal has this permission."),
-        required=False,
-        )
-
-    trusted = zope.configuration.fields.Bool(
-        title=_("Trusted"),
-        description=_("""Make the subscriber a trusted subscriber
-
-        Trusted subscribers have unfettered access to the objects they
-        adapt.  If asked to adapt security-proxied objects, then,
-        rather than getting an unproxied subscriber of security-proxied
-        objects, you get a security-proxied subscriber of unproxied
-        objects.
-        """),
-        required=False,
-        default=False,
-        )
-
-    locate = zope.configuration.fields.Bool(
-        title=_("Locate"),
-        description=_("""Make the subscriber a locatable subscriber
-
-        Located subscribers should be used if a non-public permission
-        is used.
-        """),
-        required=False,
-        default=False,
-        )
-
-class IUtilityDirective(IBasicComponentInformation):
-    """Register a utility."""
-
-    provides = zope.configuration.fields.GlobalInterface(
-        title=_("Provided interface"),
-        description=_("Interface provided by the utility."),
-        required=False,
-        )
-
-    name = zope.schema.TextLine(
-        title=_("Name"),
-        description=_("Name of the registration.  This is used by"
-                      " application code when locating a utility."),
-        required=False,
-        )
-
 # BBB 2006/02/24, to be removed after 12 months
 class IFactoryDirective(zope.interface.Interface):
     """Define a factory"""

Modified: Zope3/branches/jim-adapter/src/zope/app/component/tests/test_directives.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/component/tests/test_directives.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/component/tests/test_directives.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -28,6 +28,7 @@
 from zope.component.registry import SubscriptionRegistration
 from zope.component.interfaces import ComponentLookupError
 from zope.component.interface import queryInterface
+from zope.component.zcml import interface
 
 from zope.configuration.xmlconfig import xmlconfig, XMLConfig
 from zope.configuration.exceptions import ConfigurationError
@@ -38,7 +39,6 @@
 import zope.app.component
 from zope.app import zapi
 from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.component.metaconfigure import interface
 from zope.app.component.tests.adapter import A1, A2, A3, Handler
 from zope.app.component.tests.adapter import I1, I2, I3, IS
 from zope.app.component.tests.components import IContent, Content, Comp, comp

Modified: Zope3/branches/jim-adapter/src/zope/app/dav/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/dav/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/dav/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -17,9 +17,9 @@
 """
 __docformat__ = 'restructuredtext'
 
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 from zope.interface import directlyProvides
-from interfaces import IDAVNamespace
+from zope.app.dav.interfaces import IDAVNamespace
 
 def interface(_context, for_, interface):
     directlyProvides(interface, IDAVNamespace)

Modified: Zope3/branches/jim-adapter/src/zope/app/mail/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/mail/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/mail/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -17,12 +17,11 @@
 """
 __docformat__ = 'restructuredtext'
 
+from zope.component import queryUtility
+from zope.component.zcml import handler, proxify, PublicPermission
 from zope.configuration.exceptions import ConfigurationError
-
 from zope.security.checker import InterfaceChecker, CheckerPublic
 
-from zope.app import zapi
-from zope.app.component.metaconfigure import handler, proxify, PublicPermission
 from zope.app.mail.delivery import QueuedMailDelivery, DirectMailDelivery
 from zope.app.mail.delivery import QueueProcessorThread
 from zope.app.mail.interfaces import IMailer, IMailDelivery
@@ -46,7 +45,7 @@
 
         handler('registerUtility', delivery, IMailDelivery, name)
 
-        mailerObject = zapi.queryUtility(IMailer, mailer)
+        mailerObject = queryUtility(IMailer, mailer)
         if mailerObject is None:
             raise ConfigurationError("Mailer %r is not defined" %mailer)
 
@@ -64,7 +63,7 @@
 def directDelivery(_context, permission, mailer, name="Mail"):
 
     def createDirectDelivery():
-        mailerObject = zapi.queryUtility(IMailer, mailer)
+        mailerObject = queryUtility(IMailer, mailer)
         if mailerObject is None:
             raise ConfigurationError("Mailer %r is not defined" %mailer)
 

Modified: Zope3/branches/jim-adapter/src/zope/app/preference/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/preference/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/preference/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -16,7 +16,7 @@
 $Id: metaconfigure.py 26889 2004-08-04 04:00:36Z pruggera $
 """
 __docformat__ = 'restructuredtext'
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 
 from zope.app.preference.interfaces import IPreferenceGroup
 from zope.app.preference.preference import PreferenceGroup

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/i18nresourcemeta.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/i18nresourcemeta.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/i18nresourcemeta.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -21,14 +21,12 @@
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.security.proxy import Proxy
 from zope.security.checker import CheckerPublic, Checker
+from zope.component.zcml import handler
 
-from zope.app import zapi
-from zope.app.component.metaconfigure import handler
 from zope.app.publisher.fileresource import File, Image
+from zope.app.publisher.browser.i18nfileresource import I18nFileResourceFactory
 
-from i18nfileresource import I18nFileResourceFactory
 
-
 class I18nResource(object):
 
     type = IBrowserRequest

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/icon.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/icon.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/icon.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -23,8 +23,8 @@
 from zope.configuration.exceptions import ConfigurationError
 from zope.traversing.namespace import getResource
 from zope.component.interface import provideInterface
+from zope.component.zcml import handler
 
-from zope.app.component.metaconfigure import handler
 from zope.app.publisher.browser import metaconfigure
 
 IName = re.compile('I[A-Z][a-z]')

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/menumeta.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/menumeta.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/menumeta.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -23,9 +23,8 @@
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.security.checker import InterfaceChecker, CheckerPublic
 from zope.component.interface import provideInterface
+from zope.component.zcml import adapter, proxify, utility
 
-from zope.app.component.metaconfigure import adapter, proxify
-from zope.app.component.metaconfigure import utility
 from zope.app.component.contentdirective import ClassDirective
 from zope.app.pagetemplate.engine import Engine
 from zope.app.container.interfaces import IAdding

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -18,6 +18,7 @@
 import warnings
 from zope.component.interfaces import IDefaultViewName
 from zope.component.interface import provideInterface
+from zope.component.zcml import handler
 from zope.configuration.exceptions import ConfigurationError
 from zope.interface import directlyProvides
 from zope.interface.interface import InterfaceClass
@@ -25,7 +26,6 @@
 from zope.publisher.interfaces.browser import IBrowserSkinType
 
 from zope.app import zapi, layers, skins
-from zope.app.component.metaconfigure import handler
 
 # referred to through ZCML
 from zope.app.publisher.browser.resourcemeta import resource

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/resourcemeta.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/resourcemeta.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/resourcemeta.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -22,9 +22,9 @@
 from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.security.checker import CheckerPublic, NamesChecker
+from zope.component.zcml import handler
 
 from zope.app import zapi
-from zope.app.component.metaconfigure import handler
 
 from fileresource import FileResourceFactory, ImageResourceFactory
 from pagetemplateresource import PageTemplateResourceFactory

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/browser/viewmeta.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/browser/viewmeta.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/browser/viewmeta.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -20,6 +20,7 @@
 from zope.component import queryMultiAdapter
 from zope.component.interfaces import ComponentLookupError, IDefaultViewName
 from zope.component.interface import provideInterface
+from zope.component.zcml import handler
 from zope.interface import implements, classImplements, Interface
 from zope.publisher.interfaces import NotFound
 from zope.security.checker import CheckerPublic, Checker, defineChecker
@@ -29,7 +30,6 @@
 from zope.publisher.interfaces.browser import IBrowserPublisher
 from zope.publisher.browser import BrowserView
 
-from zope.app.component.metaconfigure import handler
 from zope.app.pagetemplate.simpleviewclass import SimpleViewClass
 from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
 from zope.app.publisher.browser.menumeta import menuItemDirective

Modified: Zope3/branches/jim-adapter/src/zope/app/publisher/xmlrpc/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/publisher/xmlrpc/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/publisher/xmlrpc/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -21,8 +21,8 @@
 from zope.configuration.exceptions import ConfigurationError
 from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
 from zope.component.interface import provideInterface
+from zope.component.zcml import handler
 
-from zope.app.component.metaconfigure import handler
 from zope.app.publisher.xmlrpc import MethodPublisher
 
 def view(_context, for_=None, interface=None, methods=None,

Modified: Zope3/branches/jim-adapter/src/zope/app/renderer/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/renderer/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/renderer/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -18,8 +18,7 @@
 # BBB 2006/02/24, to be removed after 12 months
 
 import warnings
-from zope.app import zapi
-from zope.app.component.metaconfigure import handler
+from zope.component.zcml import handler
 from zope.configuration.fields import GlobalInterface, GlobalObject
 from zope.interface import Interface
 

Modified: Zope3/branches/jim-adapter/src/zope/app/schema/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/schema/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/schema/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -18,7 +18,7 @@
 import warnings
 from zope.interface import directlyProvides
 from zope.schema.interfaces import IVocabularyFactory
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 
 class FactoryKeywordPasser(object):
     """Helper that passes additional keywords to the actual factory."""

Modified: Zope3/branches/jim-adapter/src/zope/app/security/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/security/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/security/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -15,15 +15,13 @@
 
 $Id$
 """
-
 from zope import component
+from zope.component.zcml import utility
 from zope.security.checker import moduleChecker, Checker, defineChecker
 from zope.security.checker import CheckerPublic
 from zope.security.management import setSecurityPolicy
 from zope.security.interfaces import IPermission
 
-from zope.app.component.metaconfigure import utility
-
 from zope.app.security.permission import Permission
 from zope.app.security import principalregistry
 from zope.app.security import interfaces

Modified: Zope3/branches/jim-adapter/src/zope/app/securitypolicy/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/securitypolicy/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/securitypolicy/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -16,7 +16,7 @@
 $Id$
 """
 from zope.configuration.exceptions import ConfigurationError
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 
 from zope.app.securitypolicy.interfaces import IRole 
 from zope.app.securitypolicy.role import Role 

Modified: Zope3/branches/jim-adapter/src/zope/app/wfmc/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/app/wfmc/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/app/wfmc/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -20,10 +20,10 @@
 import zope.interface
 import zope.schema
 import zope.configuration.fields
+import zope.wfmc.interfaces
 from zope import wfmc
 from zope.wfmc import xpdl
-from zope.app.component.metaconfigure import utility
-import zope.wfmc.interfaces
+from zope.component.zcml import utility
 
 class IdefineXpdl(zope.interface.Interface):
 

Added: Zope3/branches/jim-adapter/src/zope/component/zcml.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/component/zcml.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/component/zcml.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -0,0 +1,456 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Component Architecture configuration handlers
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+import zope.interface
+import zope.configuration
+from zope.component.interface import provideInterface
+from zope.proxy import ProxyBase, getProxiedObject
+from zope.security.proxy import Proxy
+from zope.security.checker import InterfaceChecker, CheckerPublic
+from zope.security.adapter import LocatingTrustedAdapterFactory
+from zope.security.adapter import LocatingUntrustedAdapterFactory
+from zope.security.adapter import TrustedAdapterFactory
+from zope.i18nmessageid import MessageFactory
+_ = MessageFactory('zope')
+
+import zope.app.security.fields
+
+PublicPermission = 'zope.Public'
+
+def handler(methodName, *args, **kwargs):
+    method = getattr(zope.component.getGlobalSiteManager(), methodName)
+    method(*args, **kwargs)
+
+class IBasicComponentInformation(zope.interface.Interface):
+
+    component = zope.configuration.fields.GlobalObject(
+        title=_("Component to use"),
+        description=_("Python name of the implementation object.  This"
+                      " must identify an object in a module using the"
+                      " full dotted name.  If specified, the"
+                      " ``factory`` field must be left blank."),
+        required=False,
+        )
+
+    permission = zope.app.security.fields.Permission(
+        title=_("Permission"),
+        description=_("Permission required to use this component."),
+        required=False,
+        )
+
+    factory = zope.configuration.fields.GlobalObject(
+        title=_("Factory"),
+        description=_("Python name of a factory which can create the"
+                      " implementation object.  This must identify an"
+                      " object in a module using the full dotted name."
+                      " If specified, the ``component`` field must"
+                      " be left blank."),
+        required=False,
+        )
+
+class IAdapterDirective(zope.interface.Interface):
+    """
+    Register an adapter
+    """
+
+    factory = zope.configuration.fields.Tokens(
+        title=_("Adapter factory/factories"),
+        description=_("A list of factories (usually just one) that create"
+                      " the adapter instance."),
+        required=True,
+        value_type=zope.configuration.fields.GlobalObject()
+        )
+
+    provides = zope.configuration.fields.GlobalInterface(
+        title=_("Interface the component provides"),
+        description=_("This attribute specifies the interface the adapter"
+                      " instance must provide."),
+        required=False,
+        )
+
+    for_ = zope.configuration.fields.Tokens(
+        title=_("Specifications to be adapted"),
+        description=_("This should be a list of interfaces or classes"),
+        required=False,
+        value_type=zope.configuration.fields.GlobalObject(
+          missing_value=object(),
+          ),
+        )
+
+    permission = zope.app.security.fields.Permission(
+        title=_("Permission"),
+        description=_("This adapter is only available, if the principal"
+                      " has this permission."),
+        required=False,
+        )
+
+    name = zope.schema.TextLine(
+        title=_("Name"),
+        description=_("Adapters can have names.\n\n"
+                      "This attribute allows you to specify the name for"
+                      " this adapter."),
+        required=False,
+        )
+
+    trusted = zope.configuration.fields.Bool(
+        title=_("Trusted"),
+        description=_("""Make the adapter a trusted adapter
+
+        Trusted adapters have unfettered access to the objects they
+        adapt.  If asked to adapt security-proxied objects, then,
+        rather than getting an unproxied adapter of security-proxied
+        objects, you get a security-proxied adapter of unproxied
+        objects.
+        """),
+        required=False,
+        default=False,
+        )
+
+    locate = zope.configuration.fields.Bool(
+        title=_("Locate"),
+        description=_("""Make the adapter a locatable adapter
+
+        Located adapter should be used if a non-public permission
+        is used.
+        """),
+        required=False,
+        default=False,
+        )
+
+def _rolledUpFactory(factories):
+    # This has to be named 'factory', aparently, so as not to confuse
+    # apidoc :(
+    def factory(ob):
+        for f in factories:
+            ob = f(ob)
+        return ob
+    # Store the original factory for documentation
+    factory.factory = factories[0]
+    return factory
+
+def _protectedFactory(original_factory, checker):
+    # This has to be named 'factory', aparently, so as not to confuse
+    # apidoc :(
+    def factory(*args):
+        ob = original_factory(*args)
+        try:
+            ob.__Security_checker__ = checker
+        except AttributeError:
+            ob = Proxy(ob, checker)
+
+        return ob
+    factory.factory = original_factory
+    return factory
+
+def adapter(_context, factory, provides=None, for_=None, permission=None,
+            name='', trusted=False, locate=False):
+
+    if for_ is None:
+        if len(factory) == 1:
+            for_ = zope.component.adaptedBy(factory[0])
+
+        if for_ is None:
+            raise TypeError("No for attribute was provided and can't "
+                            "determine what the factory adapts.")
+
+    for_ = tuple(for_)
+
+    if provides is None:
+        if len(factory) == 1:
+            p = list(zope.interface.implementedBy(factory[0]))
+            if len(p) == 1:
+                provides = p[0]
+
+        if provides is None:
+            raise TypeError("Missing 'provides' attribute")
+
+    # Generate a single factory from multiple factories:
+    factories = factory
+    if len(factories) == 1:
+        factory = factories[0]
+    elif len(factories) < 1:
+        raise ValueError("No factory specified")
+    elif len(factories) > 1 and len(for_) != 1:
+        raise ValueError("Can't use multiple factories and multiple for")
+    else:
+        factory = _rolledUpFactory(factories)
+
+    if permission is not None:
+        if permission == PublicPermission:
+            permission = CheckerPublic
+        checker = InterfaceChecker(provides, permission)
+        factory = _protectedFactory(factory, checker)
+
+    # invoke custom adapter factories
+    if locate or (permission is not None and permission is not CheckerPublic):
+        if trusted:
+            factory = LocatingTrustedAdapterFactory(factory)
+        else:
+            factory = LocatingUntrustedAdapterFactory(factory)
+    else:
+        if trusted:
+            factory = TrustedAdapterFactory(factory)
+
+    _context.action(
+        discriminator = ('adapter', for_, provides, name),
+        callable = handler,
+        args = ('provideAdapter',
+                for_, provides, name, factory, _context.info),
+        )
+    _context.action(
+        discriminator = None,
+        callable = provideInterface,
+        args = ('', provides)
+               )
+    if for_:
+        for iface in for_:
+            if iface is not None:
+                _context.action(
+                    discriminator = None,
+                    callable = provideInterface,
+                    args = ('', iface)
+                    )
+
+class ISubscriberDirective(zope.interface.Interface):
+    """
+    Register a subscriber
+    """
+
+    factory = zope.configuration.fields.GlobalObject(
+        title=_("Subscriber factory"),
+        description=_("A factory used to create the subscriber instance."),
+        required=False,
+        )
+
+    handler = zope.configuration.fields.GlobalObject(
+        title=_("Handler"),
+        description=_("A callable object that handles events."),
+        required=False,
+        )
+
+    provides = zope.configuration.fields.GlobalInterface(
+        title=_("Interface the component provides"),
+        description=_("This attribute specifies the interface the adapter"
+                      " instance must provide."),
+        required=False,
+        )
+
+    for_ = zope.configuration.fields.Tokens(
+        title=_("Interfaces or classes that this subscriber depends on"),
+        description=_("This should be a list of interfaces or classes"),
+        required=False,
+        value_type=zope.configuration.fields.GlobalObject(
+          missing_value = object(),
+          ),
+        )
+
+    permission = zope.app.security.fields.Permission(
+        title=_("Permission"),
+        description=_("This subscriber is only available, if the"
+                      " principal has this permission."),
+        required=False,
+        )
+
+    trusted = zope.configuration.fields.Bool(
+        title=_("Trusted"),
+        description=_("""Make the subscriber a trusted subscriber
+
+        Trusted subscribers have unfettered access to the objects they
+        adapt.  If asked to adapt security-proxied objects, then,
+        rather than getting an unproxied subscriber of security-proxied
+        objects, you get a security-proxied subscriber of unproxied
+        objects.
+        """),
+        required=False,
+        default=False,
+        )
+
+    locate = zope.configuration.fields.Bool(
+        title=_("Locate"),
+        description=_("""Make the subscriber a locatable subscriber
+
+        Located subscribers should be used if a non-public permission
+        is used.
+        """),
+        required=False,
+        default=False,
+        )
+
+_handler = handler
+def subscriber(_context, for_=None, factory=None, handler=None, provides=None,
+               permission=None, trusted=False, locate=False):
+    if factory is None:
+        if handler is None:
+            raise TypeError("No factory or handler provided")
+        if provides is not None:
+            raise TypeError("Cannot use handler with provides")
+        factory = handler
+    else:
+        if handler is not None:
+            raise TypeError("Cannot use handler with factory")
+        if provides is None:
+            import warnings
+            warnings.warn(
+                "\n  %s\n"
+                "Use of factory without provides to indicate a handler "
+                "is deprecated and will change it's meaning in Zope 3.3. "
+                "Use the handler attribute instead."
+                % _context.info,
+                DeprecationWarning)
+
+    if for_ is None:
+        for_ = zope.component.adaptedBy(factory)
+        if for_ is None:
+            raise TypeError("No for attribute was provided and can't "
+                            "determine what the factory (or handler) adapts.")
+
+    if permission is not None:
+        if permission == PublicPermission:
+            permission = CheckerPublic
+        checker = InterfaceChecker(provides, permission)
+        factory = _protectedFactory(factory, checker)
+
+    for_ = tuple(for_)
+
+    # invoke custom adapter factories
+    if locate or (permission is not None and permission is not CheckerPublic):
+        if trusted:
+            factory = LocatingTrustedAdapterFactory(factory)
+        else:
+            factory = LocatingUntrustedAdapterFactory(factory)
+    else:
+        if trusted:
+            factory = TrustedAdapterFactory(factory)
+
+    _context.action(
+        discriminator = None,
+        callable = _handler,
+        args = ('subscribe',
+                for_, provides, factory, _context.info),
+        )
+
+    if provides is not None:
+        _context.action(
+            discriminator = None,
+            callable = provideInterface,
+            args = ('', provides)
+            )
+
+    # For each interface, state that the adapter provides that interface.
+    for iface in for_:
+        if iface is not None:
+            _context.action(
+                discriminator = None,
+                callable = provideInterface,
+                args = ('', iface)
+                )
+
+class IUtilityDirective(IBasicComponentInformation):
+    """Register a utility."""
+
+    provides = zope.configuration.fields.GlobalInterface(
+        title=_("Provided interface"),
+        description=_("Interface provided by the utility."),
+        required=False,
+        )
+
+    name = zope.schema.TextLine(
+        title=_("Name"),
+        description=_("Name of the registration.  This is used by"
+                      " application code when locating a utility."),
+        required=False,
+        )
+
+class PermissionProxy(ProxyBase):
+
+    __slots__ = ('__Security_checker__', )
+
+    def __providedBy__(self):
+        return zope.interface.providedBy(getProxiedObject(self))
+    __providedBy__ = property(__providedBy__)
+
+def proxify(ob, checker):
+    """Try to get the object proxied with the `checker`, but not too soon
+
+    We really don't want to proxy the object unless we need to.
+    """
+
+    ob = PermissionProxy(ob)
+    ob.__Security_checker__ = checker
+    return ob
+
+def utility(_context, provides=None, component=None, factory=None,
+            permission=None, name=''):
+    if factory:
+        if component:
+            raise TypeError("Can't specify factory and component.")
+        component = factory()
+
+    if provides is None:
+        provides = list(zope.interface.providedBy(component))
+        if len(provides) == 1:
+            provides = provides[0]
+        else:
+            raise TypeError("Missing 'provides' attribute")
+
+    if permission is not None:
+        if permission == PublicPermission:
+            permission = CheckerPublic
+        checker = InterfaceChecker(provides, permission)
+
+        component = proxify(component, checker)
+
+    _context.action(
+        discriminator = ('utility', provides, name),
+        callable = handler,
+        args = ('registerUtility', component, provides, name),
+        )
+    _context.action(
+        discriminator = None,
+        callable = provideInterface,
+        args = (provides.__module__ + '.' + provides.getName(), provides)
+        )
+
+class IInterfaceDirective(zope.interface.Interface):
+    """
+    Define an interface
+    """
+
+    interface = zope.configuration.fields.GlobalInterface(
+        title=_("Interface"),
+        required=True,
+        )
+
+    type = zope.configuration.fields.GlobalInterface(
+        title=_("Interface type"),
+        required=False,
+        )
+
+    name = zope.schema.TextLine(
+        title=_("Name"),
+        required=False,
+        )
+
+def interface(_context, interface, type=None, name=''):
+    _context.action(
+        discriminator = None,
+        callable = provideInterface,
+        args = (name, interface, type)
+        )


Property changes on: Zope3/branches/jim-adapter/src/zope/component/zcml.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: Zope3/branches/jim-adapter/src/zope/i18n/zcml.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/i18n/zcml.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/i18n/zcml.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -25,7 +25,7 @@
 from zope.i18n.testmessagecatalog import TestMessageCatalog
 from zope.i18n.translationdomain import TranslationDomain
 from zope.i18n.interfaces import ITranslationDomain
-from zope.app.component.metaconfigure import utility
+from zope.component.zcml import utility
 
 class IRegisterTranslationsDirective(Interface):
     """Register translations with the global site manager."""

Modified: Zope3/branches/jim-adapter/src/zope/viewlet/metaconfigure.py
===================================================================
--- Zope3/branches/jim-adapter/src/zope/viewlet/metaconfigure.py	2006-04-11 09:35:09 UTC (rev 66841)
+++ Zope3/branches/jim-adapter/src/zope/viewlet/metaconfigure.py	2006-04-11 10:03:07 UTC (rev 66842)
@@ -24,12 +24,11 @@
 from zope.interface import Interface, classImplements
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.publisher.interfaces.browser import IBrowserView
+from zope.component import zcml
+from zope.viewlet import viewlet, manager, interfaces
 
-from zope.app.component import metaconfigure
 from zope.app.publisher.browser import viewmeta
 
-from zope.viewlet import viewlet, manager, interfaces
-
 def viewletManagerDirective(
     _context, name, permission,
     for_=Interface, layer=IDefaultBrowserLayer, view=IBrowserView,
@@ -80,7 +79,7 @@
 
     # Register interfaces
     viewmeta._handle_for(_context, for_)
-    metaconfigure.interface(_context, view)
+    zcml.interface(_context, view)
 
     # Create a checker for the viewlet manager
     checker.defineChecker(new_class, checker.Checker(required))
@@ -88,7 +87,7 @@
     # register a viewlet manager
     _context.action(
         discriminator = ('viewletManager', for_, layer, view, name),
-        callable = metaconfigure.handler,
+        callable = zcml.handler,
         args = ('provideAdapter',
                 (for_, layer, view), provides, name,
                  new_class, _context.info),)
@@ -176,7 +175,7 @@
 
     # Register the interfaces.
     viewmeta._handle_for(_context, for_)
-    metaconfigure.interface(_context, view)
+    zcml.interface(_context, view)
 
     # Create the security checker for the new class
     checker.defineChecker(new_class, checker.Checker(required))
@@ -184,7 +183,7 @@
     # register viewlet
     _context.action(
         discriminator = ('viewlet', for_, layer, view, manager, name),
-        callable = metaconfigure.handler,
+        callable = zcml.handler,
         args = ('provideAdapter',
                 (for_, layer, view, manager), interfaces.IViewlet,
                  name, new_class, _context.info),)



More information about the Checkins mailing list