Quickstart Instructions ======================= ($Id$) >>> from zope.app import zapi >>> from zope.app.testing import ztapi >>> from zope.interface import directlyProvides A Basic API for Dynamic Typing ============================== >>> from cybertools.typology.interfaces import IType, ITypeManager Let's start with the Person class from the cybertools.contact package - we will then apply dynamic typing to Person objects: >>> from cybertools.contact.interfaces import IPerson >>> from cybertools.contact import Person >>> from datetime import date >>> pdata = ((u'John', u'Smith', '1956-08-01'), ... (u'David', u'Waters', '1972-12-24'), ... (u'Carla', u'Myers', '1999-10-11')) >>> persons = [Person(f, s, date(*[int(d) for d in b.split('-')])) ... for f, s, b in pdata] Now we want to express that any person younger than 18 years is a child, and from 18 years on a person is an adult. (Note that this test will only work until November 2017 ;-)) The example package gives us a class for this type that we use as an adapter to IPerson: >>> from cybertools.typology.example.person import BasicAgeGroup >>> ztapi.provideAdapter(IPerson, IType, BasicAgeGroup) >>> john_type = IType(persons[0]) >>> david_type = IType(persons[1]) >>> carla_type = IType(persons[2]) We can now look what the type is telling us about the persons: >>> john_type.title u'Adult' >>> john_type.token 'contact.person.agetype.adult' >>> david_type.token 'contact.person.agetype.adult' >>> carla_type.token 'contact.person.agetype.child' Usually types are equal if they have the same token: >>> john_type == david_type True >>> john_type == carla_type False