Beispiel #1
0
def get_blocks_by_indexes(index_start: str = 0,
                          index_end: str = 'max',
                          db: Any = None) -> None:
    """
    Get multiple blocks by index range.

    Args:
        index_start: Beginning index.
        index_end: End index.
        db: Read-only database instance.
    """
    try:
        int_index_start = int(index_start)
    except ValueError:
        return 'Start index {} couldn\'t be parsed'.format(index_start), 400
    if index_end == 'max':
        with open('./data/progress.txt', 'r') as f:
            index_end, _ = f.read().split('\n')
    try:
        int_index_end = int(index_end)
    except ValueError:
        return 'End index {} couldn\'t be parsed'.format(index_end), 400

    if int_index_start > int_index_end:
        return 'Start index larger than end index.', 400

    gatherer = DatabaseGatherer(db)
    blocks = gatherer.get_blocks_by_indexes(index_start, index_end)
    if blocks is None:
        return 'No blocks in index range {}-{} have been found'.format(
            index_start, index_end), 404

    return blocks
    def test_get_blocks_indexes(self):
        """Test validity of block data from a selected index range."""
        db = rocksdb.DB(DB_PATH,
                        rocksdb.Options(create_if_missing=True,
                                        max_open_files=10000),
                        read_only=True)
        with open('tests/resources/block_data_indexrange.txt', 'r') as f:
            compare_data = json.loads(f.read())

        index_start = 20
        index_end = 30
        gatherer = DatabaseGatherer(db)
        gathered_data = gatherer.get_blocks_by_indexes(index_start, index_end)

        self.assertEqual(compare_data, gathered_data)