[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture - ViewService.py:1.1.2.1 __init__.py:1.1.6.9 hooks.py:1.1.2.12 metaConfigure.py:1.1.2.9

Jim Fulton jim@zope.com
Sun, 6 Jan 2002 18:43:42 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/ComponentArchitecture
In directory cvs.zope.org:/tmp/cvs-serv9153

Modified Files:
      Tag: Zope-3x-branch
	__init__.py hooks.py metaConfigure.py 
Added Files:
      Tag: Zope-3x-branch
	ViewService.py 
Log Message:
Separated ViewService implementation into separate module and added
skin support.


=== Added File Zope3/lib/python/Zope/ComponentArchitecture/ViewService.py ===
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
# 
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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
# 
##############################################################################
"""

Revision information: $Id: ViewService.py,v 1.1.2.1 2002/01/06 23:43:42 jim Exp $
"""

from IToIRegistry import IToIRegistry
from Exceptions import ComponentLookupError

class ViewService:

    def __init__(self):
        self.__skins = {'': ('',)}
        self.__layers = {}
        
    # Implementation methods for interface
    # Zope.ComponentArchitecture.IViewService.

    def getView(self, object, name, type, default=None, skin=''):
        '''See interface IViewService'''
        for layername in self.__skins.get(skin, ()):
            layer = self.__layers.get(layername)
            if not layer: continue
            reg = layer.get(name, None)
            if reg is None: continue
            c = reg.getForObject(object, type)
            if c is None: continue
            return c(object)

        if default is None:
            raise ComponentLookupError(object, name, type)

        return default
        
    def provideView(self, forInterface, name, type, maker, layer=''):
        '''See interface IViewService'''

        views = self.__layers.get(layer)
        if views is None:
            views = self.__layers[layer] = {}

        reg = views.get(name, None)
        if reg is None:
            reg = views[name] = IToIRegistry()

        reg.register(forInterface, type, maker)


    def defineSkin(self, skin, layers):
        '''See interface IViewService'''
        self.__skins[skin] = layers

    def _clear(self):
        self.__init__()
    
viewService = ViewService()
getView     = viewService.getView
provideView = viewService.provideView
defineSkin  = viewService.defineSkin
_clear      = viewService._clear


=== Zope3/lib/python/Zope/ComponentArchitecture/__init__.py 1.1.6.8 => 1.1.6.9 ===
 # FOR A PARTICULAR PURPOSE.
 
+from IComponentArchitecture import IComponentArchitecture
+
+
 from hooks import provideAdapter, getAdapter
 from hooks import provideUtility, getUtility
-from hooks import provideView, getView
 from hooks import provideFactory, createObject
 from Service import defineService, provideService, getService
+from ViewService import getView, provideView, defineSkin
 
 def _clear():
-    from hooks import _clear
-    _clear()
-    from Service import _clear
-    _clear()
+    from hooks import _clear;       _clear()
+    from Service import _clear;     _clear()
+    from ViewService import _clear; _clear()
+
+__implements__ = IComponentArchitecture


=== Zope3/lib/python/Zope/ComponentArchitecture/hooks.py 1.1.2.11 => 1.1.2.12 ===
     return r
         
-
 def provideUtility(providedInterface, component):
     return provideUtility_hook(providedInterface, component)
 
@@ -28,14 +27,6 @@
     if r is _marker: raise ComponentLookupError(object, interface)
     return r
 
-def provideView(forInterface, name, type, maker):
-    return provideView_hook(forInterface, name, type, maker)
-
-def getView(object, name, type, default=_marker):
-    r = getView_hook(object, name, type, default)
-    if r is _marker: raise ComponentLookupError(object, name, type)
-    return r
-
 def provideFactory(qname, factory):
     return provideFactory_hook(qname, factory)
 
@@ -63,20 +54,6 @@
     if c is None: return default
     return c
 
-def provideView_hook(forInterface, name, type, maker):
-    reg = _views.get(name, None)
-    if reg is None:
-        reg=IToIRegistry()
-        _views[name]=reg
-    reg.register(forInterface, type, maker)
-
-def getView_hook(object, name, type, default=None):
-    reg = _views.get(name, None)
-    if reg is None: return default
-    c = reg.getForObject(object, type)
-    if c is None: return default
-    return c(object)
-
 from Interface.verify import verify as _verify
 from Zope.ComponentArchitecture.IFactory import IFactory as _IFactory
 
@@ -92,10 +69,9 @@
     return factory()
 
 def _clear():
-    global _adapters, _utilities, _views, _factories
+    global _adapters, _utilities, _factories
     _adapters = IToIRegistry()
     _utilities = IRegistry()
-    _views = {}
     _factories = {}
 
 _clear()


=== Zope3/lib/python/Zope/ComponentArchitecture/metaConfigure.py 1.1.2.8 => 1.1.2.9 ===
 # FOR A PARTICULAR PURPOSE.
 
-from hooks import provideAdapter, provideUtility, provideView
+from hooks import provideAdapter, provideUtility
+from ViewService import provideView
 from Zope.Configuration.name import resolve
 from Zope.Configuration import namespace
 from Service import defineService, provideService