o
    ËÄ.jt&  ã                   @   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   úD/home/thesage/.local/lib/python3.10/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vsd|vr|  |||||¡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ÚuserÚpasswÚrealmÚretryr   r   r   Úhttp_error_401F   s   
"z_FeedURLHandler.http_error_401N)
Ú__name__Ú
__module__Ú__qualname__r   r   Ú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ƒr(| ¡ }|rUg d¢}	g d¢}
| dd|	|d  |d |
|d	 d	  |d
 |d |d |d f ¡ |r]| d|¡ | dd¡ |rm| dd| ¡ |ru| d|¡ | 	¡ D ]
\}}| ||¡ qy| 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   é   é   é   ÚRefererzAccept-encodingzgzip, deflater   zBasic %sÚAcceptzA-IMÚfeed)
r   r   ÚRequestÚ
add_headerÚ
isinstanceÚstrr   ÚdatetimeÚutctimetupleÚitems)ÚurlÚagentÚaccept_headerÚetagÚmodifiedÚreferrerr*   Úrequest_headersr   Úshort_weekdaysÚmonthsÚheader_nameÚheader_valuer   r   r   Ú_build_urllib2_request\   s.   

Frd   c                 C   s°  |d u rg }nt |tƒs|g}|d u ri }|  d¡r!| dd … } n|  d¡r.d| dd …  } |s8ddlm} |}d }	|  d¡sutj | ¡}
|
jrut|
ƒ}|
j	|d< |
j
r_|
j	› d|
j
› |d< tj |¡} t |
j› d|
j›  ¡ ¡ ¡ }	t | tƒs~t| ƒ} g }| D ]!}z| d	¡ W n ty   | tj |¡¡ Y q‚w | |¡ q‚d
 |¡} t| |t||||	|ƒ}tjjt|tƒ g ƒŽ }g |_| |¡}| ¡ }|  ¡  dd„ |j! "¡ D ƒ|d< |r d|d  #dd
¡v r zt$j%t& '|¡d ¡ }W nn t(t)t*j+fy } zd|d< ||d< t |t*j+ƒrd }W Y d }~nKd }~ww |rfd|d  #dd
¡v rfzt, -|¡}W n0 t,j+ye   zt, -|d¡}W n t,j+yb } zd|d< ||d< W Y d }~nd }~ww Y nw d|d v rˆ|d  #dd
¡}t |tƒr| dd¡}|rˆ||d< d|d v r¤|d  #dd
¡}|r¤||d< t.|ƒ|d< t |j/tƒrµ|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:httprN   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ñÿÿÿr\   zutf-8Úignorezlast-modifiedr]   Ú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!Údebug_message)1rT   ÚlistÚ
startswithrg   re   r   r   r   ÚusernameÚhostnameÚportÚ
urlunparser   Ústandard_b64encodeÚpasswordr"   r#   Úbytesr   ÚUnicodeEncodeErrorÚappendÚquoteÚjoinrd   ÚACCEPT_HEADERr   Úbuild_openerÚtupler   Ú
addheadersÚopenÚreadÚcloser   rX   Úgetrm   ÚGzipFileÚioÚBytesIOÚEOFErrorÚIOErrorÚstructÚerrorÚzlibÚ
decompressr   rY   Úgetattr)rY   r\   r]   rZ   r^   Úhandlersr_   r   re   r*   Ú
url_piecesÚ
new_piecesÚbitsÚcr   ÚopenerÚfÚdataÚer   r   r   rŒ   |   s¦   




 
ÿ

€÷
€þ€ü	
rŒ   )NNNNNNN)r   rV   rm   rŽ   r$   r’   Úurllib.parser   Úurllib.requestr”   Ú	datetimesr   Úurlsr   r…   r   ÚHTTPDigestAuthHandlerr   ÚHTTPDefaultErrorHandlerr   rd   rŒ   r   r   r   r   Ú<module>   s    - 