[Checkins] SVN: grok/trunk/src/grok/ implemented global utilities
Wolfgang Schnerring
wosc at wosc.de
Wed Oct 18 08:47:28 EDT 2006
Log message for revision 70779:
implemented global utilities
Changed:
U grok/trunk/src/grok/__init__.py
U grok/trunk/src/grok/_grok.py
U grok/trunk/src/grok/interfaces.py
U grok/trunk/src/grok/tests/test_grok.py
A grok/trunk/src/grok/tests/utility/
A grok/trunk/src/grok/tests/utility/__init__.py
A grok/trunk/src/grok/tests/utility/utility.py
-=-
Modified: grok/trunk/src/grok/__init__.py
===================================================================
--- grok/trunk/src/grok/__init__.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/__init__.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -27,7 +27,7 @@
IObjectRemovedEvent, ObjectRemovedEvent,
IContainerModifiedEvent, ContainerModifiedEvent)
-from grok._grok import (Model, Adapter, MultiAdapter, View, PageTemplate,
+from grok._grok import (Model, Adapter, MultiAdapter, View, PageTemplate, Utility,
grok, context, name, template, templatedir, )
from grok._grok import SubscribeDecorator as subscribe
from grok.error import GrokError, GrokImportError
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/_grok.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -51,6 +51,9 @@
def __init__(self, context):
self.context = context
+class Utility(object):
+ pass
+
class MultiAdapter(object):
pass
@@ -145,7 +148,7 @@
def grok_module(module_info):
- (models, adapters, multiadapters,
+ (models, adapters, multiadapters, utilities,
views, templates, subscribers) = scan_module(module_info)
find_filesystem_templates(module_info, templates)
@@ -155,6 +158,7 @@
register_models(models)
register_adapters(context, adapters)
register_multiadapters(multiadapters)
+ register_utilities(utilities)
register_views(context, views, templates)
register_unassociated_templates(context, templates)
register_subscribers(subscribers)
@@ -163,6 +167,7 @@
models = []
adapters = []
multiadapters = []
+ utilities = []
views = []
templates = TemplateRegistry()
subscribers = module_info.getAnnotation('grok.subscribers', [])
@@ -182,11 +187,14 @@
multiadapters.append(obj)
elif util.check_subclass(obj, View):
views.append(obj)
+ elif util.check_subclass(obj, Utility):
+ utilities.append(obj)
elif isinstance(obj, PageTemplate):
templates.register(name, obj)
obj._annotateGrokInfo(module_info, name, module_info.dotted_name)
- return models, adapters, multiadapters, views, templates, subscribers
+ return (models, adapters, multiadapters, utilities,
+ views, templates, subscribers)
def find_filesystem_templates(module_info, templates):
template_dir_name = module_info.getAnnotation('grok.templatedir', module_info.name)
@@ -304,6 +312,11 @@
name = class_annotation(factory, 'grok.name', '')
component.provideAdapter(factory, name=name)
+def register_utilities(utilities):
+ for factory in utilities:
+ name = class_annotation(factory, 'grok.name', '')
+ component.provideUtility(factory(), name=name)
+
def register_views(context, views, templates):
for factory in views:
view_context = determine_class_context(factory, context)
Modified: grok/trunk/src/grok/interfaces.py
===================================================================
--- grok/trunk/src/grok/interfaces.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/interfaces.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -21,6 +21,7 @@
"(models).")
Adapter = interface.Attribute("Base class for adapters.")
MultiAdapter = interface.Attribute("Base class for multi-adapters.")
+ Utility = interface.Attribute("Base class for utilities.")
View = interface.Attribute("Base class for browser views.")
class IGrokErrors(interface.Interface):
Modified: grok/trunk/src/grok/tests/test_grok.py
===================================================================
--- grok/trunk/src/grok/tests/test_grok.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/tests/test_grok.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -33,7 +33,7 @@
def test_suite():
suite = unittest.TestSuite()
for name in ['adapter', 'error', 'view', 'security', 'scan',
- 'event', 'zcml', 'static']:
+ 'event', 'zcml', 'static', 'utility']:
suite.addTest(suiteFromPackage(name))
return suite
Added: grok/trunk/src/grok/tests/utility/__init__.py
===================================================================
--- grok/trunk/src/grok/tests/utility/__init__.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/tests/utility/__init__.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -0,0 +1 @@
+# this is a package
Added: grok/trunk/src/grok/tests/utility/utility.py
===================================================================
--- grok/trunk/src/grok/tests/utility/utility.py 2006-10-18 11:33:41 UTC (rev 70778)
+++ grok/trunk/src/grok/tests/utility/utility.py 2006-10-18 12:47:28 UTC (rev 70779)
@@ -0,0 +1,33 @@
+"""
+Global utilities can be created by subclassing grok.Utility:
+
+ >>> grok.grok(__name__)
+ >>> from zope import component
+
+ >>> normal_club = component.getUtility(IClub)
+ >>> IClub.providedBy(normal_club)
+ True
+ >>> isinstance(normal_club, NormalClub)
+ True
+
+Named utilities are registered using grok.name:
+
+ >>> huge_club = component.getUtility(IClub, name='huge')
+ >>> IClub.providedBy(huge_club)
+ True
+ >>> isinstance(huge_club, HugeClub)
+ True
+"""
+import grok
+
+from zope import interface
+
+class IClub(interface.Interface):
+ pass
+
+class NormalClub(grok.Utility):
+ grok.implements(IClub)
+
+class HugeClub(grok.Utility):
+ grok.implements(IClub)
+ grok.name('huge')
More information about the Checkins
mailing list