From 2468672f8f2492f67c0efb3871e2759ee208b837 Mon Sep 17 00:00:00 2001 From: Martijn Vermaat <martijn@vermaat.name> Date: Mon, 17 Feb 2014 10:06:34 +0100 Subject: [PATCH] Handle NCBI Entrez response validation errors --- mutalyzer/Retriever.py | 24 ++++++++++++++++++++---- mutalyzer/parsers/genbank.py | 18 ++++++++++++++---- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/mutalyzer/Retriever.py b/mutalyzer/Retriever.py index 5ca0bb48..77da54e8 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 e8283663..867fa78f 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) -- GitLab