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