35 lines
1.4 KiB
Python
Raw Normal View History

import csv
from os import PathLike
2025-01-17 16:56:52 +00:00
from typing import AsyncIterable, Mapping, Sequence, Union
from autobigs.engine.structures.mlst import Allele, MLSTProfile
def dict_loci_alleles_variants_from_loci(alleles_map: Mapping[str, Allele]):
result_dict: dict[str, Union[list[str], str]] = {}
for loci, alleles in alleles_map.items():
result_dict[loci] = alleles.allele_variant
return result_dict
2025-01-09 17:27:15 +00:00
async def write_mlst_profiles_as_csv(mlst_profiles_iterable: AsyncIterable[tuple[str, Union[MLSTProfile, None]]], handle: Union[str, bytes, PathLike[str], PathLike[bytes]]) -> Sequence[str]:
failed = list()
with open(handle, "w", newline='') as filehandle:
header = None
writer: Union[csv.DictWriter, None] = None
async for name, mlst_profile in mlst_profiles_iterable:
2025-01-09 17:27:15 +00:00
if mlst_profile is None:
failed.append(name)
continue
if writer is None:
header = ["id", "st", "clonal-complex", *sorted(mlst_profile.alleles.keys())]
writer = csv.DictWriter(filehandle, fieldnames=header)
writer.writeheader()
row_dictionary = {
"st": mlst_profile.sequence_type,
"clonal-complex": mlst_profile.clonal_complex,
"id": name,
**mlst_profile.alleles
}
2025-01-09 17:27:15 +00:00
writer.writerow(rowdict=row_dictionary)
return failed