[Checkins] SVN: bluebream/website/ continue example

Baiju M baiju.m.mail at gmail.com
Sun Feb 7 20:55:56 EST 2010


Log message for revision 108863:
  continue example
  

Changed:
  U   bluebream/website/docs/v1.0/tutorial2.rst
  U   bluebream/website/examples/v1.0/tut/stage4/src/tc/main/interfaces.py
  U   bluebream/website/examples/v1.0/tut/stage4/src/tc/main/ticket.py

-=-
Modified: bluebream/website/docs/v1.0/tutorial2.rst
===================================================================
--- bluebream/website/docs/v1.0/tutorial2.rst	2010-02-08 01:43:16 UTC (rev 108862)
+++ bluebream/website/docs/v1.0/tutorial2.rst	2010-02-08 01:55:56 UTC (rev 108863)
@@ -48,7 +48,73 @@
           default=u"",
           required=True)
 
+Next, you can implement this interface inside ``ticket.py``::
 
+  from zope.interface import implements
+  from tc.main.interfaces import ITicket
+  from tc.main.interfaces import ITicketContained
+  from zope.location.contained import Contained
+
+
+  class Ticket(Contained):
+
+      implements(ITicket, ITicketContained)
+
+      number = u""
+      summary = u""
+
+Then, register the interface & class::
+
+  <interface 
+     interface=".interfaces.ITicket" 
+     type="zope.app.content.interfaces.IContentType"
+     /> 
+
+  <class class=".ticket.Ticket">
+    <implements
+       interface="zope.annotation.interfaces.IAttributeAnnotatable"
+       />
+    <require
+       permission="zope.ManageContent"
+       interface=".interfaces.ITicket"
+       />
+    <require
+       permission="zope.ManageContent"
+       set_schema=".interfaces.ITicket"
+       />
+  </class>
+
+Now you can add a link in ``collectormain.pt`` like this::
+
+  <a href="@@add_ticket">Add Ticket</a>
+
+When you click on this link, it expects a view. You can create an
+AddForm inside ``views.py``::
+
+  from tc.main.interfaces import ITicket
+
+  from tc.main.ticket import Ticket
+
+  class AddTicket(form.AddForm):
+
+      form_fields = form.Fields(ITicket)
+
+      def createAndAdd(self, data):
+          number = data['number']
+          summary = data['summary']
+          ticket = Ticket()
+          self.context[number] = ticket
+          self.request.response.redirect('.')
+
+You can register the view inside `configure.zcml`::
+
+    <browser:page
+       for=".interfaces.ICollector"
+       name="add_ticket"
+       permission="zope.ManageContent"
+       class=".views.AddTicket"
+       />
+
 .. _tut2-adding-tickets:
 
 Change the look and feel

Modified: bluebream/website/examples/v1.0/tut/stage4/src/tc/main/interfaces.py
===================================================================
--- bluebream/website/examples/v1.0/tut/stage4/src/tc/main/interfaces.py	2010-02-08 01:43:16 UTC (rev 108862)
+++ bluebream/website/examples/v1.0/tut/stage4/src/tc/main/interfaces.py	2010-02-08 01:55:56 UTC (rev 108863)
@@ -1,8 +1,30 @@
 from zope.interface import Interface
 from zope.container.interfaces import IContainer
+from zope.container.interfaces import IContained
+from zope.app.container.constraints import ContainerTypesConstraint
+from zope.app.container.constraints import ItemTypePrecondition
+
 from zope.schema import TextLine
 from zope.schema import Text
+from zope.schema import Field
 
+
+class ITicket(Interface):
+    """Ticket - the main content object"""
+
+    number = TextLine(
+        title=u"Number",
+        description=u"Ticket number",
+        default=u"",
+        required=True)
+
+    summary = TextLine(
+        title=u"Summary",
+        description=u"Ticket summary",
+        default=u"",
+        required=True)
+
+
 class ICollector(IContainer):
     """The main application container"""
 
@@ -18,18 +40,15 @@
         default=u"",
         required=False)
 
+    def __setitem__(name, object):
+        """Add an ICollector object."""
 
-class ITicket(Interface):
-    """Ticket - the main content object"""
+    __setitem__.precondition = ItemTypePrecondition(ITicket)
 
-    number = TextLine(
-        title=u"Number",
-        description=u"Ticket number",
-        default=u"",
-        required=True)
 
-    summary = TextLine(
-        title=u"Summary",
-        description=u"Ticket summary",
-        default=u"",
-        required=True)
+class ITicketContained(IContained):
+    """Interface that specifies the type of objects that can contain
+    tickets.  So a ticket can only contain in a collector."""
+
+    __parent__ = Field(
+        constraint = ContainerTypesConstraint(ICollector))

Modified: bluebream/website/examples/v1.0/tut/stage4/src/tc/main/ticket.py
===================================================================
--- bluebream/website/examples/v1.0/tut/stage4/src/tc/main/ticket.py	2010-02-08 01:43:16 UTC (rev 108862)
+++ bluebream/website/examples/v1.0/tut/stage4/src/tc/main/ticket.py	2010-02-08 01:55:56 UTC (rev 108863)
@@ -1,10 +1,12 @@
 from zope.interface import implements
 from tc.main.interfaces import ITicket
+from tc.main.interfaces import ITicketContained
+from zope.location.contained import Contained
 
 
-class Ticket(object):
+class Ticket(Contained):
 
-    implements(ITicket)
+    implements(ITicket, ITicketContained)
 
     number = u""
     summary = u""



More information about the checkins mailing list