hi there

Alright... I'm working on implementing IPerson in the class Person and I'm not sure exactly what has to happen. I kinda have two ideas but I suspect I need to some how combine them but I don't know how to do that. A big part of the problem is that I do not know what zope.schema.fieldproperty.FieldProperty does. The only reason I'm working it in, is because it appears to be necessary to get this whole thing to work:

http://svn.zope.org/Zope3/trunk/src/zope/app/form/browser/ objectwidget.txt

Here are my ideas:

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

from persistent import Persistent
from zope.interface import implements

from abook.interfaces import IPerson

class Person(Persistent):
        
        implements(IPerson)
        
        firstName = u""
        lastName = u""
        phoneNumbers = persistent.dict.PersistentDict()
        emails = persistent.dict.PersistentDict()
        addresses = persistent.dict.PersistentDict()

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

from persistent import Persistent
from zope.interface import implements
from zope.schema.fieldproperty import FieldProperty

from abook.interfaces import IStreetAddress
from abook.interfaces import IPerson

class Person(Persistent):
        
        implements(IPerson)
        
        phoneNumbers = FieldProperty(IPerson['phoneNumbers'])
        emails = FieldProperty(IPerson['emails'])
        addresses = FieldProperty(IPerson['addresses'])
        
        def __init__(self,
                                        firstName = u"", lastName = u"",
                                        phoneNumbers = None, emails = None,
                                        addresses = None):
                
                self.firstName = firstName
                self.lastName = lastName
                self.phoneNumbers = phoneNumbers
                self.emails = emails
                self.addresses = addresses
        

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

I guess my question is, how should I be implementing Person? Is one of those right or are they both wrong?

thanks

-jachin



#------------abook/interfaces.py------------

from zope.interface import Interface
import zope.schema

class IStreetAddress(Interface):
        """A vine street address"""
        
        street = zope.schema.Text (
                title=u"Street 1",
                description=u"The street address",
                required = False
        )
        
        city = zope.schema.TextLine (
                title=u"City",
                description=u"The city.",
                required = False
        )
        
        state = zope.schema.TextLine (
                title=u"State",
                description=u"The state.",
                required = False
        )
        
        zipcode = zope.schema.TextLine (
                title=u"Zip Code",
                description=u"The zip code",
                required = False,
                min_length = 5
        )

class IABookEntry(Interface):
        phoneNumbers = zope.schema.Dict(
                title=u"Phone Numbers",
                description=u"The phone numbers for this entry",
                required=False,
                key_type=zope.schema.TextLine (
                                title=u"Type",
                                description=u"The type of phone number",
                                required=True
                        ),
                value_type=zope.schema.TextLine (
                                title=u"Number",
                                description=u"The phone number.",
                                required=True
                        )
                )
        
        emails = zope.schema.Dict(
                title=u"Email Addresses",
                description=u"The email addresses for this entry",
                required=False,
                key_type=zope.schema.TextLine (
                                title=u"Type",
                                description=u"The type of email address",
                                required=True
                        ),
                value_type=zope.schema.TextLine (
                                title=u"Email Address",
                                description=u"The email address.",
                                required=True
                        )
                )
        
        addresses = zope.schema.Dict(
                title=u"Addresses",
                description=u"Street address",
                required=False,
                key_type=zope.schema.TextLine(
                                title=u"Type",
                                description=u"The type of street address",
                                required=True
                        ),
                value_type=zope.schema.Object (
                                title=u"Street Address",
                                description=u"A street address",
                                required=True,
                                schema=IStreetAddress
                        )
                )


class IPerson(IABookEntry):
        firstName = zope.schema.TextLine (
                title=u"First Name",
                description=u"The person's first name",
                required=False
        )
        
        lastName = zope.schema.TextLine (
                title=u"Last Name",
                description=u"The person's last name",
                required=False
        )
        
        
class IBusiness(IABookEntry):
        
        businessName = zope.schema.TextLine (
                title=u"Business Name",
                description=u"The business' last name",
                required=False
        )



#------------abook/streetAddress.py------------


from persistent import Persistent
from zope.interface import implements

from abook.interfaces import IStreetAddress

class StreetAddress(Persistent):
        """This is a class for holding street addresses
        
        Make sure that StreetAddress implements the
        correct interface interface:
        
        >>> from zope.interface.verify import verifyClass
        >>> verifyClass(IStreetAddress, StreetAddress)
        True
        
        Now lets expierment with changing around some of
        the attributes:
        
        >>> a = StreetAddress()
        >>> a.street
        u''
        >>> a.street = u"123 Some St."
        >>> a.street
        u'123 Some St.'
        
        >>> a.city
        u''
        
        >>> a.state
        u''
        
        >>> a.zipcode
        u''
        
        """
        implements(IStreetAddress)
        
        street = u""
        city = u""
        state = u""
        zipcode = u""


#------------abook/tests/test_StreetAddress.py------------


import unittest
from zope.testing.doctestunit import DocTestSuite
        

def test_suite():
        return unittest.TestSuite((
                DocTestSuite('abook.streetAddress'),
                ))
        

if __name__ == '__main__':
        unittest.main(defaultTest='test_suite')




_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to