[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