'Line filter here being used to aggregate/assemble lines into a block
and determine whether the line indicates a new block.
:param line: the incoming line from the source
:type line: str
:returns: a block or `None`'

def filter(self, line):

    line = super(BlockDataProvider, self).filter(line)
    self.num_data_read -= 1
    if (line is None):
        return None
    block_to_return = None
    if self.is_new_block(line):
        if self.block_lines:
            block_to_return = self.assemble_current_block()
            block_to_return = self.filter_block(block_to_return)
            self.num_data_read += 1
            self.init_new_block()
    self.add_line_to_block(line)
    return block_to_return
