U
    qÂžet&  ã                   @   sš   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	ddl
mZ ddlmZ dZG dd„ dejjejjejjƒZdd	„ Zdd
d„ZdS )é    Né   )Ú_parse_date)Úconvert_to_idnz€application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1c                   @   s4   e Zd Zdd„ Zdd„ ZeZeZeZeZdd„ Z	dS )Ú_FeedURLHandlerc                 C   s
   ||_ |S ©N)Ústatus)ÚselfÚreqÚfpÚcodeÚmsgÚheaders© r   úm/mounts/lovelace/software/anaconda3/envs/qiime2-shotgun-2024.2/lib/python3.8/site-packages/feedparser/http.pyÚhttp_error_default0   s    z"_FeedURLHandler.http_error_defaultc                 C   s4   t jj | |||||¡}|s |S ||_| ¡ |_|S r   )ÚurllibÚrequestÚHTTPRedirectHandlerÚhttp_error_301r   ÚgeturlÚnewurl)r   r	   r
   r   r   ÚhdrsÚresultr   r   r   r   6   s    
z_FeedURLHandler.http_error_301c                 C   s¨   t j | ¡ ¡d }d|jks&d|kr8|  |||||¡S t |jd  d¡d  	¡ ¡ 
¡ }| d¡\}}	t d|d ¡d }
|  |
|||	¡ |  d|||¡}|  ¡  |S )	Nr   ÚAuthorizationzWWW-Authenticateú ú:zrealm="([^"]*)"r   zwww-authenticate)r   ÚparseÚurlparseÚget_full_urlr   r   Úbase64ÚdecodebytesÚsplitÚencodeÚdecodeÚreÚfindallÚadd_passwordÚhttp_error_auth_reqedÚreset_retry_count)r   r	   r
   r   r   r   ÚhostÚauthÚuserZpasswÚrealmÚretryr   r   r   Úhttp_error_401F   s    
"z_FeedURLHandler.http_error_401N)
Ú__name__Ú
__module__Ú__qualname__r   r   Zhttp_error_300Úhttp_error_302Úhttp_error_303Úhttp_error_307r.   r   r   r   r   r   /   s   r   c                 C   s:  t j | ¡}| d|¡ |r(| d|¡ t|tƒr<t|ƒ}nt|tjƒrP| ¡ }|rÈddddddd	g}	d
dddddddddddg}
| dd|	|d  |d |
|d d  |d |d |d |d f ¡ |rØ| d|¡ | d d!¡ |rø| d"d#| ¡ |r
| d$|¡ | 	¡ D ]\}}| ||¡ q| d%d&¡ |S )'Nz
User-AgentzIf-None-MatchÚMonÚTueÚWedÚThuÚFriÚSatÚSunÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDeczIf-Modified-Sincez#%s, %02d %s %04d %02d:%02d:%02d GMTé   é   r   r   é   é   é   ZRefererzAccept-encodingzgzip, deflater   zBasic %sÚAcceptzA-IMÚfeed)
r   r   ÚRequestÚ
add_headerÚ
isinstanceÚstrr   ÚdatetimeÚutctimetupleÚitems)ÚurlÚagentZaccept_headerÚetagÚmodifiedÚreferrerr*   Úrequest_headersr   Zshort_weekdaysÚmonthsÚheader_nameÚheader_valuer   r   r   Ú_build_urllib2_request\   s.    

Fr_   c                 C   s¶  |d krg }nt |tƒs|g}|d kr*i }|  d¡rB| dd … } n|  d¡r\d| dd …  } |spddlm} |}d }	|  d¡sêtj | ¡}
|
jrêt|
ƒ}|
j	|d< |
j
r¾|
j	› d|
j
› |d< tj |¡} t |
j› d|
j›  ¡ ¡ ¡ }	t | tƒsüt| ƒ} g }| D ]H}z| d	¡ W n( tk
r>   | tj |¡¡ Y nX | |¡ qd
 |¡} t| |t||||	|ƒ}tjjt|tƒ g ƒŽ }g |_| |¡}| ¡ }|  ¡  dd„ |j! "¡ D ƒ|d< |rFd|d  #dd
¡krFzt$j%t& '|¡d ¡ }W nN t(t)t*j+fk
rB } z&d|d< ||d< t |t*j+ƒr2d }W 5 d }~X Y nX nŒ|rÒd|d  #dd
¡krÒzt, -|¡}W n` t,j+k
rÐ   zt, -|d¡}W n6 t,j+k
rÊ } zd|d< ||d< W 5 d }~X Y nX Y nX d|d kr|d  #dd
¡}t |tƒr| dd¡}|r||d< d|d krN|d  #dd
¡}|rN||d< t.|ƒ|d< t |j/tƒrp|j/ dd¡|d< n
|j/|d< t0|dd ƒpŠd|d< t0|dd ƒd!kr²d
|d"< d#|d$< |S )%Nz	feed:httprL   zfeed:zhttp:r   )Ú
USER_AGENTzftp:r   ÚasciiÚ c                 S   s   i | ]\}}|  ¡ |“qS r   )Úlower)Ú.0ÚkÚvr   r   r   Ú
<dictcomp>°   s      zget.<locals>.<dictcomp>r   Úgzipzcontent-encoding)ÚfileobjTÚbozoÚbozo_exceptionÚdeflateiñÿÿÿrX   zutf-8Úignorezlast-modifiedrY   Zmodified_parsedÚhrefr   éÈ   r   r   i0  ÚversionzkThe feed has not changed since you last checked, so the server sent no data.  This is a feature, not a bug!Zdebug_message)1rQ   ÚlistÚ
startswithrb   r`   r   r   r   ÚusernameÚhostnameÚportÚ
urlunparser   Ústandard_b64encodeÚpasswordr"   r#   Úbytesr   ÚUnicodeEncodeErrorÚappendÚquoteÚjoinr_   ÚACCEPT_HEADERr   Úbuild_openerÚtupler   Ú
addheadersÚopenÚreadÚcloser   rU   Úgetrh   ÚGzipFileÚioÚBytesIOÚEOFErrorÚIOErrorÚstructÚerrorÚzlibÚ
decompressr   rV   Úgetattr)rV   rX   rY   rW   rZ   Úhandlersr[   r   r`   r*   Z
url_piecesÚ
new_piecesÚbitsÚcr   ÚopenerÚfÚdataÚer   r   r   r…   |   s˜    




 


 
r…   )NNNNNNN)r   rS   rh   r‡   r$   r‹   Úurllib.parser   Úurllib.requestr   Ú	datetimesr   Úurlsr   r~   r   ÚHTTPDigestAuthHandlerr   ÚHTTPDefaultErrorHandlerr   r_   r…   r   r   r   r   Ú<module>   s    - 