[Checkins] SVN: lovely.tag/trunk/src/lovely/tag/tagging.py Defer the lookup for the docId and the engine.

Jürgen Kartnaller juergen at kartnaller.at
Wed Oct 4 06:08:01 EDT 2006


Log message for revision 70518:
  Defer the lookup for the docId and the engine.
  
    This also gives better error messages if the engine or intId utility can not
    be found.
  

Changed:
  U   lovely.tag/trunk/src/lovely/tag/tagging.py

-=-
Modified: lovely.tag/trunk/src/lovely/tag/tagging.py
===================================================================
--- lovely.tag/trunk/src/lovely/tag/tagging.py	2006-10-04 08:24:40 UTC (rev 70517)
+++ lovely.tag/trunk/src/lovely/tag/tagging.py	2006-10-04 10:07:59 UTC (rev 70518)
@@ -19,6 +19,7 @@
 import zope.component
 import zope.interface
 from zope.app import intid
+from zope.cachedescriptors.property import Lazy
 from zope.security.management import getInteraction
 from lovely.tag import interfaces
 
@@ -32,26 +33,31 @@
     def __init__(self, context):
         self.context = context
 
+    @Lazy
+    def docId(self):
         ids = zope.component.getUtility(intid.interfaces.IIntIds)
-        self._id = ids.queryId(self.context)
-        if self._id is None:
+        id = ids.queryId(self.context)
+        if id is None:
             ids.register(self.context)
-            self._id = ids.getId(self.context)
+            id = ids.getId(self.context)
+        return id
 
-        self._engine = zope.component.getUtility(interfaces.ITaggingEngine,
-                                                 name=self.engineName)
+    @Lazy
+    def engine(self):
+        return zope.component.getUtility(interfaces.ITaggingEngine,
+                                         name=self.engineName)
 
     def update(self, user, tags):
         """See interfaces.ITagging"""
-        return self._engine.update(self._id, user, tags)
+        return self.engine.update(self.docId, user, tags)
 
     def getTags(self, users=None):
         """See interfaces.ITagging"""
-        return self._engine.getTags(items=(self._id,), users=users)
+        return self.engine.getTags(items=(self.docId,), users=users)
 
     def getUsers(self, tags=None):
         """See interfaces.ITagging"""
-        return self._engine.getUsers(items=(self._id,), tags=tags)
+        return self.engine.getUsers(items=(self.docId,), tags=tags)
 
 
 class UserTagging(object):
@@ -62,14 +68,21 @@
 
     def __init__(self, context):
         self.context = context
+
+    @Lazy
+    def docId(self):
         ids = zope.component.getUtility(intid.interfaces.IIntIds)
-        self._id = ids.queryId(self.context)
-        if self._id is None:
+        id = ids.queryId(self.context)
+        if id is None:
             ids.register(self.context)
-            self._id = ids.getId(self.context)
-        self._engine = zope.component.getUtility(interfaces.ITaggingEngine,
-                                                 name=self.engineName)
+            id = ids.getId(self.context)
+        return id
 
+    @Lazy
+    def engine(self):
+        return zope.component.getUtility(interfaces.ITaggingEngine,
+                                         name=self.engineName)
+
     @property
     def _pid(self):
         participations = getInteraction().participations
@@ -81,11 +94,11 @@
     @apply
     def tags():
         def fget(self):
-            return self._engine.getTags(items=(self._id,),
+            return self.engine.getTags(items=(self.docId,),
                                         users=(self._pid,))
         def fset(self, value):
             if value is None:
                 return
-            return self._engine.update(self._id, self._pid, value)
+            return self.engine.update(self.docId, self._pid, value)
         return property(**locals())
 



More information about the Checkins mailing list