[Checkins] SVN: z3c.table/branches/lazyvalues2/ Refactored table.Table.setUpRows to compute the rows with a multi-adapter

Godefroid Chapelle gotcha at bubblenet.be
Fri Aug 20 06:16:48 EDT 2010


Log message for revision 115826:
  Refactored table.Table.setUpRows to compute the rows with a multi-adapter
    on the table and its values.
  

Changed:
  U   z3c.table/branches/lazyvalues2/CHANGES.txt
  U   z3c.table/branches/lazyvalues2/src/z3c/table/README.txt
  U   z3c.table/branches/lazyvalues2/src/z3c/table/column.txt
  U   z3c.table/branches/lazyvalues2/src/z3c/table/configure.zcml
  U   z3c.table/branches/lazyvalues2/src/z3c/table/interfaces.py
  U   z3c.table/branches/lazyvalues2/src/z3c/table/sort.txt
  U   z3c.table/branches/lazyvalues2/src/z3c/table/table.py
  U   z3c.table/branches/lazyvalues2/src/z3c/table/tests.py

-=-
Modified: z3c.table/branches/lazyvalues2/CHANGES.txt
===================================================================
--- z3c.table/branches/lazyvalues2/CHANGES.txt	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/CHANGES.txt	2010-08-20 10:16:48 UTC (rev 115826)
@@ -5,9 +5,13 @@
 0.10.0 (unreleased)
 ------------------
 
-- Use a batch factory instead of instantiating ``z3c.batching.Batch`` class directly,
-  (``z3c.batching.Batch`` registered as default factory in ``z3c.batching==1.2.0``)
+- Refactored ``table.Table.setUpRows`` to compute the rows with a multi-adapter
+  on the table and its values.
 
+- Use a batch factory instead of instantiating ``z3c.batching.Batch`` 
+  class directly, (``z3c.batching.Batch`` registered as default factory in
+  ``z3c.batching==1.2.0``).
+
 - ``IValues`` conform to ``len`` protocol. ``table.Table`` has new
   ``allRowsCount`` attribute that surfaces the total number of rows.
 

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/README.txt
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/README.txt	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/README.txt	2010-08-20 10:16:48 UTC (rev 115826)
@@ -76,6 +76,12 @@
   >>> request = TestRequest()
   >>> plainTable = table.Table(container, request)
 
+We need to register the default rows setup:
+  
+  >>> import zope.component
+  >>> from z3c.table import interfaces
+  >>> zope.component.provideAdapter(table.RowsSetUp,
+  ...     (interfaces.ITable, None), provides=interfaces.IRowsSetUp)
 
   >>> plainTable.update()
 
@@ -97,8 +103,6 @@
 
 We can create a column for our table:
 
-  >>> import zope.component
-  >>> from z3c.table import interfaces
   >>> from z3c.table import column
 
   >>> class TitleColumn(column.Column):

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/column.txt
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/column.txt	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/column.txt	2010-08-20 10:16:48 UTC (rev 115826)
@@ -65,6 +65,13 @@
   ...                              weight=2, header=u'Number')
   ...             ]
 
+We need to register the default rows setup:
+  
+  >>> import zope.component
+  >>> from z3c.table import interfaces
+  >>> zope.component.provideAdapter(table.RowsSetUp,
+  ...     (interfaces.ITable, None), provides=interfaces.IRowsSetUp)
+
 Now create, update and render our table and you can see that the NameColumn
 renders the name of the item using the zope.traversing.api.getName() concept:
 

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/configure.zcml
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/configure.zcml	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/configure.zcml	2010-08-20 10:16:48 UTC (rev 115826)
@@ -21,4 +21,7 @@
            z3c.table.interfaces.ITable"
       />
 
+  <adapter
+      factory="z3c.table.table.RowsSetUp" />
+
 </configure>

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/interfaces.py
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/interfaces.py	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/interfaces.py	2010-08-20 10:16:48 UTC (rev 115826)
@@ -36,6 +36,12 @@
         default=u'')
 
 
+class IRowsSetUp(zope.interface.Interface):
+    """Computes table rows from table and values"""
+
+    rows = zope.interface.Attribute('Iterable table row/column data sequence.')
+
+
 class ITable(zope.contentprovider.interfaces.IContentProvider):
     """Table provider"""
 

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/sort.txt
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/sort.txt	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/sort.txt	2010-08-20 10:16:48 UTC (rev 115826)
@@ -50,6 +50,13 @@
   >>> container[u'fourth'] = Content('Fourth', 4)
   >>> container[u'zero'] = Content('Zero', 0)
 
+We need to register the default rows setup:
+  
+  >>> import zope.component
+  >>> from z3c.table import interfaces
+  >>> zope.component.provideAdapter(table.RowsSetUp,
+  ...     (interfaces.ITable, None), provides=interfaces.IRowsSetUp)
+
 And render them without set a ``sortOn`` value:
 
   >>> from zope.publisher.browser import TestRequest

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/table.py
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/table.py	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/table.py	2010-08-20 10:16:48 UTC (rev 115826)
@@ -21,6 +21,7 @@
 import zope.interface
 import zope.component
 from zope.component import createObject
+from zope.component import getMultiAdapter
 import zope.location
 
 from z3c.batching.interfaces import IBatch
@@ -177,7 +178,8 @@
         return cols
 
     def setUpRows(self):
-        return [self.setUpRow(item) for item in self.values]
+        adapter = getMultiAdapter((self, self.values), interfaces.IRowsSetUp)
+        return adapter.rows
 
 # sort
 
@@ -358,3 +360,16 @@
     """
 
     zope.interface.implements(interfaces.ISequenceTable)
+
+
+class RowsSetUp(object):
+    zope.interface.implements(interfaces.IRowsSetUp)
+    zope.component.adapts(interfaces.ITable, zope.interface.Interface)
+
+    def __init__(self, table, values):
+        self.table = table
+        self.values = values
+
+    @property
+    def rows(self):
+        return [self.table.setUpRow(item) for item in self.values]

Modified: z3c.table/branches/lazyvalues2/src/z3c/table/tests.py
===================================================================
--- z3c.table/branches/lazyvalues2/src/z3c/table/tests.py	2010-08-20 09:06:58 UTC (rev 115825)
+++ z3c.table/branches/lazyvalues2/src/z3c/table/tests.py	2010-08-20 10:16:48 UTC (rev 115826)
@@ -233,6 +233,9 @@
 
     def setUp(self):
         self.sm = sm = getSiteManager()
+        sm.registerAdapter(table.RowsSetUp,
+            (interfaces.ITable, None),
+            interfaces.IRowsSetUp)
         sm.registerAdapter(NumberColumn,
             (None, None, interfaces.ITable),
             interfaces.IColumn, name='number')



More information about the checkins mailing list