typology: Python3 fixes; + update of example data
This commit is contained in:
parent
61c78fe3e7
commit
b8eba239ed
4 changed files with 18 additions and 61 deletions
|
@ -1,8 +1,6 @@
|
||||||
A Basic API for Dynamic Typing
|
A Basic API for Dynamic Typing
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
($Id$)
|
|
||||||
|
|
||||||
The typology package offers a basic standard API for associating
|
The typology package offers a basic standard API for associating
|
||||||
arbitrary objects with types that may then be used for controlling
|
arbitrary objects with types that may then be used for controlling
|
||||||
execution of code, helping with search interfaces or editing of
|
execution of code, helping with search interfaces or editing of
|
||||||
|
@ -20,9 +18,9 @@ we will then apply dynamic typing to Person objects:
|
||||||
>>> from cybertools.organize.party import Person
|
>>> from cybertools.organize.party import Person
|
||||||
|
|
||||||
>>> from datetime import date
|
>>> from datetime import date
|
||||||
>>> pdata = ((u'John', u'Smith', '1956-08-01'),
|
>>> pdata = (('John', 'Smith', '1956-08-01'),
|
||||||
... (u'David', u'Waters', '1972-12-24'),
|
... ('David', 'Waters', '1972-12-24'),
|
||||||
... (u'Carla', u'Myers', '1999-10-11'))
|
... ('Carla', 'Myers', '2015-10-11'))
|
||||||
>>> persons = [Person(f, s, date(*[int(d) for d in b.split('-')]))
|
>>> persons = [Person(f, s, date(*[int(d) for d in b.split('-')]))
|
||||||
... for f, s, b in pdata]
|
... for f, s, b in pdata]
|
||||||
|
|
||||||
|
@ -51,7 +49,7 @@ a global utility that does the real work.
|
||||||
We can now look what the type is telling us about the persons:
|
We can now look what the type is telling us about the persons:
|
||||||
|
|
||||||
>>> john_type.title
|
>>> john_type.title
|
||||||
u'Adult'
|
'Adult'
|
||||||
>>> john_type.token
|
>>> john_type.token
|
||||||
'organize.person.agegroup.adult'
|
'organize.person.agegroup.adult'
|
||||||
>>> david_type.token
|
>>> david_type.token
|
||||||
|
@ -90,7 +88,7 @@ another (possibly persistent) object knowing about the available types.
|
||||||
>>> typeManager = component.getUtility(IAgeGroupManager)
|
>>> typeManager = component.getUtility(IAgeGroupManager)
|
||||||
>>> types = typeManager.types
|
>>> types = typeManager.types
|
||||||
>>> [t.title for t in types]
|
>>> [t.title for t in types]
|
||||||
[u'Child', u'Adult']
|
['Child', 'Adult']
|
||||||
>>> types[0] == carla_type
|
>>> types[0] == carla_type
|
||||||
True
|
True
|
||||||
>>> types[1] == john_type == david_type
|
>>> types[1] == john_type == david_type
|
||||||
|
@ -98,4 +96,4 @@ another (possibly persistent) object knowing about the available types.
|
||||||
|
|
||||||
>>> t = typeManager.getType(carla_type.token)
|
>>> t = typeManager.getType(carla_type.token)
|
||||||
>>> t.title
|
>>> t.title
|
||||||
u'Child'
|
'Child'
|
||||||
|
|
|
@ -1,30 +1,12 @@
|
||||||
#
|
# cybertools.typology.example.person
|
||||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" Example classes for the cybertools.typology package.
|
||||||
Example classes for the cybertools.reporter package. These use the
|
|
||||||
cybertools.organize package
|
|
||||||
|
|
||||||
$Id$
|
These use the cybertools.organize package
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements
|
from zope.interface import implementer
|
||||||
from cybertools.organize.interfaces import IPerson
|
from cybertools.organize.interfaces import IPerson
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
from cybertools.typology.type import BaseType, TypeManager
|
from cybertools.typology.type import BaseType, TypeManager
|
||||||
|
@ -44,9 +26,9 @@ class IAgeGroupManager(ITypeManager):
|
||||||
|
|
||||||
# implementations
|
# implementations
|
||||||
|
|
||||||
|
@implementer(IAgeGroup)
|
||||||
class AgeGroup(BaseType):
|
class AgeGroup(BaseType):
|
||||||
|
|
||||||
implements(IAgeGroup)
|
|
||||||
adapts(IPerson)
|
adapts(IPerson)
|
||||||
|
|
||||||
# IType attributes
|
# IType attributes
|
||||||
|
@ -75,10 +57,9 @@ class AgeGroupTypeInfo(AgeGroup):
|
||||||
self.isChild = isChild
|
self.isChild = isChild
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(IAgeGroupManager)
|
||||||
class AgeGroupManager(TypeManager):
|
class AgeGroupManager(TypeManager):
|
||||||
|
|
||||||
implements(IAgeGroupManager)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def types(self):
|
def types(self):
|
||||||
return tuple([AgeGroupTypeInfo(flag) for flag in (True, False)])
|
return tuple([AgeGroupTypeInfo(flag) for flag in (True, False)])
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
# $Id$
|
# cybertools.typology.tests
|
||||||
|
|
||||||
import unittest, doctest
|
import unittest, doctest
|
||||||
from zope.app.testing import ztapi
|
from zope.app.testing import ztapi
|
||||||
from zope.interface.verify import verifyClass
|
from zope.interface.verify import verifyClass
|
||||||
from zope.interface import implements
|
|
||||||
|
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,15 @@
|
||||||
#
|
# cybertools.typology.type
|
||||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" Abstract base classes for type management.
|
||||||
Abstract base classes for type management.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope.interface import implements
|
from zope.interface import implementer
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(IType)
|
||||||
class BaseType(object):
|
class BaseType(object):
|
||||||
|
|
||||||
implements(IType)
|
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
|
@ -57,10 +37,9 @@ class BaseType(object):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(ITypeManager)
|
||||||
class TypeManager(object):
|
class TypeManager(object):
|
||||||
|
|
||||||
implements(ITypeManager)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def types(self):
|
def types(self):
|
||||||
return (BaseType(None),)
|
return (BaseType(None),)
|
||||||
|
|
Loading…
Add table
Reference in a new issue