[Checkins] SVN: gocept.registration/trunk/ Snapshot on the way to a functional demo and test.

Christian Theune ct at gocept.com
Wed Mar 12 23:43:39 EDT 2008


Log message for revision 84629:
  Snapshot on the way to a functional demo and test.
  

Changed:
  _U  gocept.registration/trunk/
  U   gocept.registration/trunk/buildout.cfg
  U   gocept.registration/trunk/setup.py
  A   gocept.registration/trunk/src/gocept/registration/browser/
  A   gocept.registration/trunk/src/gocept/registration/browser/__init__.py
  A   gocept.registration/trunk/src/gocept/registration/browser/confirmation.pt
  A   gocept.registration/trunk/src/gocept/registration/browser/confirmation_error.pt
  A   gocept.registration/trunk/src/gocept/registration/browser/registration.py
  A   gocept.registration/trunk/src/gocept/registration/configure.zcml
  A   gocept.registration/trunk/src/gocept/registration/demo/
  A   gocept.registration/trunk/src/gocept/registration/demo/__init__.py
  A   gocept.registration/trunk/src/gocept/registration/demo/application.zcml
  A   gocept.registration/trunk/src/gocept/registration/demo/template.pt
  U   gocept.registration/trunk/src/gocept/registration/email.py
  A   gocept.registration/trunk/src/gocept/registration/ftesting.zcml
  A   gocept.registration/trunk/src/gocept/registration/i18n.py
  U   gocept.registration/trunk/src/gocept/registration/tests.py

-=-

Property changes on: gocept.registration/trunk
___________________________________________________________________
Name: svn:ignore
   + develop-eggs
bin
parts
.installed.cfg


Modified: gocept.registration/trunk/buildout.cfg
===================================================================
--- gocept.registration/trunk/buildout.cfg	2008-03-13 02:26:46 UTC (rev 84628)
+++ gocept.registration/trunk/buildout.cfg	2008-03-13 03:43:37 UTC (rev 84629)
@@ -1,7 +1,20 @@
 [buildout]
-parts = test
+parts = test demo
 develop = .
 
+[app]
+recipe = zc.zope3recipes:application
+eggs = gocept.registration [test]
+site.zcml = <include package="gocept.registration.demo" file="application.zcml"/>
+
+[database]
+recipe = zc.recipe.filestorage
+
+[demo]
+recipe = zc.zope3recipes:instance
+application = app
+zope.conf = ${database:zconfig}
+
 [test]
 recipe = zc.recipe.testrunner
 eggs = gocept.registration [test]

Modified: gocept.registration/trunk/setup.py
===================================================================
--- gocept.registration/trunk/setup.py	2008-03-13 02:26:46 UTC (rev 84628)
+++ gocept.registration/trunk/setup.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -42,8 +42,12 @@
         'zope.component',
         'zope.interface',
         'zope.sendmail',
+        'z3c.form'
     ],
     extras_require = dict(
         test=['zope.testing',
-             ])
+              'zope.app.twisted',
+              'zope.app.securitypolicy',
+              'z3c.formui',
+              'z3c.layer'])
     )

Added: gocept.registration/trunk/src/gocept/registration/browser/__init__.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/browser/__init__.py	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/browser/__init__.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1 @@
+# Make this a Python package


Property changes on: gocept.registration/trunk/src/gocept/registration/browser/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: gocept.registration/trunk/src/gocept/registration/browser/confirmation.pt
===================================================================
--- gocept.registration/trunk/src/gocept/registration/browser/confirmation.pt	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/browser/confirmation.pt	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1 @@
+<h1>Hello, you are now registered!</h1>


Property changes on: gocept.registration/trunk/src/gocept/registration/browser/confirmation.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: gocept.registration/trunk/src/gocept/registration/browser/confirmation_error.pt
===================================================================
--- gocept.registration/trunk/src/gocept/registration/browser/confirmation_error.pt	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/browser/confirmation_error.pt	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1 @@
+<h1>Booh! This wasn't a correct registration!</h1>


Property changes on: gocept.registration/trunk/src/gocept/registration/browser/confirmation_error.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: gocept.registration/trunk/src/gocept/registration/browser/registration.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/browser/registration.py	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/browser/registration.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,74 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Basic registration views."""
+
+import gocept.registration.interfaces
+import z3c.form.button
+import z3c.form.form
+import z3c.formui.layout
+import zope.interface
+import zope.schema
+
+from gocept.registration.i18n import _
+
+
+class ISimpleRegistrationSchema(zope.interface.Interface):
+
+    email = zope.schema.TextLine(
+        title=_(u"Email address"),
+        description=_(u"Please provide your email address to which a"
+                      u"confirmation email will be sent to."))
+
+
+class RegistrationForm(z3c.form.form.Form):
+    """Allow a user to enter his data and register itself."""
+
+    ignoreContext = True
+    email_field_name = 'email'
+
+    fields = z3c.form.field.Fields(ISimpleRegistrationSchema)
+
+    @z3c.form.button.buttonAndHandler(_('Register'))
+    def register(self, action):
+        data, errors = self.extractData()
+        if errors:
+            self.status = self.formErrorsMessage
+            return
+        registrations = zope.component.getUtility(
+            gocept.registration.interfaces.IRegistrations)
+        registrations.register(data[self.email_field_name], data)
+
+
+class RegistrationPageletForm(z3c.formui.layout.FormLayoutSupport,
+                              RegistrationForm):
+    """Allow a user to enter his data and register itself."""
+
+
+class Confirmation(object):
+    """Confirm a user's registration."""
+
+    template = zope.app.pagetemplate.viewpagetemplatefile.ViewPageTemplateFile(
+        'confirmation.pt')
+
+    error_template = zope.app.pagetemplate.viewpagetemplatefile.ViewPageTemplateFile(
+        'confirmation_error.pt')
+
+    def update(self):
+        registrations = zope.component.getUtility(
+            gocept.registration.interfaces.IRegistrations)
+        hash = self.request.form.get('hash')
+        try:
+            registrations.confirm(hash)
+        except KeyError:
+            self.template = self.error_template


Property changes on: gocept.registration/trunk/src/gocept/registration/browser/registration.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: gocept.registration/trunk/src/gocept/registration/configure.zcml
===================================================================
--- gocept.registration/trunk/src/gocept/registration/configure.zcml	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/configure.zcml	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,6 @@
+<configure xmlns="http://namespaces.zope.org/zope">
+
+  <subscriber handler=".email.send_registration_mail" />
+  <adapter factory=".email.ConfirmationEmail" />
+
+</configure>

Added: gocept.registration/trunk/src/gocept/registration/demo/__init__.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/demo/__init__.py	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/demo/__init__.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import z3c.formui.interfaces
+import z3c.layer.pagelet
+import z3c.form.interfaces
+import zope.component
+import gocept.registration.interfaces
+
+
+class IDemoBrowserLayer(z3c.formui.interfaces.IDivFormLayer,
+                        z3c.form.interfaces.IFormLayer,
+                        z3c.layer.pagelet.IPageletBrowserLayer):
+    """The skin used for demonstration purposes."""
+
+
+DEMO_TEMPLATE = """From: %(from)s
+To: %(to)s
+Subject: Please confirm your registration
+
+We received your registration. To activate it, please follow this confirmation
+link:
+
+  %(link)s"""
+
+
+class DemoEmailConfiguration(object):
+
+    zope.component.adapts(gocept.registration.interfaces.IRegistration)
+    zope.interface.implements(gocept.registration.interfaces.IEmailConfiguration)
+
+    addr_from = "Ad Ministrator <admin at example.com>"
+    confirmation_url = "/confirm.html?hash=%s"
+    confirmation_template = DEMO_TEMPLATE
+
+    def __init__(self, registration):
+        pass


Property changes on: gocept.registration/trunk/src/gocept/registration/demo/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: gocept.registration/trunk/src/gocept/registration/demo/application.zcml
===================================================================
--- gocept.registration/trunk/src/gocept/registration/demo/application.zcml	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/demo/application.zcml	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,96 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+  xmlns:browser="http://namespaces.zope.org/browser"
+  xmlns:z3c="http://namespaces.zope.org/z3c">
+
+  <include package="zope.app.component" file="meta.zcml" />
+  <include package="zope.app.component.browser" file="meta.zcml" />
+  <include package="zope.app.form.browser" file="meta.zcml" />
+  <include package="zope.app.pagetemplate" file="meta.zcml" />
+  <include package="zope.app.publication" file="meta.zcml" />
+  <include package="zope.app.publisher" file="meta.zcml" />
+  <include package="zope.app.security" file="meta.zcml" />
+  <include package="zope.app.securitypolicy" file="meta.zcml" />
+  <include package="zope.viewlet" file="meta.zcml" />
+  <include package="z3c.form" file="meta.zcml" />
+  <include package="z3c.macro" file="meta.zcml" />
+  <include package="z3c.pagelet" file="meta.zcml" />
+  <include package="z3c.template" file="meta.zcml" />
+
+  <browser:menu id="zmi_views" title="Views" />
+  <browser:menu id="zmi_actions" title="Actions" />
+
+  <include package="zope.app.appsetup" />
+  <include package="zope.app.component" />
+  <include package="zope.app.container" />
+  <include package="zope.app.error" />
+  <include package="zope.app.i18n" />
+  <include package="zope.app.publication" />
+  <include package="zope.app.security" />
+  <include package="zope.app.securitypolicy" />
+  <include package="zope.app.session" />
+  <include package="zope.app.twisted" />
+  <include package="zope.app.wsgi" />
+  <include package="zope.annotation" />
+  <include package="zope.component" />
+  <include package="zope.contentprovider" />
+  <include package="zope.location" />
+  <include package="zope.publisher" />
+  <include package="zope.traversing" />
+  <include package="zope.traversing.browser" />
+  <include package="zope.viewlet" />
+
+  <include package="z3c.form" />
+  <include package="z3c.formui" />
+  <include package="z3c.layer.pagelet" />
+  <include package="z3c.macro" />
+  <include package="z3c.pagelet" />
+
+  <include package="gocept.registration" />
+
+  <interface
+      interface="gocept.registration.demo.IDemoBrowserLayer"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      name="RegistrationDemo"
+      />
+
+  <z3c:layout
+      for="*"
+      layer="gocept.registration.demo.IDemoBrowserLayer"
+      template="template.pt"
+      />
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+
+  <role id="zope.Anonymous" title="Everybody" />
+  <grantAll role="zope.Anonymous" />
+
+  <browser:defaultView name="index.html" />
+  <browser:defaultSkin name="RegistrationDemo" />
+
+  <z3c:pagelet
+      name="register.html"
+      class="..browser.registration.RegistrationPageletForm"
+      layer="gocept.registration.demo.IDemoBrowserLayer"
+      permission="zope.Public"
+      for="*"
+      />
+
+  <z3c:pagelet
+      name="confirm.html"
+      class="..browser.registration.Confirmation"
+      layer="gocept.registration.demo.IDemoBrowserLayer"
+      permission="zope.Public"
+      for="*"
+      />
+
+  <utility
+      factory="..registrations.Registrations"
+      provides="..interfaces.IRegistrations"
+      />
+
+  <adapter factory=".DemoEmailConfiguration" />
+
+  <utility factory="..tests.DummyMailer" />
+
+</configure>

Added: gocept.registration/trunk/src/gocept/registration/demo/template.pt
===================================================================
--- gocept.registration/trunk/src/gocept/registration/demo/template.pt	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/demo/template.pt	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,11 @@
+<!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" xml:lang="en" lang="en">
+  <head>
+    <title>gocept.registration demo</title>
+  </head>
+  <body>
+    <div id="content">
+      <tal:block replace="structure provider:pagelet" />
+    </div>
+  </body>
+</html>


Property changes on: gocept.registration/trunk/src/gocept/registration/demo/template.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: gocept.registration/trunk/src/gocept/registration/email.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/email.py	2008-03-13 02:26:46 UTC (rev 84628)
+++ gocept.registration/trunk/src/gocept/registration/email.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -15,13 +15,17 @@
 
 import gocept.registration.interfaces
 import zope.interface
+import zope.app.container.interfaces
 
 
 class ConfirmationEmail(object):
     """A basic confirmation email."""
 
+    zope.component.adapts(
+        gocept.registration.interfaces.IRegistration)
+
     zope.interface.implements(
-      gocept.registration.interfaces.IConfirmationEmail)
+        gocept.registration.interfaces.IConfirmationEmail)
 
     def __init__(self, registration):
         config = gocept.registration.interfaces.IEmailConfiguration(
@@ -32,11 +36,12 @@
             'link': config.confirmation_url % registration.hash}
 
 
-def send_registration_mail(event):
+ at zope.component.adapter(gocept.registration.interfaces.IRegistration,
+                        zope.app.container.interfaces.IObjectAddedEvent)
+def send_registration_mail(registration, event):
     """Listen for a registration and send a mail to the user, asking for
     confirmation.
     """
-    registration = event.object
     email = gocept.registration.interfaces.IConfirmationEmail(registration)
     config = gocept.registration.interfaces.IEmailConfiguration(registration)
     mailer = zope.component.getUtility(zope.sendmail.interfaces.IMailer)

Added: gocept.registration/trunk/src/gocept/registration/ftesting.zcml
===================================================================
--- gocept.registration/trunk/src/gocept/registration/ftesting.zcml	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/ftesting.zcml	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,5 @@
+<configure xmlns="http://namespaces.zope.org/zope">
+
+  <include package="gocept.registration.demo" file="application.zcml"/>
+
+</configure>

Added: gocept.registration/trunk/src/gocept/registration/i18n.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/i18n.py	                        (rev 0)
+++ gocept.registration/trunk/src/gocept/registration/i18n.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+import zope.i18nmessageid
+
+_ = MessageFactory = zope.i18nmessageid.MessageFactory('gocept.registration')


Property changes on: gocept.registration/trunk/src/gocept/registration/i18n.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: gocept.registration/trunk/src/gocept/registration/tests.py
===================================================================
--- gocept.registration/trunk/src/gocept/registration/tests.py	2008-03-13 02:26:46 UTC (rev 84628)
+++ gocept.registration/trunk/src/gocept/registration/tests.py	2008-03-13 03:43:37 UTC (rev 84629)
@@ -13,12 +13,13 @@
 ##############################################################################
 """Test harness for gocept.registration."""
 
+import os.path
 import re
 import unittest
 import zope.testing.renormalizing
 import zope.sendmail.interfaces
 
-from zope.app.testing import placelesssetup
+from zope.app.testing import placelesssetup, functional
 from zope.testing import doctest
 
 
@@ -36,6 +37,11 @@
         print msg
 
 
+RegistrationLayer = functional.ZCMLLayer(
+    os.path.join(os.path.dirname(__file__), 'ftesting.zcml'),
+    __name__, 'RegistrationLayer_FTest')
+
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(doctest.DocFileSuite(



More information about the Checkins mailing list