diff --git a/mutalyzer/Retriever.py b/mutalyzer/Retriever.py index 5ca0bb480b6f4c7899f0dcac8cd7e1e4a1d7ffa0..77da54e894a5eed12b697b8646a2b967f3bbd35c 100644 --- a/mutalyzer/Retriever.py +++ b/mutalyzer/Retriever.py @@ -590,8 +590,16 @@ class GenBankRetriever(Retriever): query = "%s[Gene] AND %s[Orgn]" % (gene, organism) try: handle = Entrez.esearch(db = "gene", term = query) - searchresult = Entrez.read(handle) - handle.close() + try: + searchresult = Entrez.read(handle) + except Entrez.Parser.ValidationError: + self._output.addMessage(__file__, -1, 'INFO', + 'Error reading Entrez esearch result.') + self._output.addMessage(__file__, 4, 'ERETR', + 'Could not search for gene %s.' % gene) + return None + finally: + handle.close() except (IOError, urllib2.HTTPError, HTTPException) as e: self._output.addMessage(__file__, -1, 'INFO', 'Error connecting to Entrez esearch: %s' % str(e)) @@ -604,8 +612,16 @@ class GenBankRetriever(Retriever): for i in searchresult["IdList"] : # Inspect all results. try: handle = Entrez.esummary(db = "gene", id = i) - summary = Entrez.read(handle) - handle.close() + try: + summary = Entrez.read(handle) + except Entrez.Parser.ValidationError: + self._output.addMessage(__file__, -1, 'INFO', + 'Error reading Entrez esummary result.') + self._output.addMessage(__file__, 4, 'ERETR', + 'Could not get mapping information for gene %s.' % gene) + return None + finally: + handle.close() except (IOError, urllib2.HTTPError, HTTPException) as e: self._output.addMessage(__file__, -1, 'INFO', 'Error connecting to Entrez esummary: %s' % str(e)) diff --git a/mutalyzer/parsers/genbank.py b/mutalyzer/parsers/genbank.py index e82836638af058a695bf19145cf5e28bad8b9a13..867fa78f7b2d838d9076fc460eb5fd02282aee58 100644 --- a/mutalyzer/parsers/genbank.py +++ b/mutalyzer/parsers/genbank.py @@ -138,15 +138,25 @@ class GBparser(): return link.protein_accession handle = Entrez.esearch(db = "nucleotide", term = transcriptAcc) - result = Entrez.read(handle) - handle.close() + try: + result = Entrez.read(handle) + except Entrez.Parser.ValidationError: + # Todo: Log this error. + return None + finally: + handle.close() transcriptGI = result["IdList"][0] handle = Entrez.elink(dbfrom = "nucleotide", db = "protein", id = transcriptGI) - result = Entrez.read(handle) - handle.close() + try: + result = Entrez.read(handle) + except Entrez.Parser.ValidationError: + # Todo: Log this error. + return None + finally: + handle.close() if not result[0]["LinkSetDb"] : queries.update_transcript_protein_link(transcriptAcc)