[ZDP] BackTalk to Document Zope Developer's Guide (2.4 edition)/Zope Products

webmaster@zope.org webmaster@zope.org
Thu, 07 Nov 2002 03:39:01 -0500


A comment to the paragraph below was recently added via http://www.zope.org/Documentation/Books/ZDG/current/Products.stx#3-28

---------------

      Congratulations, you've created a product class. Here it is in all
      its glory (see "PollProduct.py":examples/PollProduct.py)::

        from Poll import Poll
        from AccessControl import ClassSecurityInfo
        from Globals import InitializeClass
        from Acquisition import Implicit
        from Globals import Persistent
        from AccessControl.Role import RoleManager
        from OFS.SimpleItem import Item

        class PollProduct(Implicit, Persistent, RoleManager, Item):
            """
            Poll product class, implements Poll interface.

            The poll has a question and a sequence of responses. Votes
            are stored in a dictionary which maps response indexes to a
            number of votes.
            """

            __implements__=Poll

            meta_type='Poll'

            security=ClassSecurityInfo()

            def __init__(self, id, question, responses):
                self.id=id
                self._question = question
                self._responses = responses
                self._votes = {}
                for i in range(len(responses)):
                    self._votes[i] = 0

            security.declareProtected('Use Poll', 'castVote')
            def castVote(self, index):
                "Votes for a choice"
                self._votes[index] = self._votes[index] + 1
                self._p_changed = 1

            security.declareProtected('View Poll results', 'getTotalVotes') 
            def getTotalVotes(self):
                "Returns total number of votes cast"
                total = 0
                for v in self._votes.values():
                    total = total + v
                return total

            security.declareProtected('View Poll results', 'getVotesFor') 
            def getVotesFor(self, index):
                "Returns number of votes cast for a given response"
                return self._votes[index]

            security.declarePublic('getResponses') 
            def getResponses(self):
                "Returns the sequence of responses"
                return tuple(self._responses)

            security.declarePublic('getQuestion') 
            def getQuestion(self):
                "Returns the question"
                return self._question

        InitializeClass(Poll)

        % Anonymous User - Nov. 7, 2002 3:39 am:
         Last line must be InitializeClass(PollProduct).