[Checkins] SVN: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/ Add the
first demo. This demo creates a custom container subclass
that only holds HelloWorldMessage objects,
which can't be added anywhere else (like in a generic
SQLAlchemyContainer).
Michael Bernstein
webmaven at cox.net
Tue Jan 16 15:10:04 EST 2007
Log message for revision 72059:
Add the first demo. This demo creates a custom container subclass that only holds HelloWorldMessage objects, which can't be added anywhere else (like in a generic SQLAlchemyContainer).
Changed:
U z3c.zalchemy/trunk/src/z3c/zalchemy/demo/__init__.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/__init__.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/__init__.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/configure.zcml
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/message.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/view.pt
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/configure.zcml
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/container.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/interfaces.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/message.py
A z3c.zalchemy/trunk/src/z3c/zalchemy/demo/z3c.zalchemy.demo-configure.zcml
-=-
Modified: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/__init__.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/__init__.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/__init__.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1 @@
+# Make this a package
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/__init__.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/__init__.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/__init__.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1 @@
+# Make this a package
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/__init__.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/__init__.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/__init__.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1 @@
+# Make a package
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/configure.zcml
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/configure.zcml 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/configure.zcml 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,54 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ >
+
+<!-- Message Container -->
+
+ <browser:addMenuItem
+ title="Message Container 1"
+ class="z3c.zalchemy.demo.demo_1.container.MessageContainer"
+ permission="zope.ManageContent"
+ />
+
+ <browser:containerViews
+ for="z3c.zalchemy.demo.demo_1.interfaces.IMessageContainer"
+ contents="zope.ManageContent"
+ index="zope.View"
+ add="zope.ManageContent"
+ />
+
+<!-- Message -->
+
+ <browser:addMenuItem
+ title="Hello World Message"
+ factory="z3c.zalchemy.demo.demo_1.message.HelloWorldMessage"
+ view="z3c.zalchemy.demo.demo_1.message.HelloWorldMessage"
+ permission="zope.ManageContent"
+ />
+
+ <browser:page
+ for="z3c.zalchemy.demo.demo_1.interfaces.IHelloWorldMessage"
+ name="index.html"
+ template="view.pt"
+ permission="zope.View"
+ menu="zmi_views" title="View"
+ />
+
+ <browser:page
+ for="zope.app.container.interfaces.IAdding"
+ name="z3c.zalchemy.demo.demo_1.message.HelloWorldMessage"
+ class=".message.AddHelloWorldMessage"
+ permission="zope.ManageContent"
+ />
+
+ <browser:page
+ for="z3c.zalchemy.demo.demo_1.interfaces.IHelloWorldMessage"
+ name="edit.html"
+ class=".message.EditHelloWorldMessage"
+ permission="zope.ManageContent"
+ menu="zmi_views" title="Edit"
+ />
+
+
+</configure>
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/message.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/message.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/message.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,31 @@
+import zope.traversing.browser
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.formlib.namedtemplate import NamedTemplateImplementation
+from zope.formlib import form
+from z3c.zalchemy.demo.demo_1.interfaces import IHelloWorldMessage
+from z3c.zalchemy.demo.demo_1.message import HelloWorldMessage
+
+# class that defines the add form fields
+class AddHelloWorldMessage(form.AddForm):
+
+ form_fields = form.FormFields(IHelloWorldMessage).omit('__parent__')
+
+ def create(self, data):
+ return HelloWorldMessage(**data)
+
+# class that defines the edit form fields
+class EditHelloWorldMessage(form.EditForm):
+
+ form_fields = form.FormFields(IHelloWorldMessage).omit('__parent__')
+
+ actions = form.EditForm.actions.copy()
+
+ @form.action(_("Apply and View"))
+ def handle_edit_view_action(self, action, data):
+ self.actions['form.actions.apply'].success(data)
+ url = zope.traversing.browser.absoluteURL(self.context, self.request)
+ self.request.response.redirect(url)
+
+# the template for the default view
+view_template = NamedTemplateImplementation(
+ ViewPageTemplateFile('view.pt'))
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/view.pt
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/view.pt 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/browser/view.pt 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,12 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="context/@@standard_macros/view">
+<body>
+<div metal:fill-slot="body">
+
+ <h1>Hello <span tal:replace="context/who">Who</span>!</h1>
+
+</div>
+</body>
+</html>
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/configure.zcml
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/configure.zcml 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/configure.zcml 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,65 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:alchemy="http://namespaces.zalchemy.org/alchemy">
+
+ <!-- ZAlchemy Setup -->
+
+ <alchemy:engine
+ name="DemoEngine-1"
+ url="sqlite:///zalchemy.message_1.db"
+ />
+ <alchemy:connectTable
+ table="message"
+ engine="DemoEngine-1"
+ />
+ <alchemy:connectClass
+ class=".message.HelloWorldMessage"
+ engine="DemoEngine-1"
+ />
+
+ <!-- Message Container Configuration -->
+
+ <class class=".container.MessageContainer">
+
+ <factory
+ id="z3c.zalchemy.demo.demo_1.container.MessageContainer"
+ title="Message Container 1"
+ description="A container for Hello World Message instances" />
+
+ <require
+ permission="zope.View"
+ interface="zope.app.container.interfaces.IReadContainer"
+ />
+
+ <require
+ permission="zope.ManageContent"
+ interface="zope.app.container.interfaces.IWriteContainer"
+ />
+
+ </class>
+
+
+ <!-- Message Configuration -->
+
+ <class class=".message.HelloWorldMessage">
+ <implements interface="z3c.zalchemy.interfaces.ISQLAlchemyObjectContained" />
+ <require
+ permission="zope.View"
+ interface=".interfaces.IHelloWorldMessage"
+ />
+
+ <require
+ permission="zope.ManageContent"
+ set_schema=".interfaces.IHelloWorldMessage"
+ />
+
+ </class>
+
+ <utility
+ component=".message.messageFactory"
+ name="z3c.zalchemy.demo.demo_1.message.HelloWorldMessage"
+ />
+
+ <include package=".browser" />
+
+</configure>
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/container.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/container.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/container.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,14 @@
+from z3c.zalchemy.container import SQLAlchemyContainer
+from interfaces import IMessageContainer
+from message import HelloWorldMessage
+from zope.interface import implements
+
+# Subclass The SQLAlchemyContainer class to set an explicit class name to use
+
+class MessageContainer(SQLAlchemyContainer):
+ """A container for Hello World messages"""
+ implements(IMessageContainer)
+ def __init__(self):
+ self.setClassName('z3c.zalchemy.demo.demo_1.message.HelloWorldMessage')
+
+
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/interfaces.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/interfaces.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/interfaces.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,20 @@
+import zope.schema
+from z3c.zalchemy.interfaces import ISQLAlchemyObjectContained, ISQLAlchemyContainer
+from zope.app.container.constraints import contains, containers
+
+# Define an interface for an RDBMS-persistent content class
+
+class IHelloWorldMessage(ISQLAlchemyObjectContained):
+ """Information about a hello world message"""
+
+ who = zope.schema.TextLine(
+ title=u'Who',
+ description=u'Name of the person sending the message',
+ required=True)
+
+# Define an interface for a container of RDBMS-persistent IHelloWorld objects
+
+class IMessageContainer(ISQLAlchemyContainer):
+ """A container for hello world message mbjects"""
+ contains(IHelloWorldMessage)
+
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/message.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/message.py 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/demo_1/message.py 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,41 @@
+import sqlalchemy
+import z3c.zalchemy
+from z3c.zalchemy.container import SQLAlchemyNameChooser
+from zope.interface import implements
+from zope.schema.fieldproperty import FieldProperty
+
+from interfaces import IHelloWorldMessage
+
+from zope.component.factory import Factory
+
+# Define and create the table object for storing messages
+HelloWorldMessageTable = sqlalchemy.Table(
+ 'message',
+ z3c.zalchemy.metadata,
+ sqlalchemy.Column('id', sqlalchemy.Integer, primary_key = True),
+ sqlalchemy.Column('who', sqlalchemy.Unicode),
+ )
+
+z3c.zalchemy.createTable('message', 'DemoEngine-1')
+
+# Define the content class for messages
+class HelloWorldMessage(object):
+ implements(IHelloWorldMessage)
+
+ who = FieldProperty(IHelloWorldMessage['who'])
+
+ def __init__(self, who):
+ self.who = who
+
+ def __repr__(self):
+ return '<%s from %r>' %(self.__class__.__name__, self.who)
+
+
+# Map the table to the class
+sqlalchemy.mapper(HelloWorldMessage, HelloWorldMessageTable)
+
+messageFactory=Factory(
+ HelloWorldMessage,
+ title=u"Create a new message",
+ description=u"This factory instantiates new messages"
+ )
Added: z3c.zalchemy/trunk/src/z3c/zalchemy/demo/z3c.zalchemy.demo-configure.zcml
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/demo/z3c.zalchemy.demo-configure.zcml 2007-01-16 16:46:05 UTC (rev 72058)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/demo/z3c.zalchemy.demo-configure.zcml 2007-01-16 20:10:01 UTC (rev 72059)
@@ -0,0 +1,6 @@
+<configure>
+<include package="z3c.zalchemy.demo.demo_1" />
+<!-- include package="z3c.zalchemy.demo.demo_2" /-->
+<!-- include package="z3c.zalchemy.demo.demo_3" /-->
+<!-- include package="z3c.zalchemy.demo.demo_4" /-->
+</configure>
More information about the Checkins
mailing list