[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