o
    Rŀg                     @   sZ   d Z ddlZddlmZ ddlmZ 	dddZ	dd	d
ZdddZdd Z	dd Z
dS )ae  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.

    N)	HTTPError)urlopen;https://prosite.expasy.org/cgi-bin/prosite/get-prodoc-entryc                 C      t | d|  S )a  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'
    ?_openidcgi r   G/var/www/html/myenv/lib/python3.10/site-packages/Bio/ExPASy/__init__.pyget_prodoc_entry      r   <https://prosite.expasy.org/cgi-bin/prosite/get-prosite-entryc                 C   r   )a  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'
    r   r   r	   r   r   r   get_prosite_entry-   r   r   c              
   C   sh   z
t d|  d}W n ty# } z|jdkrtd|  d d}~ww |jdkr2td|  dd|S )	ah  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

    zhttps://prosite.expasy.org/.txt  z#Failed to find entry '%s' on ExPASyNzhttps://www.expasy.org/zFailed to find entry 'z' on ExPASy)r   r   code
ValueErrorurl)r
   r   handle	exceptionr   r   r   get_prosite_rawB   s   

r   c              
   C   sN   zt d|  d}W |S  ty& } z|jdv r!td|  dd d}~ww )a  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'

    zhttp://www.uniprot.org/uniprot/r   )i  r   z Failed to find SwissProt entry ''N)r   r   r   r   )r
   r   r   r   r   r   get_sprot_rawe   s   
r   c                 C   s"   t | }tj|dd}|j|_|S )z?Open URL and convert to text assuming UTF-8 encoding (PRIVATE).zUTF-8)encoding)r   ioTextIOWrapperr   )r   r   text_handler   r   r   r      s   r   )r   )r   )N)__doc__r   urllib.errorr   urllib.requestr   r   r   r   r   r   r   r   r   r   <module>   s   


# 