[Checkins] SVN: megrok.resourcelibrary/trunk/ Add a test for one library dependening on another.

Martijn Faassen faassen at infrae.com
Fri Aug 8 12:36:41 EDT 2008


Log message for revision 89550:
  Add a test for one library dependening on another.
  

Changed:
  U   megrok.resourcelibrary/trunk/CHANGES.txt
  U   megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/README.txt
  U   megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/__init__.py
  U   megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/directive.py
  U   megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/meta.py

-=-
Modified: megrok.resourcelibrary/trunk/CHANGES.txt
===================================================================
--- megrok.resourcelibrary/trunk/CHANGES.txt	2008-08-08 16:27:42 UTC (rev 89549)
+++ megrok.resourcelibrary/trunk/CHANGES.txt	2008-08-08 16:36:40 UTC (rev 89550)
@@ -7,6 +7,9 @@
 * Grokker mistakenly relied on (not imported) ``GrokImportError`` in failure
   case. Corrected this to ``GrokError`` and added a test for it.
 
+* Rename ``use`` directive to ``depend`` and make it take a class
+  argument instead of a library name.
+
 0.9.1 (2008-08-06)
 ------------------
 

Modified: megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/README.txt
===================================================================
--- megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/README.txt	2008-08-08 16:27:42 UTC (rev 89549)
+++ megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/README.txt	2008-08-08 16:36:40 UTC (rev 89550)
@@ -142,8 +142,8 @@
         border: 1px silid black;
     }
 
-Programmatically signally resource requirements
------------------------------------------------
+Programmatically signalling resource requirements
+-------------------------------------------------
 
 Above we've demonstrated the use of the ``resource_library`` namespace
 in ZPT. Library usage can also be signalled programmatically, for
@@ -199,6 +199,43 @@
   >>> '/@@/my-lib/included.js' in browser.contents
   True
 
+Making resource libraries depend on other ones
+----------------------------------------------
+
+We can make a resource library depend on another one::
+
+  >>> class Dependency(megrok.resourcelibrary.ResourceLibrary):
+  ...    megrok.resourcelibrary.directory('tests/example')
+  ...    megrok.resourcelibrary.include('1.js')
+  >>> grok_component('Dependency', Dependency)
+  True
+   
+  >>> class Dependent(megrok.resourcelibrary.ResourceLibrary):
+  ...    megrok.resourcelibrary.directory('tests/example')
+  ...    megrok.resourcelibrary.include('2.css')
+  ...    megrok.resourcelibrary.depend(Dependency)
+  >>> grok_component('Dependent', Dependent)
+  True
+
+Let's make a view that needs ``Dependent``::
+
+  >>> class DependentView(grok.View):
+  ...   grok.context(Interface)
+  ...   def render(self):
+  ...      Dependent.need()
+  ...      return '<html><head></head><body>Example</body></html>'
+  >>> grok_component('DependentView', DependentView)
+  True
+
+The included code of both the original and the dependency will now
+show up::
+
+  >>> browser.open('http://localhost/dependentview')
+  >>> '/@@/dependency/1.js' in browser.contents
+  True
+  >>> '/@@/dependent/2.css' in browser.contents
+  True
+
 Protecting resources
 --------------------
 

Modified: megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/__init__.py
===================================================================
--- megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/__init__.py	2008-08-08 16:27:42 UTC (rev 89549)
+++ megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/__init__.py	2008-08-08 16:36:40 UTC (rev 89550)
@@ -1,3 +1,3 @@
 from megrok.resourcelibrary.components import ResourceLibrary
-from megrok.resourcelibrary.directive import directory, use, include
+from megrok.resourcelibrary.directive import directory, depend, include
 from zc.resourcelibrary import need

Modified: megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/directive.py
===================================================================
--- megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/directive.py	2008-08-08 16:27:42 UTC (rev 89549)
+++ megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/directive.py	2008-08-08 16:36:40 UTC (rev 89550)
@@ -18,10 +18,10 @@
 
     validate = martian.validateText
     
-class use(martian.Directive):
+class depend(martian.Directive):
     scope = martian.CLASS
     store = martian.MULTIPLE
-    validate = martian.validateText
+    validate = martian.validateClass
     
 class include(martian.Directive):
     scope = martian.CLASS

Modified: megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/meta.py
===================================================================
--- megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/meta.py	2008-08-08 16:27:42 UTC (rev 89549)
+++ megrok.resourcelibrary/trunk/src/megrok/resourcelibrary/meta.py	2008-08-08 16:36:40 UTC (rev 89550)
@@ -20,8 +20,9 @@
     martian.component(resourcelibrary.ResourceLibrary)
     martian.directive(grok.name, get_default=default_library_name)
     martian.directive(resourcelibrary.directory)
-    martian.directive(resourcelibrary.use, get_default=default_list)
+    martian.directive(resourcelibrary.depend, get_default=default_list)
     martian.directive(resourcelibrary.include, get_default=default_list)
+    martian.directive(resourcelibrary.include_other, get_default=default_list)
     martian.directive(grok.layer, default=IDefaultBrowserLayer)
     martian.directive(grok.require, name='permission')
     
@@ -31,7 +32,8 @@
         return super(ResourceLibraryGrokker, self).grok(
             name, factory, module_info, **kw)
     
-    def execute(self, class_, config, name, directory, use, include, layer,
+    def execute(self, class_, config, name, directory, depend,
+                include, include_other, layer,
                 permission,
                 **kw):
         orig_directory = directory
@@ -42,7 +44,11 @@
                 (orig_directory, name), class_)
 
         library_info[name] = LibraryInfo()
-        library_info[name].required.extend(use)
+
+        get_name = grok.name.bind(get_default=default_library_name).get
+        
+        depend_names = [get_name(cls) for cls in depend]
+        library_info[name].required.extend(depend_names)
         library_info[name].included.extend(include)
 
         if permission == 'zope.Public' or permission is None:



More information about the Checkins mailing list