2025-01-08 15:14:06 +00:00
|
|
|
import asyncio
|
|
|
|
from io import TextIOWrapper
|
2025-01-08 21:32:10 +00:00
|
|
|
from typing import Any, AsyncGenerator, Generator, Iterable, Sequence, Union
|
2025-01-08 15:14:06 +00:00
|
|
|
from Bio import SeqIO
|
|
|
|
|
2025-01-22 21:05:19 +00:00
|
|
|
from autobigs.engine.data.structures.genomics import NamedString
|
2025-01-08 15:14:06 +00:00
|
|
|
|
|
|
|
async def read_fasta(handle: Union[str, TextIOWrapper]) -> AsyncGenerator[NamedString, Any]:
|
|
|
|
fasta_sequences = asyncio.to_thread(SeqIO.parse, handle=handle, format="fasta")
|
|
|
|
for fasta_sequence in await fasta_sequences:
|
2025-01-08 21:32:10 +00:00
|
|
|
yield NamedString(fasta_sequence.id, str(fasta_sequence.seq))
|
|
|
|
|
|
|
|
async def read_multiple_fastas(handles: Iterable[Union[str, TextIOWrapper]]) -> AsyncGenerator[NamedString, Any]:
|
|
|
|
for handle in handles:
|
|
|
|
async for named_seq in read_fasta(handle):
|
|
|
|
yield named_seq
|