[Checkins]
SVN: Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.
Add utilityinfos,
that inform about utilities in context of an object.
Uli Fouquet
uli at gnufix.de
Wed Jun 18 05:31:14 EDT 2008
Log message for revision 87495:
Add utilityinfos, that inform about utilities in context of an object.
Changed:
A Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.py
A Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.txt
-=-
Added: Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.py
===================================================================
--- Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.py (rev 0)
+++ Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.py 2008-06-18 09:31:13 UTC (rev 87495)
@@ -0,0 +1,27 @@
+##############################################################################
+#
+# Copyright (c) 2008 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.
+#
+##############################################################################
+"""Infos about utilities.
+"""
+from zope.component import globalregistry
+
+class UtilityInfo(object):
+
+ def __init__(self, obj=None):
+ self.context = obj
+
+ def getAllUtilities(self):
+ return [
+ dict(name=x.name, provided=x.provided,
+ registry=x.registry, component=x.component)
+ for x in list(globalregistry.base.registeredUtilities())]
Added: Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.txt
===================================================================
--- Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.txt (rev 0)
+++ Sandbox/ulif/zope.introspector/src/zope/introspector/utilityinfo.txt 2008-06-18 09:31:13 UTC (rev 87495)
@@ -0,0 +1,60 @@
+Determining utilites for objects
+********************************
+
+Get informed about all local and global utilities for an object.
+
+:Test-Layer: functional
+
+zope.introspector provides the ``UtilityInfo`` for determining
+utilities, that are available for specific contexts. Contrary to
+adapters, utilities tend to be context-less. We must, however, take
+care, that local utilities are only registered for objects in the same
+site.
+
+Let's start with a simple object::
+
+ >>> class Mammoth(object):
+ ... pass
+
+We define an utility::
+
+ >>> from zope.interface import Interface, implements
+ >>> from zope.component import provideUtility
+
+ >>> class ITestUtility(Interface):
+ ... pass
+
+ >>> class TestUtility(object):
+ ... implements(ITestUtility)
+
+
+Now we register it globally and unnamed::
+
+ >>> provideUtility(TestUtility(), provides=ITestUtility, name='')
+
+Make sure, the utility was really registered::
+
+ >>> from zope.component import getUtility
+ >>> getUtility(ITestUtility, name='', context=None)
+ <TestUtility object at 0x...>
+
+We create an instance of the mammoth::
+
+ >>> manfred = Mammoth()
+
+Using ``UtilityInfo`` we can ask for all the utilities for our
+particular mammoth::
+
+ >>> from zope.introspector import UtilityInfo
+ >>> info = UtilityInfo(manfred)
+ >>> from pprint import pprint
+ >>> pprint(info.getAllUtilities())
+ [{'component': <ZODB.DB.DB object at 0x...>,
+ 'name': 'unnamed',
+ 'provided': <InterfaceClass ZODB.interfaces.IDatabase>,
+ 'registry': <BaseGlobalComponents base>},
+ {'component': <TestUtility object at 0x...>,
+ 'name': '',
+ 'provided': <InterfaceClass __builtin__.ITestUtility>,
+ 'registry': <BaseGlobalComponents base>}]
+
More information about the Checkins
mailing list