[Checkins] SVN: z3c.dobbin/trunk/ Basic type factories are now
registered as components.
Malthe Borch
mborch at gmail.com
Wed Jun 25 09:22:10 EDT 2008
Log message for revision 87752:
Basic type factories are now registered as components.
Changed:
U z3c.dobbin/trunk/CHANGES.txt
U z3c.dobbin/trunk/src/z3c/dobbin/README.txt
U z3c.dobbin/trunk/src/z3c/dobbin/configure.zcml
U z3c.dobbin/trunk/src/z3c/dobbin/factory.py
U z3c.dobbin/trunk/src/z3c/dobbin/interfaces.py
U z3c.dobbin/trunk/src/z3c/dobbin/soup.py
U z3c.dobbin/trunk/src/z3c/dobbin/testing.py
-=-
Modified: z3c.dobbin/trunk/CHANGES.txt
===================================================================
--- z3c.dobbin/trunk/CHANGES.txt 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/CHANGES.txt 2008-06-25 13:22:08 UTC (rev 87752)
@@ -1,9 +1,15 @@
Change log
==========
-0.3 dev
--------
+0.3.1 dev
+---------
+- Basic type factories are now registered as components.
+ [malthe]
+
+0.3.0
+-----
+
- Implemented rest of list methods.
[malthe]
Modified: z3c.dobbin/trunk/src/z3c/dobbin/README.txt
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/README.txt 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/README.txt 2008-06-25 13:22:08 UTC (rev 87752)
@@ -16,11 +16,6 @@
Interface specification
-----------------------
-An mapper adapter is provided.
-
- >>> from z3c.dobbin.mapper import getMapper
- >>> component.provideAdapter(getMapper)
-
We begin with a database session.
>>> import ore.alchemist
@@ -186,6 +181,7 @@
Instances of mappers automatically join the object soup.
+ >>> from z3c.dobbin.mapper import getMapper
>>> mapper = getMapper(Vinyl)
>>> instance = mapper()
>>> instance.uuid is not None
Modified: z3c.dobbin/trunk/src/z3c/dobbin/configure.zcml
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/configure.zcml 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/configure.zcml 2008-06-25 13:22:08 UTC (rev 87752)
@@ -2,4 +2,16 @@
<adapter factory=".mapper.getMapper" />
+ <!-- Basic type factories providing ``IMapped`` -->
+
+ <adapter factory=".factory.createInstanceFromItem" />
+ <adapter factory=".factory.createIntegerBasicType" />
+ <adapter factory=".factory.createFloatBasicType" />
+ <adapter factory=".factory.createUnicodeBasicType" />
+ <adapter factory=".factory.createStringBasicType" />
+ <adapter factory=".factory.createTupleBasicType" />
+ <adapter factory=".factory.createListBasicType" />
+ <adapter factory=".factory.createDictBasicType" />
+ <adapter factory=".factory.createSetBasicType" />
+
</configure>
Modified: z3c.dobbin/trunk/src/z3c/dobbin/factory.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/factory.py 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/factory.py 2008-06-25 13:22:08 UTC (rev 87752)
@@ -1,11 +1,59 @@
-from interfaces import IMapper
-from zope.interface.declarations import _normalizeargs
+from zope import interface
+from zope import component
-from ore.alchemist import Session
+import interfaces
+import types
def create(spec):
# set up mapper
- mapper = IMapper(spec)
+ mapper = interfaces.IMapper(spec)
# create instance
return mapper()
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(interface.Interface)
+def createInstanceFromItem(item):
+ return create(item.__class__)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.IntType)
+def createIntegerBasicType(int):
+ return create(interfaces.IIntegerBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.FloatType)
+def createFloatBasicType(float):
+ return create(interfaces.IFloatBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.UnicodeType)
+def createUnicodeBasicType(str):
+ return create(interfaces.IUnicodeBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.StringType)
+def createStringBasicType(str):
+ return create(interfaces.IStringBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.TupleType)
+def createTupleBasicType(tuple):
+ return create(interfaces.ITupleBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.ListType)
+def createListBasicType(list):
+ return create(interfaces.IListBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(type(set()))
+def createSetBasicType(set):
+ return create(interfaces.ISetBasicType)
+
+ at interface.implementer(interfaces.IMapped)
+ at component.adapter(types.DictType)
+def createDictBasicType(dict):
+ return create(interfaces.IDictBasicType)
+
+
Modified: z3c.dobbin/trunk/src/z3c/dobbin/interfaces.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/interfaces.py 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/interfaces.py 2008-06-25 13:22:08 UTC (rev 87752)
@@ -10,7 +10,7 @@
class IBasicType(interface.Interface):
"""A basic Python value type."""
-
+
class IIntegerBasicType(IBasicType):
value = schema.Int()
Modified: z3c.dobbin/trunk/src/z3c/dobbin/soup.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/soup.py 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/soup.py 2008-06-25 13:22:08 UTC (rev 87752)
@@ -16,16 +16,6 @@
BASIC_TYPES = (int, float, str, unicode, tuple, list, set, dict)
IMMUTABLE_TYPES = (int, float, str, unicode, tuple)
-
-FACTORY_TYPE_MAP = {
- types.IntType: interfaces.IIntegerBasicType,
- types.FloatType: interfaces.IFloatBasicType,
- types.UnicodeType: interfaces.IUnicodeBasicType,
- types.StringType: interfaces.IStringBasicType,
- types.TupleType: interfaces.ITupleBasicType,
- types.ListType: interfaces.IListBasicType,
- type(set()): interfaces.ISetBasicType,
- types.DictType: interfaces.IDictBasicType}
def lookup(uuid, ignore_pending=False):
session = Session()
@@ -53,13 +43,11 @@
return session.query(mapper).filter_by(uuid=uuid)[0]
def persist(item):
- kls = FACTORY_TYPE_MAP.get(type(item))
-
- if kls is not None:
- instance = factory.create(kls)
+ instance = interfaces.IMapped(item)
+
+ if interfaces.IBasicType.providedBy(instance):
instance.value = item
else:
- instance = factory.create(item.__class__)
update(instance, item)
# set soup identifier on instances
Modified: z3c.dobbin/trunk/src/z3c/dobbin/testing.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/testing.py 2008-06-25 11:25:26 UTC (rev 87751)
+++ z3c.dobbin/trunk/src/z3c/dobbin/testing.py 2008-06-25 13:22:08 UTC (rev 87752)
@@ -1,5 +1,7 @@
from zope import component
+import zope.configuration.xmlconfig
+
import z3c.dobbin.bootstrap
import sqlalchemy as rdb
@@ -8,6 +10,8 @@
from ore.alchemist import Session
from ore.alchemist.interfaces import IDatabaseEngine
+import z3c.dobbin
+
metadata = rdb.MetaData()
def setUp(test):
@@ -19,6 +23,10 @@
# bootstrap database engine
z3c.dobbin.bootstrap.bootstrapDatabaseEngine(None)
+ # register components
+ zope.configuration.xmlconfig.XMLConfig('meta.zcml', component)()
+ zope.configuration.xmlconfig.XMLConfig('configure.zcml', z3c.dobbin)()
+
def tearDown(test):
del test._engine
del metadata._bind
More information about the Checkins
mailing list