1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
# Copyright 2012 by Wibowo Arindrarto. All rights reserved.
# All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license. Please see the LICENSE file that should have been included
# as part of this package.
"""Custom indexing for Bio.SearchIO objects."""
from Bio._py3k import StringIO
from Bio._py3k import _bytes_to_string
from Bio import bgzf
from Bio.File import _IndexedSeqFileProxy, _open_for_random_access
class SearchIndexer(_IndexedSeqFileProxy):
"""Base class for file format specific random access.
Subclasses for each file format should define '_parser' and optionally
'get_raw' methods.
"""
def __init__(self, filename, **kwargs):
self._handle = _open_for_random_access(filename)
self._kwargs = kwargs
def _parse(self, handle):
return next(iter(self._parser(handle, **self._kwargs)))
def get(self, offset):
return self._parse(StringIO(_bytes_to_string(self.get_raw(offset))))
|