[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture - IToIRegistry.py:1.1.4.15 IViewService.py:1.1.2.7 ViewService.py:1.1.2.14
Jim Fulton
jim@zope.com
Sun, 24 Mar 2002 16:09:37 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/ComponentArchitecture
In directory cvs.zope.org:/tmp/cvs-serv21372
Modified Files:
Tag: Zope-3x-branch
IToIRegistry.py IViewService.py ViewService.py
Log Message:
Added an API to viewService to query view definitions. This is useful
for browsing tools.
=== Zope3/lib/python/Zope/ComponentArchitecture/IToIRegistry.py 1.1.4.14 => 1.1.4.15 ===
return None
+
+ def getDefinitions(self, used_for=None, provide=None):
+ if used_for is not None:
+ if provide is not None:
+ c = self._find(used_for, provide)
+ if c is None:
+ return []
+ else:
+ return [{ 'used_for': used_for,
+ 'provides': provide,
+ 'factory': c
+ }]
+ else:
+ return self.getDefinitionsFor(used_for)
+
+ # get everything
+ reg = self._reg
+ return [{ 'used_for': key[0],
+ 'provides': key[1],
+ 'factory': reg[key][1],
+ } for key in reg]
+
+ def getDefinitionsFor(self, used_for):
+ """Return the components registered to provide some interfaces
+ """
+ # This is tricky, because we want the most specific provider
+ seen = {}
+ reg = self._reg
+ for for_, provides in reg:
+ if not used_for.extends(for_, 0):
+ continue
+ if provides not in seen or for_.extends(seen[provides]):
+ seen[provides] = for_
+
+ return [{ 'used_for': seen[provides],
+ 'provides': provides,
+ 'factory': reg[seen[provides], provides][1],
+ } for provides in seen]
+
def getAll(self, ob_interface, provide, result=None, seen=None):
"""Get all components that match an interface
=== Zope3/lib/python/Zope/ComponentArchitecture/IViewService.py 1.1.2.6 => 1.1.2.7 ===
class IViewService(Interface):
- def provideView(forInterface, name, type, maker, layer=''):
- """Provide a view
-
- A view provides some type of presentation (e.g. browser, ftp)
- for components of a given interface.
-
- Arguments:
-
- forInterface -- The interface the view is for
-
- name -- The view name
-
- type -- The view type, expressed as an interface
-
- maker -- a callable object that gets a view component for
- a context component.
-
- layer -- Optional view layer. Layers are used to define skins.
- """
-
def getView(object, name, type, default=None, skin=''):
"""Look up a named view of a given type for an object
@@ -79,7 +59,25 @@
A Zope.NotFoundError will be raised if the suitable
default view name for the object cannot be found.
"""
-
+
+ def getViewDefinitions(name=None, use_for=None, type=None, layer=None):
+ """Get matching view definitions
+
+ Get view definitions as a sequence of mapping objects with keys:
+
+ - name
+
+ - used_for
+
+ - type
+
+ - layer
+
+ - factory
+
+ The arguments may be given as keyword arguments and define a
+ query for the retrieval.
+ """
class IViewRequest(Interface):
"""An IViewRequest provides methods for getting view meta data.
=== Zope3/lib/python/Zope/ComponentArchitecture/ViewService.py 1.1.2.13 => 1.1.2.14 ===
self.__default_view_names = IToIDataRegistry()
- __implements__ = IViewService
+ __implements__ = IViewService
def setDefaultViewName(self, i_required, i_provided, name):
'''Add name to our registry of default view names for
@@ -41,6 +41,39 @@
# Implementation methods for interface
# Zope.ComponentArchitecture.IViewService.
+
+ def getViewDefinitions(self, name=None, used_for=None, type=None,
+ layer=None):
+ '''See interface IViewService'''
+
+ result = []
+
+ if layer is None:
+ layers = self.__layers.keys()
+ else:
+ layers = [layer]
+
+ for layername in layers:
+ layer = self.__layers[layername]
+ if name is None:
+ names = layer.keys()
+ else:
+ names = [name]
+
+ for n in names:
+ result.extend(
+ [{ 'name': n,
+ 'used_for': definition['used_for'],
+ 'type': definition['provides'],
+ 'layer': layername,
+ 'factory': definition['factory'],
+ }
+ for definition
+ in layer[n].getDefinitions(used_for, type)
+ ]
+ )
+
+ return result
def getView(self, object, name, type, default=_marker, skin=''):
'''See interface IViewService'''