[Checkins] SVN: Sandbox/cklinger/megrok.resource/trunk/ Added tests and some re-arrangement

Souheil CHELFOUH souheil at chelfouh.com
Sun Dec 20 14:14:17 EST 2009


Log message for revision 106813:
  Added tests and some re-arrangement
  

Changed:
  D   Sandbox/cklinger/megrok.resource/trunk/HISTORY.txt
  D   Sandbox/cklinger/megrok.resource/trunk/README.txt
  A   Sandbox/cklinger/megrok.resource/trunk/docs/HISTORY.txt
  U   Sandbox/cklinger/megrok.resource/trunk/setup.py
  U   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/README.txt
  U   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/directive.py
  A   Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/utils.py

-=-
Deleted: Sandbox/cklinger/megrok.resource/trunk/HISTORY.txt
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/HISTORY.txt	2009-12-20 18:17:52 UTC (rev 106812)
+++ Sandbox/cklinger/megrok.resource/trunk/HISTORY.txt	2009-12-20 19:14:16 UTC (rev 106813)
@@ -1,8 +0,0 @@
-Changelog
-=========
-
-0.1 - Unreleased
-----------------
-
-* Initial release
-

Deleted: Sandbox/cklinger/megrok.resource/trunk/README.txt
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/README.txt	2009-12-20 18:17:52 UTC (rev 106812)
+++ Sandbox/cklinger/megrok.resource/trunk/README.txt	2009-12-20 19:14:16 UTC (rev 106813)
@@ -1,4 +0,0 @@
-Introduction
-============
-
-

Copied: Sandbox/cklinger/megrok.resource/trunk/docs/HISTORY.txt (from rev 106777, Sandbox/cklinger/megrok.resource/trunk/HISTORY.txt)
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/docs/HISTORY.txt	                        (rev 0)
+++ Sandbox/cklinger/megrok.resource/trunk/docs/HISTORY.txt	2009-12-20 19:14:16 UTC (rev 106813)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+0.1 - Unreleased
+----------------
+
+* Initial release
+

Modified: Sandbox/cklinger/megrok.resource/trunk/setup.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/setup.py	2009-12-20 18:17:52 UTC (rev 106812)
+++ Sandbox/cklinger/megrok.resource/trunk/setup.py	2009-12-20 19:14:16 UTC (rev 106813)
@@ -1,20 +1,26 @@
+# -*- coding: utf-8 -*-
+
 from setuptools import setup, find_packages
-import os
+from os.path import join
 
 version = '0.1'
+HISTORY = open(join("docs", "HISTORY.txt")).read()
+README = open(join("src", "megrok", "resource", "README.txt")).read()
 
+test_requires = [
+    'zope.app.testing',
+    'zope.app.zcmlfiles',
+    'zope.publisher',
+    'zope.site',
+    ]
+
 setup(name='megrok.resource',
       version=version,
       description="Grok Resources based on hurry.resource",
-      long_description=open("README.txt").read() + "\n" +
-                       open("HISTORY.txt").read(),
-      classifiers=[
-        "Programming Language :: Python",
-        "Topic :: Software Development :: Libraries :: Python Modules",
-        ],
-      keywords='',
-      author='Christian Klinger',
-      author_email='cklinger at novareto.de',
+      long_description="%s\n%s" % (README, HISTORY),
+      keywords='Grok Resources',
+      author='Souheil Chelfouh',
+      author_email='trollfot at gmail.com',
       url='',
       license='GPL',
       packages=find_packages('src'),
@@ -23,16 +29,22 @@
       include_package_data=True,
       zip_safe=False,
       install_requires=[
+          'martian',
           'setuptools',
           'grokcore.component',
           'grokcore.view',
           'hurry.resource >= 0.4.1',
 	  'hurry.zoperesource',
-          'zope.app.zcmlfiles',
           'z3c.hashedresource',
+          'zope.app.publication',
+          'zope.component',
+          'zope.interface',
+          'zope.security',
+          'zope.traversing'
       ],
-      extras_require={'test': ['hurry.jquery',],},
-      entry_points="""
-      # -*- Entry points: -*-
-      """,
+      extras_require={'test': test_requires},
+      classifiers=[
+          "Programming Language :: Python",
+          "Topic :: Software Development :: Libraries :: Python Modules",
+          ],
       )

Modified: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/README.txt
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/README.txt	2009-12-20 18:17:52 UTC (rev 106812)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/README.txt	2009-12-20 19:14:16 UTC (rev 106813)
@@ -2,51 +2,26 @@
 megrok.resource
 ===============
 
-After many discussions on the mailinglist, on irc and the sprint in cologne
-i started to work on a first prototype of megrok.resource.
+`megrok.resource` is a package destined to integrate `hurry.resource`
+and `z3c.hashedresource` into Grok applications.
 
-megrok.resource is a combination of these packages:
+  >>> import grokcore.component as grok
+  >>> from zope.testbrowser.testing import Browser
 
- - hurry.resource
- - hurry.zoperesource
- - grokcore.view.ResourceDirectory
- - z3c.hashedresource
+  >>> browser = Browser()
+  >>> browser.handleErrors = False 
 
 
-How does it work:
-=================
+Library
+=======
 
-Setup
------
+Resources are generally files you 
 
-  >>> from zope.app.testing.functional import getRootFolder
-  >>> from zope.site import SiteManagerContainer 
-  >>> from zope.site import LocalSiteManager
-  >>> from zope.site.hooks import setSite
+  >>> from megrok import resource
 
-  >>> root = getRootFolder()
-  >>> root['myapp'] = myapp = SiteManagerContainer()
+  >>> class SomeCSS(resource.Library):
+  ...    resource.path('ftests/css')
 
-Our application has to be a Site to access the right url for the inclusions
-
-  >>> root['myapp'].setSiteManager(LocalSiteManager(root['myapp']))
-  >>> setSite(root['myapp'])
-
-
-Inclusions & Library
---------------------
-
-Let's start with a Library. A Library is in the context of megrok.resource
-a ResourceDirectory which holds a kind of different ResourceInclusions
-
-  >>> from megrok.resource import Library, ResourceInclusion, include
-  >>> import grokcore.view as view 
-  >>> import grokcore.component as grok 
-
-  >>> class SomeCSS(Library):
-  ...    view.path('ftests/css')
-  ...    view.name('somecss')
-
   >>> grok.testing.grok_component('somecss', SomeCSS)
   True
 
@@ -54,6 +29,9 @@
   >>> ILibrary.providedBy(SomeCSS)
   True
 
+  >>> SomeCSS.name
+  'somecss'
+
   >>> from zope.component import getAdapter
   >>> from zope.publisher.browser import TestRequest
   >>> library = getAdapter(TestRequest(), name='somecss')
@@ -61,23 +39,47 @@
   <grokcore.view.components.DirectoryResource object at ...>
 
 
+Resources
+=========
+
+Simple resources
+----------------
+
+  >>> css_a = resource.ResourceInclusion(SomeCSS, 'a.css')
+  >>> css_b = resource.ResourceInclusion(SomeCSS, 'b.css')
+
+Grouping resources
+------------------
+
+  >>> css_group = resource.GroupInclusion([css_a, css_b])
+  >>> css_group.inclusions()
+  [<ResourceInclusion 'a.css' in library 'somecss'>,
+   <ResourceInclusion 'b.css' in library 'somecss'>]
+
+
+Including resources in components
+=================================
+
+Setup
+-----
+
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> from zope.site import SiteManagerContainer, LocalSiteManager
+  >>> from zope.site.hooks import setSite
+
+  >>> root = getRootFolder()
+ 
+
 View & Include
 --------------
 
-  >>> from zope.testbrowser.testing import Browser
-  >>> from zope.component import getMultiAdapter
+To include a resource 
 
-  >>> browser = Browser()
-  >>> browser.handleErrors = False 
+  >>> from grokcore import view
 
-  >>> css_a = ResourceInclusion(SomeCSS, 'a.css')
-  >>> css_b = ResourceInclusion(SomeCSS, 'b.css')
-
-To include a resource we need in the most cases a view.
-
   >>> class MyView(view.View):
   ...   grok.context(SiteManagerContainer)
-  ...   include(css_a)
+  ...   resource.include(css_a)
   ...
   ...   def render(self):
   ...	  return u"<html><head></head></html>"
@@ -88,13 +90,13 @@
   >>> browser.open('http://localhost/@@myview')
   >>> print browser.contents
   <html><head>
-      <link rel="stylesheet" type="text/css" href="http://localhost/@@/++noop++.../somecss/a.css" />
+      <link... href="http://localhost/@@/++noop++.../somecss/a.css" />
   </head></html>
 
   >>> class AnotherView(view.View):
   ...   grok.context(SiteManagerContainer)
-  ...   include(css_a)
-  ...   include(css_b)
+  ...   resource.include(css_a)
+  ...   resource.include(css_b)
   ...
   ...   def render(self):
   ...	  return u"<html><head></head></html>"
@@ -105,34 +107,64 @@
   >>> browser.open('http://localhost/@@anotherview')
   >>> print browser.contents
   <html><head>
-    <link rel="stylesheet" type="text/css" href="http://localhost/@@/++noop++.../somecss/a.css" />
-    <link rel="stylesheet" type="text/css" href="http://localhost/@@/++noop++.../somecss/b.css" />
+    <link... href="http://localhost/@@/++noop++.../somecss/a.css" />
+    <link... href="http://localhost/@@/++noop++.../somecss/b.css" />
   </head></html>
 
 
-No hash:
 
-  >>> from megrok.resource import use_hash
-  >>> use_hash.set(SomeCSS, False)
-  
-  >>> browser.open('http://localhost/@@anotherview')
+Resources inclusion
+-------------------
+
+  >>> class ForeignView(view.View):
+  ...   grok.context(SiteManagerContainer)
+  ...
+  ...   def render(self):
+  ...	  return u"<html><head></head></html>"
+
+  >>> grok.testing.grok_component('foreign', ForeignView)
+  True
+
+  >>> resource.component_includes(ForeignView, css_group)
+
+  >>> browser.open('http://localhost/@@foreignview')
   >>> print browser.contents
   <html><head>
-    <link rel="stylesheet" type="text/css" href="http://localhost/@@/somecss/a.css" />
-    <link rel="stylesheet" type="text/css" href="http://localhost/@@/somecss/b.css" />
+    <link... href="http://localhost/@@/++noop++.../somecss/a.css" />
+    <link... href="http://localhost/@@/++noop++.../somecss/b.css" />
   </head></html>
 
+  >>> resource.component_includes(ForeignView)
+  >>> browser.open('http://localhost/@@foreignview')
+  >>> print browser.contents
+  <html><head></head></html>
 
-Failing validation:
 
+Include validation
+------------------
+
   >>> toto = object()
 
   >>> class FailingView(view.View):
   ...   grok.context(SiteManagerContainer)
-  ...   include(toto)
+  ...   resource.include(toto)
   ...
   ...   def render(self):
   ...	  return u""
   Traceback (most recent call last):
   ...
   GrokImportError: You can only include IInclusions components.
+
+
+Cache & hash
+============
+
+  >>> from megrok.resource import use_hash
+  >>> use_hash.set(SomeCSS, False)
+  
+  >>> browser.open('http://localhost/@@anotherview')
+  >>> print browser.contents
+  <html><head>
+    <link... href="http://localhost/@@/somecss/a.css" />
+    <link... href="http://localhost/@@/somecss/b.css" />
+  </head></html>

Modified: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/directive.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/directive.py	2009-12-20 18:17:52 UTC (rev 106812)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/directive.py	2009-12-20 19:14:16 UTC (rev 106813)
@@ -1,13 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import martian
-from martian.error import GrokImportError
 from hurry.resource.interfaces import IInclusion
 
 
 def validateInclusion(directive, value):
     if not IInclusion.providedBy(value):
-        raise GrokImportError(
+        raise martian.error.GrokImportError(
             "You can only include IInclusions components.")
 
 

Added: Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/utils.py
===================================================================
--- Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/utils.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.resource/trunk/src/megrok/resource/utils.py	2009-12-20 19:14:16 UTC (rev 106813)
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from megrok.resource import include
+
+def component_includes(component, *resources):
+    include.set(component, resources)



More information about the checkins mailing list