"""This module contains code to access EZRetrieve (DEPRECATED).
This module is now deprecated, and will be removed in a future release of
Biopython.
This is a very simple interface to the EZRetrieve website described in:
Zhang, H., Ramanathan, Y., Soteropoulos, P., Recce, M., and Tolias, P.P. (2002).
EZ-Retrieve: A web-server for batch retrieval of coordinate-specified human
DNA sequences and underscoring putative transcription factor-binding sites.
Nucl. Acids. Res. 2002 30: e121.
http://dx.doi.org/10.1093/nar/gnf120
Functions:
retrieve_single Retrieve a single sequence from EZRetrieve.
parse_single Parse the results from EZRetrieve into FASTA format.
"""
import warnings
warnings.warn("Bio.EZRetrieve is deprecated, and will be removed in a future"\
" release of Biopython. If you want to continue to use this"\
" code, please get in contact with the Biopython developers"\
" via the mailing lists to avoid its permanent removal from"\
" Biopython.", DeprecationWarning)
def retrieve_single(id, from_, to, retrieve_by=None, organism=None,
parse_results=1):
import urllib.request, urllib.parse, urllib.error
CGI = "http://siriusb.umdnj.edu:18080/EZRetrieve/single_r_run.jsp"
org2value = {"Hs" : "0", "Mm" : "1", "Rn" : 2}
organism = organism or "Hs"
assert organism in org2value
acctype2value = {"genbank":0, "unigene":1, "locuslink":2, "image":3}
retrieve_by = retrieve_by or "GenBank"
retrieve_by = retrieve_by.lower()
assert retrieve_by in acctype2value
params = {
"input" : str(id),
"from" : str(from_),
"to" : str(to),
"org" : org2value[organism],
"AccType" : acctype2value[retrieve_by],
}
options = urllib.parse.urlencode(params)
handle = urllib.request.urlopen(CGI, options)
if parse_results:
results = parse_single(handle)
else:
results = handle.read()
return results
def parse_single(handle):
"""Return a FASTA-formatted string for the sequence. May raise an
AssertionError if there was a problem retrieving the sequence.
"""
import re
results = handle.read()
lresults = results.lower()
i = results.find("Error: ")
if i >= 0:
j = lresults.index("
", i)
errmsg = results[i:j].strip()
raise AssertionError(errmsg)
i = lresults.find(">")
assert i >= 0, "Couldn't find sequence."
j = lresults.find("
", i)
seqdata = results[i:j]
reobj = re.compile(r"<[^>]*>", re.IGNORECASE|re.DOTALL)
seqdata = reobj.sub("", seqdata)
seqdata = re.sub(r"\s+", r"\n", seqdata)
seqdata = seqdata.strip() + "\n"
return seqdata