[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