Source code for everest.batch
"""
Batch.
This file is part of the everest project.
See LICENSE.txt for licensing, CONTRIBUTORS.txt for contributor information.
Created on Jan 15, 2011.
"""
import math
__docformat__ = "reStructuredText en"
__all__ = ['Batch',
]
[docs]class Batch(object):
"""
Helper class to manage batches in a sequence.
"""
[docs] def __init__(self, start, size, total_size):
"""
:param int start: start index for this batch.
:param int size: batch size.
:param int total_size: total size of the batched sequence.
"""
if start < 0:
raise ValueError('Batch start must be zero or a positive number.')
if not size > 0:
raise ValueError('Batch size must be a positive number.')
self.start = int(start) / int(size) * int(size)
self.size = size
self.total_size = total_size
@property
[docs] def next(self):
"""
Returns the next batch for the batched sequence or `None`, if
this batch is already the last batch.
:rtype: :class:`Batch` instance or `None`.
"""
if self.start + self.size > self.total_size:
result = None
else:
result = Batch(self.start + self.size, self.size, self.total_size)
return result
@property
[docs] def previous(self):
"""
Returns the previous batch for the batched sequence or `None`, if
this batch is already the first batch.
:rtype: :class:`Batch` instance or `None`.
"""
if self.start - self.size < 0:
result = None
else:
result = Batch(self.start - self.size, self.size, self.total_size)
return result
@property
[docs] def first(self):
"""
Returns the first batch for the batched sequence.
:rtype: :class:`Batch` instance.
"""
return Batch(0, self.size, self.total_size)
@property
[docs] def last(self):
"""
Returns the last batch for the batched sequence.
:rtype: :class:`Batch` instance.
"""
start = max(self.number - 1, 0) * self.size
return Batch(start, self.size, self.total_size)
@property
[docs] def number(self):
"""
Returns the number of batches the batched sequence contains.
:rtype: integer.
"""
return int(math.ceil(self.total_size / float(self.size)))
@property
[docs] def index(self):
"""
Returns the index of this batch in the batched sequence.
:rtype: integer
"""
return int(self.start / self.size)