o
    ›¨Êh  ã                   @   s¶   d dgZ ddlmZ zddlmZ ddlmZ G dd „ d eƒZG dd„ deƒZW dS  eyZ   ddl	m
Z
 dd	lmZ G d
d „ d eƒZG dd„ deƒZG dd„ dƒZdd„ ZY dS w )ÚEmailParserÚEmailBytesParseré    )ÚParser)Údefault)ÚBytesParserc                       ó"   e Zd Zdef‡ fdd„	Z‡  ZS )r   Nc                    ó   t t| ƒj||d� d S ©N)Úpolicy)Úsuperr   Ú__init__©ÚselfÚ_classr
   ©Ú	__class__© úG/var/www/html/env/lib/python3.10/site-packages/anymail/_email_compat.pyr      ó   zEmailParser.__init__©Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      ó    c                       r   )r   Nc                    r   r	   )r   r   r   r   r   r   r   r      r   zEmailBytesParser.__init__r   r   r   r   r   r      r   )Údecode_header)Údequec                   @   ó   e Zd Zddd„ZdS )r   Fc                 C   s<   t |ƒ}tj| ||d�}| ¡ D ]}dd„ |jD ƒ|_q|S )N)Úheadersonlyc                 S   s   g | ]
\}}|t |ƒf‘qS r   )Ú_decode_rfc2047)Ú.0ÚnameÚvaluer   r   r   Ú
<listcomp>0   s    
ÿÿz%EmailParser.parse.<locals>.<listcomp>)ÚHeaderUnfoldingWrapperr   ÚparseÚwalkÚ_headers)r   Úfpr   ÚmessageÚpartr   r   r   r%   '   s   
þzEmailParser.parseN©F)r   r   r   r%   r   r   r   r   r   &   ó    c                   @   r   )r   Fc                 C   s   |   ||¡S ©N)Úparsestr)r   Útextr   r   r   r   Ú
parsebytes6   s   zEmailBytesParser.parsebytesNr+   )r   r   r   r0   r   r   r   r   r   5   r,   c                   @   s>   e Zd ZdZdd„ Zddd„Zddd„Zdd	d
„Zdd„ ZdS )r$   an  
        A wrapper for file-like objects passed to email.parser.Parser.parse which works
        around older Parser bugs with folded email headers by pre-unfolding them.

        This only works for headers at the message root, not ones within a MIME subpart.
        (Accurately recognizing subpart headers would require parsing mixed-content boundaries.)
        c                 C   s   || _ d| _tƒ | _d S )NT)r(   Ú_in_headersr   Ú	_pushback)r   r(   r   r   r   r   C   s   zHeaderUnfoldingWrapper.__init__éÿÿÿÿc                 C   sj   z| j  ¡ }W |S  ty4   | j |¡}| d¡}t|ƒdkr1|d }| j  |dd … ¡ Y |S Y |S w )NTé   r   )r2   ÚpopleftÚ
IndexErrorr(   ÚreadlineÚ
splitlinesÚlenÚextend)r   ÚlimitÚlineÚlinesr   r   r   Ú	_readlineH   s   ù
ýùz HeaderUnfoldingWrapper._readlinec                 C   s<   z| j d }W |S  ty   |  |¡}| j  |¡ Y |S w )Nr   )r2   r6   r>   Ú
appendleft)r   r;   r<   r   r   r   Ú	_peeklineT   s   ý
ýz HeaderUnfoldingWrapper._peeklinec                 C   sL   |   |¡}| jr$| d¡}t|ƒdkrd| _|S |  |¡}| d¡r$|}|S )Nz
r   F)ú ú	)r>   r1   Úrstripr9   r@   Ú
startswith)r   r;   r<   Úline_without_endÚ	next_liner   r   r   r7   \   s   


ý
zHeaderUnfoldingWrapper.readlinec                 C   s@   | j r|  |¡S t| jƒrd | j¡}| j ¡  |S | j |¡S )NÚ )r1   r7   r9   r2   ÚjoinÚclearr(   Úread)r   ÚsizeÚbufr   r   r   rJ   m   s   


zHeaderUnfoldingWrapper.readN)r3   )	r   r   r   Ú__doc__r   r>   r@   r7   rJ   r   r   r   r   r$   :   s    


r$   c                 C   s†   | }t | ƒ}tdd„ |D ƒƒrAg }d }|D ]&\}}|d u s!|d u r(|r(| d¡ |d ur2| |d¡n|}| |¡ |}qd |¡}|S )Nc                 s   s   � | ]	\}}|d uV  qd S r-   r   )r    ÚrawÚcharsetr   r   r   Ú	<genexpr>}   s   € z"_decode_rfc2047.<locals>.<genexpr>rA   ÚreplacerG   )r   ÚanyÚappendÚdecoderH   )r"   ÚresultÚdecoded_segmentsÚunicode_segmentsÚprev_charsetrN   rO   Údecodedr   r   r   r   z   s   


r   N)Ú__all__Úemail.parserr   Úemail.policyr   r   r   r   ÚImportErrorÚemail.headerr   Úcollectionsr   r$   r   r   r   r   r   Ú<module>   s   @§