[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