From ed34a40bafce79c49be4b46fe9c032478106233b Mon Sep 17 00:00:00 2001 From: Rapsssito Date: Thu, 11 Aug 2022 09:57:26 +0200 Subject: [PATCH] fix: Fix float .2f VCF representation --- src/variant_extractor/VariantExtractor.py | 5 ++-- src/variant_extractor/variants.py | 29 ++++++++++++----------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/variant_extractor/VariantExtractor.py b/src/variant_extractor/VariantExtractor.py index da0d39a..8df55e8 100644 --- a/src/variant_extractor/VariantExtractor.py +++ b/src/variant_extractor/VariantExtractor.py @@ -180,7 +180,8 @@ def __handle_multiallelic_record(self, rec: pysam.VariantRecord) -> List[Variant for i, alt in enumerate(alts): # WARNING: This overrides the record rec.alts = [alt] - new_id = f'{original_id}_{i}' - rec.id = new_id + if original_id: + new_id = f'{original_id}_{i}' + rec.id = new_id record_list += self.__handle_record(rec) return record_list diff --git a/src/variant_extractor/variants.py b/src/variant_extractor/variants.py index 9f0206a..e2a236f 100644 --- a/src/variant_extractor/variants.py +++ b/src/variant_extractor/variants.py @@ -41,31 +41,32 @@ class ShorthandSVRecord(NamedTuple): extra: List[str] """Extra information of the SV. For example, for :code:`` the extra will be :code:`['TANDEM', 'AA']`""" +def _str_value(value): + if isinstance(value, str): + return value + elif isinstance(value, float): + return f'{value:.2f}' + elif hasattr(value, '__iter__'): + return ','.join([_str_value(v) for v in value]) + elif value is None: + return '.' + else: + return str(value) def _convert_info_key_value(key, value): if value is None: return key elif isinstance(value, bool): return key if value else None - elif isinstance(value, str): - return f'{key}={value}' - elif hasattr(value, '__len__'): - return key+'=' + ','.join([str(v) for v in value]) else: - return key+'='+str(value) + return key+'='+_str_value(value) def _convert_sample_value(key, value): if key == 'GT': - return '/'.join([str(v) if v is not None else '.' for v in value]) - elif value is None: - return '.' - elif isinstance(value, str): - return value - elif hasattr(value, '__len__'): - return ','.join([str(v) if v is not None else '.' for v in value]) + return '/'.join([_str_value(v) for v in value]) else: - return str(value) + return _str_value(value) class VariantRecord(NamedTuple): @@ -108,7 +109,7 @@ def __str__(self): id_ = self.id if self.id else '.' ref = self.ref alt = self.alt - qual = self.qual if self.qual else '.' + qual = _str_value(self.qual) filter_ = ";".join(self.filter) if self.filter else '.' info_list = [] for key, value in self.info.items():