[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