diff --git a/cdot/hgvs/dataproviders/json_data_provider.py b/cdot/hgvs/dataproviders/json_data_provider.py index 10ccf3a..1b49cae 100644 --- a/cdot/hgvs/dataproviders/json_data_provider.py +++ b/cdot/hgvs/dataproviders/json_data_provider.py @@ -8,6 +8,7 @@ from lazy import lazy from hgvs.dataproviders.interface import Interface from hgvs.dataproviders.seqfetcher import SeqFetcher +from hgvs.exceptions import HGVSDataNotAvailableError from intervaltree import IntervalTree from typing import List @@ -181,15 +182,19 @@ def _get_transcript_info(transcript): def get_tx_info(self, tx_ac, alt_ac, alt_aln_method): self._check_alt_aln_method(alt_aln_method) - transcript = self._get_transcript(tx_ac) - if not transcript: - return None - - tx_info = self._get_transcript_info(transcript) - tx_info["tx_ac"] = tx_ac - tx_info["alt_ac"] = alt_ac - tx_info["alt_aln_method"] = self.NCBI_ALN_METHOD - return tx_info + if transcript := self._get_transcript(tx_ac): + for build_data in transcript["genome_builds"].values(): + print(f"BUILD DATA: {build_data}") + if alt_ac == build_data["contig"]: + tx_info = self._get_transcript_info(transcript) + tx_info["tx_ac"] = tx_ac + tx_info["alt_ac"] = alt_ac + tx_info["alt_aln_method"] = self.NCBI_ALN_METHOD + return tx_info + + raise HGVSDataNotAvailableError( + f"No tx_info for (tx_ac={tx_ac},alt_ac={alt_ac},alt_aln_method={alt_aln_method})" + ) def get_tx_mapping_options(self, tx_ac): mapping_options = [] diff --git a/tests/test_json_data_provider.py b/tests/test_json_data_provider.py index 36e1fce..13a404f 100644 --- a/tests/test_json_data_provider.py +++ b/tests/test_json_data_provider.py @@ -5,6 +5,7 @@ import hgvs from hgvs.assemblymapper import AssemblyMapper +from hgvs.exceptions import HGVSDataNotAvailableError from cdot.hgvs.dataproviders.json_data_provider import JSONDataProvider @@ -86,6 +87,17 @@ def test_get_gene_info(self): } self.assertEqual(gene_info, expected) + def test_get_tx_info(self): + # We only have data for GRCh37 but none for 38 + + # Make sure 37 works + tx_info = self.json_data_provider.get_tx_info("NM_001637.3", "NC_000007.13", "splign") + print(tx_info) + + # Make sure 38 fails + with self.assertRaises(HGVSDataNotAvailableError): + tx_info = self.json_data_provider.get_tx_info("NM_001637.3", "NC_000007.14", "splign") + if __name__ == '__main__': unittest.main()