[Checkins] SVN: grokapps/Webpage/ Adding my example application that demonstrates the use of layers in Grok

Peter Bengtsson zope at peterbe.com
Sun May 4 13:02:33 EDT 2008


Log message for revision 86409:
  Adding my example application that demonstrates the use of layers in Grok

Changed:
  A   grokapps/Webpage/
  A   grokapps/Webpage/buildout.cfg
  A   grokapps/Webpage/setup.py
  A   grokapps/Webpage/src/
  A   grokapps/Webpage/src/webpage/
  A   grokapps/Webpage/src/webpage/__init__.py
  A   grokapps/Webpage/src/webpage/app.py
  A   grokapps/Webpage/src/webpage/app.py.0
  A   grokapps/Webpage/src/webpage/app_templates/
  A   grokapps/Webpage/src/webpage/app_templates/about.pt
  A   grokapps/Webpage/src/webpage/app_templates/headerfooter.pt
  A   grokapps/Webpage/src/webpage/app_templates/index.pt
  A   grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt
  A   grokapps/Webpage/src/webpage/app_templates/mobileindex.pt
  A   grokapps/Webpage/src/webpage/configure.zcml
  A   grokapps/Webpage/src/webpage/ftesting.zcml
  A   grokapps/Webpage/src/webpage/static/
  A   grokapps/Webpage/src/webpage/static/logo.png
  A   grokapps/Webpage/src/webpage/static/mobile.css
  A   grokapps/Webpage/src/webpage/static/screen.css
  A   grokapps/Webpage/src/webpage/static/style.css
  A   grokapps/Webpage/src/webpage/testing.py

-=-
Added: grokapps/Webpage/buildout.cfg
===================================================================
--- grokapps/Webpage/buildout.cfg	                        (rev 0)
+++ grokapps/Webpage/buildout.cfg	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,66 @@
+[buildout]
+develop = .
+parts = app data zopectl i18n test
+find-links = http://download.zope.org/distribution/
+eggs-directory = /home/peterbe/buildout-eggs
+newest = false
+extends= http://grok.zope.org/releaseinfo/grok-0.12.cfg
+versions = versions
+
+[app]
+recipe = zc.zope3recipes>=0.5.3:application
+eggs = Webpage
+site.zcml = <include package="webpage" />
+            <include package="zope.app.twisted" />
+
+            <configure i18n_domain="webpage">
+              <unauthenticatedPrincipal id="zope.anybody"
+                                        title="Unauthenticated User" />
+              <unauthenticatedGroup id="zope.Anybody"
+                                    title="Unauthenticated Users" />
+              <authenticatedGroup id="zope.Authenticated"
+                                title="Authenticated Users" />
+              <everybodyGroup id="zope.Everybody"
+                              title="All Users" />
+              <principal id="zope.manager"
+                         title="Manager"
+                         login="admin"
+                         password_manager="Plain Text"
+                         password="admin"
+                         />
+
+              <!-- Replace the following directive if you don't want
+                   public access -->
+              <grant permission="zope.View"
+                     principal="zope.Anybody" />
+              <grant permission="zope.app.dublincore.view"
+                     principal="zope.Anybody" />
+
+              <role id="zope.Manager" title="Site Manager" />
+              <role id="zope.Member" title="Site Member" />
+              <grantAll role="zope.Manager" />
+              <grant role="zope.Manager"
+                     principal="zope.manager" />
+           </configure>
+
+[data]
+recipe = zc.recipe.filestorage
+
+# this section named so that the start/stop script is called bin/zopectl
+[zopectl]
+recipe = zc.zope3recipes:instance
+application = app
+zope.conf = ${data:zconfig}
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = Webpage
+defaults = ['--tests-pattern', '^f?tests$', '-v']
+
+# this section named so that the i18n scripts are called bin/i18n...
+[i18n]
+recipe = lovely.recipe:i18n
+package = webpage
+domain = webpage
+location = src/webpage
+output = locales

Added: grokapps/Webpage/setup.py
===================================================================
--- grokapps/Webpage/setup.py	                        (rev 0)
+++ grokapps/Webpage/setup.py	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,28 @@
+from setuptools import setup, find_packages
+
+version = '0.0'
+
+setup(name='Webpage',
+      version=version,
+      description="",
+      long_description="""\
+""",
+      # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[], 
+      keywords="",
+      author="",
+      author_email="",
+      url="",
+      license="",
+      package_dir={'': 'src'},
+      packages=find_packages('src'),
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=['setuptools',
+                        'grok',
+                        # Add extra requirements here
+                        ],
+      entry_points="""
+      # Add entry points here
+      """,
+      )

Added: grokapps/Webpage/src/webpage/__init__.py
===================================================================
--- grokapps/Webpage/src/webpage/__init__.py	                        (rev 0)
+++ grokapps/Webpage/src/webpage/__init__.py	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1 @@
+# this directory is a package

Added: grokapps/Webpage/src/webpage/app.py
===================================================================
--- grokapps/Webpage/src/webpage/app.py	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app.py	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,47 @@
+import grok
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+##
+## The application
+##
+
+class Webpage(grok.Application, grok.Container):
+    pass
+
+#
+# Views for this application
+# 
+
+class Index(grok.View):
+    pass # see app_templates/index.pt
+
+class About(grok.View):
+    pass
+
+class HeaderFooter(grok.View):
+    pass
+
+
+
+##
+## The mobile layer
+##
+
+
+class MobileLayer(IDefaultBrowserLayer):
+    pass
+
+class MobileSkin(grok.Skin):
+    grok.name('mobile') # optional
+    grok.layer(MobileLayer)
+    
+#
+# Views in this layer
+#
+    
+class MobileHeaderFooter(grok.View):
+    grok.name('headerfooter') # important
+    grok.layer(MobileLayer)
+
+
+

Added: grokapps/Webpage/src/webpage/app.py.0
===================================================================
--- grokapps/Webpage/src/webpage/app.py.0	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app.py.0	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,46 @@
+import grok
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+##
+## The application
+##
+
+class Webpage(grok.Application, grok.Container):
+    pass
+
+#
+# Views for this application
+# 
+
+class Index(grok.View):
+    pass # see app_templates/index.pt
+
+class About(grok.View):
+    pass
+
+class HeaderFooter(grok.View):
+    pass
+
+
+
+##
+## The mobile layer
+##
+
+
+class MobileLayer(IDefaultBrowserLayer):
+    pass
+
+class MobileSkin(grok.Skin):
+    grok.name('mobile') # optional
+    grok.layer(MobileLayer)
+    
+#
+# Views in this layer
+#
+    
+class MobileHeaderFooter(grok.View):
+    grok.name('headerfooter') # important
+    grok.layer(MobileLayer)
+    
+

Added: grokapps/Webpage/src/webpage/app_templates/about.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/about.pt	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/about.pt	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,9 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+  <h3>About</h3>
+  
+  <p>This is an example Grok application that shows the magic of layers
+  and what they can be used for.</p>
+  
+</div>
+</html>

Added: grokapps/Webpage/src/webpage/app_templates/headerfooter.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/headerfooter.pt	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/headerfooter.pt	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,41 @@
+<metal:block define-macro="standard"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Web page</title>
+  <meta http-equiv="Content-Type"
+      content="text/html; charset=utf-8" />
+  <link rel="stylesheet" type="text/css" 
+        tal:attributes="href static/style.css" />
+  <link rel="stylesheet" type="text/css" media="screen"
+        tal:attributes="href static/screen.css" />
+  <style metal:define-slot="extracss" tal:omit-tag=""></style>
+</head>
+<body>
+<metal:block define-slot="body">
+<div id="header">
+  <metal:block define-slot="header">
+    <h1><span>Web page</span></h1>
+    <hr />
+  </metal:block>
+</div>
+
+<div id="content">
+  <metal:block define-slot="content">
+    walk all over me
+  </metal:block>
+</div>
+
+<div id="footer">
+  <metal:block define-slot="footer">
+    <p>&copy; Grok.
+    <a href="#">Switch to normal web version</a>
+    </p>
+  </metal:block>
+</div>
+
+</metal:block>
+<script metal:define-slot="extrajs" tal:omit-tag=""></script>
+</body>
+</html>
+</metal:block>
\ No newline at end of file

Added: grokapps/Webpage/src/webpage/app_templates/index.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/index.pt	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/index.pt	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,8 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+  <h2>Welcome to Web page</h2>
+
+  <p>This is the front page for the Web page.</p>
+  
+</div>
+</html>

Added: grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,42 @@
+<metal:block define-macro="standard"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Web page (Mobile)</title>
+  <meta http-equiv="Content-Type"
+      content="text/html; charset=utf-8" />
+  <link rel="stylesheet" type="text/css" 
+        tal:attributes="href static/style.css" />
+  <link rel="stylesheet" type="text/css"
+        tal:attributes="href static/mobile.css" />
+  <style metal:define-slot="extracss" tal:omit-tag=""></style>
+</head>
+<body>
+<metal:block define-slot="body">
+<div id="header">
+  <metal:block define-slot="header">
+    <h2>Web page</h2>
+    <hr />
+  </metal:block>
+</div>
+
+<div id="content">
+  <metal:block define-slot="content">
+    walk all over me
+  </metal:block>
+</div>
+
+<div id="footer">
+  <metal:block define-slot="footer">
+    <p>&copy; Grok.<br />
+    You are currently using the mobile version of this page.
+    <a href="#" tal:attributes="href python:view.url().replace('++skin++mobile/','')">Switch to normal web version</a>
+    </p>
+  </metal:block>
+</div>
+
+</metal:block>
+<script metal:define-slot="extrajs" tal:omit-tag=""></script>
+</body>
+</html>
+</metal:block>
\ No newline at end of file

Added: grokapps/Webpage/src/webpage/app_templates/mobileindex.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/mobileindex.pt	                        (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/mobileindex.pt	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,8 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+  <h2>Mobile Web page</h2>
+
+  <p>Now with mobile specific front end.</p>
+  
+</div>
+</html>

Added: grokapps/Webpage/src/webpage/configure.zcml
===================================================================
--- grokapps/Webpage/src/webpage/configure.zcml	                        (rev 0)
+++ grokapps/Webpage/src/webpage/configure.zcml	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,6 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:grok="http://namespaces.zope.org/grok">
+  <include package="grok" />
+  <includeDependencies package="." />
+  <grok:grok package="." />
+</configure>

Added: grokapps/Webpage/src/webpage/ftesting.zcml
===================================================================
--- grokapps/Webpage/src/webpage/ftesting.zcml	                        (rev 0)
+++ grokapps/Webpage/src/webpage/ftesting.zcml	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,35 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   i18n_domain="webpage"
+   package="webpage"
+   >
+
+  <include package="grok" />
+  <include package="webpage" />
+
+  <!-- Typical functional testing security setup -->
+  <securityPolicy
+      component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      />
+
+  <unauthenticatedPrincipal
+      id="zope.anybody"
+      title="Unauthenticated User"
+      />
+  <grant
+      permission="zope.View"
+      principal="zope.anybody"
+      />
+
+  <principal
+      id="zope.mgr"
+      title="Manager"
+      login="mgr"
+      password="mgrpw"
+      />
+
+  <role id="zope.Manager" title="Site Manager" />
+  <grantAll role="zope.Manager" />
+  <grant role="zope.Manager" principal="zope.mgr" />
+
+</configure>

Added: grokapps/Webpage/src/webpage/static/logo.png
===================================================================
(Binary files differ)


Property changes on: grokapps/Webpage/src/webpage/static/logo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: grokapps/Webpage/src/webpage/static/mobile.css
===================================================================
--- grokapps/Webpage/src/webpage/static/mobile.css	                        (rev 0)
+++ grokapps/Webpage/src/webpage/static/mobile.css	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,2 @@
+#content {
+}
\ No newline at end of file

Added: grokapps/Webpage/src/webpage/static/screen.css
===================================================================
--- grokapps/Webpage/src/webpage/static/screen.css	                        (rev 0)
+++ grokapps/Webpage/src/webpage/static/screen.css	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,16 @@
+#content {
+  padding:10px;
+  background-color:#efefef;
+}
+
+#header h1 {
+	width: 419px;
+	height: 73px;
+	background-image: url(logo.png);
+	}
+#header h1 span {
+	display: block;
+	width: 0;
+	height: 0;
+	overflow: hidden;
+	}
\ No newline at end of file

Added: grokapps/Webpage/src/webpage/static/style.css
===================================================================
--- grokapps/Webpage/src/webpage/static/style.css	                        (rev 0)
+++ grokapps/Webpage/src/webpage/static/style.css	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,6 @@
+body {
+  font-family:"Lucida Grande",Geneva,Arial,Verdana,sans-serif;
+}
+h1, h2, h3, h4 {
+  color:#333333;
+}
\ No newline at end of file

Added: grokapps/Webpage/src/webpage/testing.py
===================================================================
--- grokapps/Webpage/src/webpage/testing.py	                        (rev 0)
+++ grokapps/Webpage/src/webpage/testing.py	2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,7 @@
+import os.path
+import webpage
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(
+    os.path.dirname(webpage.__file__), 'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer')



More information about the Checkins mailing list