def test_is_seekable(self): "It tests wether the fhands are seekable or not" # StringIO fhand = StringIO("hola") assert fhand_is_seekable(fhand) # standard file fhand = NamedTemporaryFile() fhand.seek(0) assert fhand_is_seekable(fhand) # a wrapped BufferedReader fhand2 = wrap_in_buffered_reader(fhand) assert fhand_is_seekable(fhand2) # pylint: disable=R0903 # pylint: disable=C0111 class NonSeekable(object): "Just for testing" pass assert not fhand_is_seekable(NonSeekable()) class NonSeekable2(object): def seek(self): pass def seekable(self): return False assert not fhand_is_seekable(NonSeekable2())
def test_is_seekable(self): 'It tests wether the fhands are seekable or not' # StringIO fhand = StringIO('hola') assert fhand_is_seekable(fhand) # standard file fhand = NamedTemporaryFile() fhand.seek(0) assert fhand_is_seekable(fhand) # a wrapped BufferedReader fhand2 = wrap_in_buffered_reader(fhand) assert fhand_is_seekable(fhand2) # pylint: disable=R0903 # pylint: disable=C0111 class NonSeekable(object): 'Just for testing' pass assert not fhand_is_seekable(NonSeekable()) class NonSeekable2(object): def seek(self): pass def seekable(self): return False assert not fhand_is_seekable(NonSeekable2())
def _get_some_qual_and_lengths(fhand, force_file_as_non_seek): 'It returns the quality characters and the lengths' seqs_to_peek = get_setting('SEQS_TO_GUESS_FASTQ_VERSION') chunk_size = get_setting('CHUNK_TO_GUESS_FASTQ_VERSION') lengths = array('I') seqs_analyzed = 0 if fhand_is_seekable(fhand) and not force_file_as_non_seek: fmt_fhand = fhand chunk = fmt_fhand.read(chunk_size) fhand.seek(0) else: chunk = peek_chunk_from_file(fhand, chunk_size) fmt_fhand = cStringIO.StringIO(chunk) try: for seq in FastqGeneralIterator(fmt_fhand): qual = [ord(char) for char in seq[2]] sanger_chars = [q for q in qual if q < 64] if sanger_chars: fhand.seek(0) return None, True, chunk # no quals, no lengths, is_sanger lengths.append(len(qual)) seqs_analyzed += 1 if seqs_analyzed > seqs_to_peek: break except ValueError: msg = 'The file is Fastq, but the version is difficult to guess' raise UndecidedFastqVersionError(msg) finally: fhand.seek(0) return lengths, None, chunk # don't know if it's sanger
def _get_some_qual_and_lengths(fhand, force_file_as_non_seek): "It returns the quality characters and the lengths" seqs_to_peek = SEQS_TO_GUESS_FASTQ_VERSION chunk_size = CHUNK_TO_GUESS_FASTQ_VERSION lengths = array("I") seqs_analyzed = 0 if fhand_is_seekable(fhand) and not force_file_as_non_seek: fmt_fhand = fhand else: chunk = peek_chunk_from_file(fhand, chunk_size) fmt_fhand = cStringIO.StringIO(chunk) try: for seq in FastqGeneralIterator(fmt_fhand): qual = [ord(char) for char in seq[2]] sanger_chars = [q for q in qual if q < 64] if sanger_chars: fhand.seek(0) return None, True # no quals, no lengths, is_sanger lengths.append(len(qual)) seqs_analyzed += 1 if seqs_analyzed > seqs_to_peek: break except ValueError: raise UnknownFormatError("Malformed fastq") finally: fhand.seek(0) return lengths, None # quals, lengths, don't know if it's sanger
def _get_some_qual_and_lengths(fhand, force_file_as_non_seek): 'It returns the quality characters and the lengths' seqs_to_peek = get_setting('SEQS_TO_GUESS_FASTQ_VERSION') chunk_size = get_setting('CHUNK_TO_GUESS_FASTQ_VERSION') lengths = array('I') seqs_analyzed = 0 if fhand_is_seekable(fhand) and not force_file_as_non_seek: fmt_fhand = fhand chunk = fmt_fhand.read(chunk_size) fhand.seek(0) else: chunk = peek_chunk_from_file(fhand, chunk_size) fmt_fhand = cStringIO.StringIO(chunk) try: for seq in FastqGeneralIterator(fmt_fhand): qual = [ord(char) for char in seq[2]] sanger_chars = [q for q in qual if q < 64] if sanger_chars: fhand.seek(0) return None, True, chunk # no quals, no lengths, is_sanger lengths.append(len(qual)) seqs_analyzed += 1 if seqs_analyzed > seqs_to_peek: break except ValueError: msg = 'The file is Fastq, but the version is difficult to guess' raise UndecidedFastqVersionError(msg) finally: fhand.seek(0) return lengths, None, chunk # don't know if it's sanger