Spaces:
No application file
No application file
| # Copyright 2000 by Jeffrey Chang. All rights reserved. | |
| # This code is part of the Biopython distribution and governed by its | |
| # license. Please see the LICENSE file that should have been included | |
| # as part of this package. | |
| """Code to access resources at ExPASy over the WWW. | |
| See https://www.expasy.org/ | |
| Functions: | |
| - get_prodoc_entry Interface to the get-prodoc-entry CGI script. | |
| - get_prosite_entry Interface to the get-prosite-entry CGI script. | |
| - get_prosite_raw Interface to the get-prosite-raw CGI script. | |
| - get_sprot_raw Interface to the get-sprot-raw CGI script. | |
| """ | |
| import io | |
| from urllib.request import urlopen | |
| from urllib.error import HTTPError | |
| def get_prodoc_entry( | |
| id, cgi="https://prosite.expasy.org/cgi-bin/prosite/get-prodoc-entry" | |
| ): | |
| """Get a text handle to a PRODOC entry at ExPASy in HTML format. | |
| >>> from Bio import ExPASy | |
| >>> import os | |
| >>> with ExPASy.get_prodoc_entry('PDOC00001') as in_handle: | |
| ... html = in_handle.read() | |
| ... | |
| >>> with open("myprodocrecord.html", "w") as out_handle: | |
| ... length = out_handle.write(html) | |
| ... | |
| >>> os.remove("myprodocrecord.html") # tidy up | |
| For a non-existing key XXX, ExPASy returns an HTML-formatted page | |
| containing this text: 'There is currently no PROSITE entry for' | |
| """ | |
| return _open(f"{cgi}?{id}") | |
| def get_prosite_entry( | |
| id, cgi="https://prosite.expasy.org/cgi-bin/prosite/get-prosite-entry" | |
| ): | |
| """Get a text handle to a PROSITE entry at ExPASy in HTML format. | |
| >>> from Bio import ExPASy | |
| >>> import os | |
| >>> with ExPASy.get_prosite_entry('PS00001') as in_handle: | |
| ... html = in_handle.read() | |
| ... | |
| >>> with open("myprositerecord.html", "w") as out_handle: | |
| ... length = out_handle.write(html) | |
| ... | |
| >>> os.remove("myprositerecord.html") # tidy up | |
| For a non-existing key XXX, ExPASy returns an HTML-formatted page | |
| containing this text: 'There is currently no PROSITE entry for' | |
| """ | |
| return _open(f"{cgi}?{id}") | |
| def get_prosite_raw(id, cgi=None): | |
| """Get a text handle to a raw PROSITE or PRODOC record at ExPASy. | |
| The cgi argument is deprecated due to changes in the ExPASy | |
| website. | |
| >>> from Bio import ExPASy | |
| >>> from Bio.ExPASy import Prosite | |
| >>> with ExPASy.get_prosite_raw('PS00001') as handle: | |
| ... record = Prosite.read(handle) | |
| ... | |
| >>> print(record.accession) | |
| PS00001 | |
| This function raises a ValueError if the identifier does not exist: | |
| >>> handle = ExPASy.get_prosite_raw("DOES_NOT_EXIST") | |
| Traceback (most recent call last): | |
| ... | |
| ValueError: Failed to find entry 'DOES_NOT_EXIST' on ExPASy | |
| """ | |
| handle = _open(f"https://prosite.expasy.org/{id}.txt") | |
| if handle.url == "https://www.expasy.org/": | |
| raise ValueError(f"Failed to find entry '{id}' on ExPASy") from None | |
| return handle | |
| def get_sprot_raw(id): | |
| """Get a text handle to a raw SwissProt entry at ExPASy. | |
| For an ID of XXX, fetches http://www.uniprot.org/uniprot/XXX.txt | |
| (as per the https://www.expasy.org/expasy_urls.html documentation). | |
| >>> from Bio import ExPASy | |
| >>> from Bio import SwissProt | |
| >>> with ExPASy.get_sprot_raw("O23729") as handle: | |
| ... record = SwissProt.read(handle) | |
| ... | |
| >>> print(record.entry_name) | |
| CHS3_BROFI | |
| This function raises a ValueError if the identifier does not exist: | |
| >>> ExPASy.get_sprot_raw("DOES_NOT_EXIST") | |
| Traceback (most recent call last): | |
| ... | |
| ValueError: Failed to find SwissProt entry 'DOES_NOT_EXIST' | |
| """ | |
| try: | |
| handle = _open(f"http://www.uniprot.org/uniprot/{id}.txt") | |
| except HTTPError as exception: | |
| if exception.code in (400, 404): | |
| raise ValueError(f"Failed to find SwissProt entry '{id}'") from None | |
| else: | |
| raise | |
| return handle | |
| def _open(url): | |
| """Open URL and convert to text assuming UTF-8 encoding (PRIVATE).""" | |
| handle = urlopen(url) | |
| text_handle = io.TextIOWrapper(handle, encoding="UTF-8") | |
| text_handle.url = handle.url | |
| return text_handle | |