GenomicMedLab / cool-seq-tool

https://coolseqtool.readthedocs.io
MIT License
4 stars 0 forks source link

`AttributeError` from only supplying `alt_ac` for getting nearest tx junction in `genomic_to_transcript_exon` #311

Closed jsstevenson closed 3 months ago

jsstevenson commented 3 months ago

Describe the bug

When using the exon-genomic coords mapper's get_nearest_transcript_junction param, passing only an alt_ac raises an AttributeError.

Steps to reproduce

In [1]: from cool_seq_tool.schemas import Strand

In [2]: from cool_seq_tool.app import CoolSeqTool

In [3]: egc = CoolSeqTool().ex_g_coords_mapper

In [4]: await egc.genomic_to_transcript_exon_coordinates(
   ...:         alt_ac="NC_000007.13",
   ...:         start=73442503,
   ...:         # end=73457929,
   ...:         strand=Strand.POSITIVE,
   ...:         gene="ELN",
   ...:         get_nearest_transcript_junction=True
   ...:     )
   ...:

Expected behavior

It should work

Current behavior

the error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[4], line 1
----> 1 await egc.genomic_to_transcript_exon_coordinates(
      2         alt_ac="NC_000007.13",
      3         start=73442503,
      4         # end=73457929,
      5         strand=Strand.POSITIVE,
      6         gene="ELN",
      7         get_nearest_transcript_junction=True
      8     )

File ~/code/cool-seq-tool/src/cool_seq_tool/mappers/exon_genomic_coords.py:299, in ExonGenomicCoordsMapper.genomic_to_transcript_exon_coordinates(self, chromosome, alt_ac, start, end, strand, transcript, get_nearest_transcript_junction, gene, residue_mode)
    297     start -= 1
    298 residue_mode = ResidueMode.ZERO
--> 299 start_data = await self._genomic_to_transcript_exon_coordinate(
    300     start,
    301     chromosome=chromosome,
    302     alt_ac=alt_ac,
    303     strand=strand,
    304     transcript=transcript,
    305     gene=gene,
    306     get_nearest_transcript_junction=get_nearest_transcript_junction,
    307     is_start=True,
    308 )
    309 if start_data.transcript_exon_data:
    310     start_data = start_data.transcript_exon_data.model_dump()

File ~/code/cool-seq-tool/src/cool_seq_tool/mappers/exon_genomic_coords.py:526, in ExonGenomicCoordsMapper._genomic_to_transcript_exon_coordinate(self, pos, chromosome, alt_ac, strand, transcript, gene, get_nearest_transcript_junction, is_start)
    521 if not gene or not strand:
    522     return self._return_warnings(
    523         resp,
    524         "Gene or strand must be provided to select the adjacent transcript junction",
    525     )
--> 526 alt_acs, w = self.seqrepo_access.chromosome_to_acs(chromosome)
    528 if not alt_acs:
    529     return self._return_warnings(resp, w)

File ~/code/cool-seq-tool/src/cool_seq_tool/handlers/seqrepo_access.py:148, in SeqRepoAccess.chromosome_to_acs(self, chromosome)
    145 acs = []
    146 for assembly in reversed(Assembly.values()):
    147     tmp_acs, _ = self.translate_identifier(
--> 148         f"{assembly}:{process_chromosome_input(chromosome)}",
    149         target_namespaces="refseq",
    150     )
    151     acs += [ac.split("refseq:")[-1] for ac in tmp_acs]
    152 if acs:

File ~/code/cool-seq-tool/src/cool_seq_tool/utils.py:77, in process_chromosome_input(chromosome, context)
     55 """Perform processing on a chromosome arg.
     56 
     57 E.g.
   (...)
     74     changes needed.
     75 """
     76 original_chromosome_value = chromosome
---> 77 if chromosome.lower().startswith("chr"):
     78     chromosome = f"chr{chromosome[3:].upper()}"
     79 else:

AttributeError: 'NoneType' object has no attribute 'lower'

Possible reason(s)

No response

Suggested fix

No response

Branch, commit, and/or version

b9475a7 (main branch)

Screenshots

No response

Environment details

n/a

Additional details

No response

Contribution

Yes, I can create a PR for this fix.