[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