[Checkins] SVN: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/ Simplified the grokking. I'm not sure it's really needed anymore.

Souheil CHELFOUH souheil at chelfouh.com
Wed Oct 14 11:30:25 EDT 2009


Log message for revision 105067:
  Simplified the grokking. I'm not sure it's really needed anymore.
  Using a simple classmethod on the Library to fetch the inclusions.
  

Changed:
  U   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/components.py
  U   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/event.py
  U   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/meta.py

-=-
Modified: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/components.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/components.py	2009-10-14 14:25:25 UTC (rev 105066)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/components.py	2009-10-14 15:30:25 UTC (rev 105067)
@@ -9,19 +9,41 @@
 from zope.traversing.browser.interfaces import IAbsoluteURL
 from hurry.zoperesource.zopesupport import getRequest
 
+from megrok.resource.directive import inclusion
+from zope.traversing.browser.absoluteurl import AbsoluteURL
 
+
+
+def inclusions(cls):
+    keys = []
+    values = []
+    resources = inclusion.bind().get(cls)
+    for name, file, depends, bottom in resources:
+        keys.append(name)
+        values.append(
+            ResourceInclusion(cls, file, depends=depends, bottom=bottom)
+            )
+    return keys, values
+
+
 class Library(DirectoryResource):
-    libs = []    
+    grok.baseclass()
+    
+    _ri_keys = None
+    _resources = None
 
-    @property
-    def name(self):
-        return grok.name.bind().get(self) 
+    @classmethod
+    def get_resources(cls, name=None):
+        if cls._resources == None:
+            cls._ri_keys, values = inclusions(cls)
+            cls._resources = dict(zip(cls._ri_keys, values))
+        if name is not None:
+            return [cls._resources[name],]
+        return [cls._resources[name] for name in cls._ri_keys]
 
 
 @grok.adapter(Library)
 @grok.implementer(ILibraryUrl)
 def library_url(library):
     request = getRequest()
-    return str(component.getMultiAdapter((getSite(), request),
-                                         IAbsoluteURL)) + '/@@/' + library.name
-        
+    return "%s/@@/%s" % (AbsoluteURL(getSite(), request), library.name)

Modified: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/event.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/event.py	2009-10-14 14:25:25 UTC (rev 105066)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/event.py	2009-10-14 15:30:25 UTC (rev 105067)
@@ -13,12 +13,10 @@
     for lib, name, bottom in includes:
         if bottom:
             with_bottom=True
-        if not name:
-            for l in lib.libs:
-                inn = getattr(lib, l)
-                inn.need()
-        else:
-            inn = getattr(lib, name)
-            inn.need()
+
+        resources = lib.get_resources(name=name)
+        for resource in resources:
+            resource.need()
+
     if with_bottom:
         hurry.resource.bottom()

Modified: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/meta.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/meta.py	2009-10-14 14:25:25 UTC (rev 105066)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/meta.py	2009-10-14 15:30:25 UTC (rev 105067)
@@ -2,27 +2,15 @@
 import megrok.resource as mr
 import grokcore.component as grok
 import grokcore.view
-import grokcore.security
 
 from hurry.resource import ResourceInclusion
-
 from megrok.resource.directive import default_library_name, default_list
-from zope.publisher.interfaces.browser import (IDefaultBrowserLayer,
-                                               IBrowserRequest)
 
+
 class LibraryGrokker(martian.ClassGrokker):
     martian.component(mr.Library)
     martian.directive(grok.name, get_default=default_library_name)
-    martian.directive(mr.inclusion, get_default=default_list)
-    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
-    martian.directive(grokcore.security.require, name='permission')
 
-
-    def execute(self, class_, config, name, inclusion, layer, permission, **kw):
-        #setattr(class_, 'name', name)
-        class_.name = name
-        for name, file, depends, bottom in inclusion:
-            RI = ResourceInclusion(class_, file, depends=depends, bottom=bottom)
-            setattr(class_, name, RI)
-            class_.libs.append(name)
+    def execute(self, klass, config, name, **kw):
+        klass.name = name
         return True    



More information about the checkins mailing list