Batcher 2
Cut sliceable objects into batches, eg for paging display on a website
Batcher
-------
Splits any sliceable object into batches::
>>> from batcher import Batcher
>>> items = list('ABCDEFGHIJ')
>>> batcher = Batcher(items, 4)
>>> # How many batches are available?
>>> len(batcher)
3
>>> # Get contents of the first batch
>>> list(batcher[0])
['A', 'B', 'C', 'D']
Batches look like lists but know about their context too::
>>> batch = batcher[1]
>>> batch
>>> batcher[1].previous
>>> batcher[1].next
>>> batcher[2].next
None
A common requirement in web applications is to implement a pager widget.
The range method can help when the user is viewing page **n** and we want to
display a range of pages centered on **n**, adjusting endpoints to keep
them in range::
>>> items = range(100)
>>> batcher = Batcher(items, 4)
>>> len(batcher)
25
>>> # The range of 5 batches centered on the given batch
>>> batcher[0].range(5)
[, , , , ]
>>> batcher[7].range(5)
[, , , , ]
>>> batcher[23].range(5)
[, , , , ]
If there aren't enough batches available, the entire batch will be returned::
>>> items = range(10)
>>> batcher = Batcher(items, 4)
>>> len(batcher)
3
>>> batcher[1].range(5)
[, , ]
Because batches use python's slicing API to retrieve data, we can
interrogate the slice object to find out the indices of the first and last
items in a batch, useful for showing data such as "Page 1 (items 1-10)"::
>>> items = range(25)
>>> batcher = Batcher(items, 10)
>>> batch = batcher[0]
>>> batch.slice
slice(0, 10, None)
>>> "Page %d (items %d-%d)" % (batch.index + 1, batch.slice.start + 1,
batch.slice.stop)
'Page 1 (items 1-10)'
Note how python's slice semantics mean that the indices are zero-based (so
we add 1 when formatting for display) and that the stop index of the slice
points to the item after the end of the series.
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| Batcher-2.tar.gz (md5) | Source | 2009-12-15 | 8KB | 539 | |
- Author: Oliver Cope
- License: BSD
- Categories
- Package Index Owner: olly
- DOAP record: Batcher-2.xml
